当使用fiona
和osgeo
处理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依赖。
问题:
有人能告诉我一个简单,直接的方式将CRS导出为python中的EPSG代码吗?类似to_epsg()
中的Fiona
或ExportToEPSG()
中的osgeo
?
有人可以解释在整个互联网上出现如此短缺的EPSG出口可能性的理论背景,特别是与EPSG代码导入的简便性相比。 EPSG代码的重点不在于使坐标系易于识别和使用,而没有先进的地理空间专业知识吗?它不应该像CRS的ID一样,因此很容易检索吗?
答案 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),不确定原因。