Построить картопи CRS из параметров proj4 - PullRequest
0 голосов
/ 15 мая 2019

Я скачал файл 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...

документы говорят мне передать 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.

1 Ответ

1 голос
/ 17 мая 2019

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

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

globe = ccrs.Globe(semimajor_axis=proj.pop('a'), semiminor_axis=proj.pop('b'))
...