Экспортируйте систему координат как код 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)

OSGeo:

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 и, следовательно, быть легко доступным?

0 ответов

Можно попробовать pyproj CRS: https://pyproj4.github.io/pyproj/stable/examples.html

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), не знаю почему.

Другие вопросы по тегам