6

fiona在 Python 中使用and处理坐标系时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!

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

我得到EPSG代码的最接近的是:

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

但它似乎并不那么可靠,而且其他提议的解决方案似乎也包括大量的调整或至少对Web 服务的依赖。

问题

  1. 有人可以向我展示一种将 CRS 导出为 python 中的 EPSG 代码的简单、直接的方法吗?类似to_epsg()inFionaExportToEPSG()in 的东西osgeo

  2. 有人可以解释整个互联网上 EPSG 出口可能性如此短缺的理论背景,尤其是与 EPSG 代码导入的便利性相比。EPSG 代码的全部意义不在于使没有高级地理空间专业知识的人易于识别和使用坐标系吗?它不应该像 CRS 的 ID 一样服务,因此可以轻松检索吗?

4

1 回答 1

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),不知道为什么。

于 2020-04-24T17:19:46.560 回答