Экспорт системы координат как код ESPG: to_epsg () или ExportToEPSG ()

Имея дело с системами координат в Python с fiona и osgeo, кажется, есть много способов определить систему координат путем импорта / экспорта различных форматов crs, например:

ФИОНА:

from fiona.crs import from_epsg,from_string,to_string

# Import crs from different formats:
wgs = from_epsg(4326)
wgs = from_string("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs ")

# Export crs as proj4 string
wgs_proj4_string = to_string(wgs)

ОСГЕО:

from osgeo import osr

srs = osr.SpatialReference()
srs.ImportFromESRI(['GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]'])
srs.ImportFromProj4("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
srs.ImportFromEPSG(4326)
#the import options are very rich

# Export to different formats
srs.ExportToProj4()
srs.ExportToWkt()
srs.ExportToXML()
#... many export options!

Тем не менее, я заметил, что обе библиотеки позволяют легко определять crs по его коду EPSG, но в них обеих отсутствует обратная функция (экспорт crs как кода ESPG).

Ближайший к мне код EPSG:

srs.AutoIdentifyEPSG()
epsg = srs.GetAuthorityCode(None)

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

ВОПРОСЫ:

  1. Может ли кто-нибудь показать мне простой и понятный способ экспорта CRS в виде кода EPSG на Python? Что-то вроде to_epsg() в Fiona или ExportToEPSG() в osgeo?

  2. Может ли кто-нибудь объяснить теоретические основы такой нехватки возможностей экспорта EPSG в Интернете, особенно по сравнению с простотой импорта с помощью кода EPSG. Разве весь смысл кодов EPSG не в том, чтобы упростить идентификацию и использование систем координат для людей, не обладающих передовыми знаниями в области геопространственной информации? Разве он не должен служить идентификатором CRS и, следовательно, быть легко доступным?


person Marjan Moderc    schedule 13.02.2017    source источник


Ответы (1)


Можно попробовать pyproj CRS: https://pyproj4.github.io/pyproj/stable/examples.html#converting-crs-to-a-different-format

from pyproj import CRS
from fiona.crs import to_string, from_epsg

fiona_crs = from_epsg(28356)
proj4_crs = CRS.from_proj4(to_string(fiona_crs))
srid = proj4_crs.to_epsg()

Хотя по какой-то причине это не работает для EPSG 4326, для меня, к сожалению (to_epsg в этом случае возвращает None), я не уверен, почему.

person ssast    schedule 24.04.2020