Построить картопию CRS из параметров proj4

Я скачал файл MODIS .hdf. Загружая его с помощью xarray, он дает мне атрибут ds.Proj4String == ' +a=6378137.0 +b=6356752.3142451793 +no_defs +proj=latlong\n'.

Как я могу использовать эту строку для преобразования необработанных координат, например, в широта / долгота?

Вот как выглядят данные:

<xarray.Dataset>
Dimensions:                  (XDim:mod06: 1503, YDim:mod06: 833)
Dimensions without coordinates: XDim:mod06, YDim:mod06
Data variables:
    Cloud_Optical_Thickness  (YDim:mod06, XDim:mod06) float32 ...
Attributes:
    HDFEOSVersion:     HDFEOS_V2.19
    StructMetadata.0:  GROUP=SwathStructure\nEND_GROUP=SwathStructure\nGROUP=...
    CoreMetadata:      \nGROUP = INVENTORYMETADATA\n  GROUPTYPE = MASTERGROUP...
    ArchiveMetadata:   GROUP = ARCHIVEDMETADATA\n  GROUPTYPE = MASTERGROUP\n\...
    Proj4String:        +a=6378137.0 +b=6356752.3142451793 +no_defs +proj=lat...

docs говорят мне передать proj4_params в качестве ключа- пары значений, так что я иду

ss = ds.Proj4String.split()
proj = {}
for s in ss:
    k = s.split('=')
    if len(k)==2:
        proj[k[0][1:]] = k[1]
print(proj)

и достигли {'a': '6378137.0', 'b': '6356752.3142451793', 'proj': 'latlong'}, но ccrs.CRS(proj) по-прежнему выдает ошибку об отсутствии атрибута globe.


person doppler    schedule 15.05.2019    source источник


Ответы (1)


Создание проекций CartoPy исключительно из строк proj.4 пока не поддерживается, см. этот PR. Класса CRS, который вы используете, действительно недостаточно для создания полностью функционирующей проекции в CartoPy, и он действительно разработан как базовый класс для других проекций.

Что касается получаемой вами ошибки, globe является обязательным параметром независимо от того, что передается в proj4_params. Вы можете создать экземпляр Globe примерно так:

globe = ccrs.Globe(semimajor_axis=proj.pop('a'), semiminor_axis=proj.pop('b'))
person DopplerShift    schedule 16.05.2019
comment
Спасибо, я понимаю, насколько эта проблема сложнее, чем я думал изначально. Я оставлю вопрос открытым, чтобы получить ответ, если когда-либо / когда это станет возможным. - person doppler; 19.05.2019