将坐标系导出为ESPG代码:to_epsg()或ExportToEPSG()

时间:2017-02-13 15:46:47

标签: python geospatial osgeo epsg fiona

当使用fionaosgeo处理Python中的坐标系时,似乎有很多方法可以通过导入/导出不同的crs格式来定义坐标系,例如:

FIONA:

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!

然而,我注意到,两个库都允许通过其EPSG代码轻松定义crs,但它们都缺少反函数(将crs导出为ESPG代码)。

我最接近的EPSG代码是:

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

但它似乎并不那么可靠,而且其他提议的solutions似乎也包含了大量的调整或至少web service依赖。

问题

  1. 有人能告诉我一个简单,直接的方式将CRS导出为python中的EPSG代码吗?类似to_epsg()中的FionaExportToEPSG()中的osgeo

  2. 有人可以解释在整个互联网上出现如此短缺的EPSG出口可能性的理论背景,特别是与EPSG代码导入的简便性相比。 EPSG代码的重点不在于使坐标系易于识别和使用,而没有先进的地理空间专业知识吗?它不应该像CRS的ID一样,因此很容易检索吗?

1 个答案:

答案 0 :(得分: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),不确定原因。