Экспортируйте систему координат как код 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)
но он не кажется таким надежным, а также другие предлагаемые решения, кажется, включают в себя большое количество настроек или, по крайней мере, зависимость от веб-сервисов.
ВОПРОСЫ:
Может кто-нибудь показать мне простой, прямой способ экспортировать CRS как код EPSG в python? Что-то вроде
to_epsg()
вFiona
или жеExportToEPSG()
вosgeo
?Может кто-нибудь объяснить теоретическую основу наличия такой нехватки возможностей экспорта 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), не знаю почему.