我正在尝试将 SHP 文件放入我的 PostGIS 数据库中,数据有点偏差。我认为这是因为我使用了错误的 SRID。 PRJ文件内容如下:
GEOGCS["GCS_North_American_1983",
DATUM["D_North_American_1983",
SPHEROID["GRS_1980",6378137.0,298.257222101]],
PRIMEM["Greenwich",0.0],
UNIT["Degree",0.0174532925199433]]
这与什么 SRID 相关?更一般地说,如何根据 PRJ 文件中找到的信息查找 SRID?是否有一个查找表列出了所有 SRID 及其“geogcs”等效项?
使用
srid=4269
和4326导入的数据结果完全相同。
这是否意味着我使用了错误的 SRID,或者这只是预期的误差范围?
shp 文件来自这里。
为了详细说明 synecdoche 的答案,SRID 有时称为“EPSG”代码。 SRID/EPSG 代码实际上是投影的众所周知的文本表示的简写。
您可以在 SRID 表上进行快速搜索,看看是否可以找到完全或相似的匹配:
SELECT srid, srtext, proj4text FROM spatial_ref_sys WHERE srtext ILIKE '%BLAH%'
以上内容位于 http://www.bostongis.com/?content_name=postgis_tut01。
您还可以在 spatialreference.org 上搜索此类内容。搜索工具很原始,因此您可能必须使用 Google 搜索并指定站点,但任何结果都会向您显示 ESRI PRJ 内容、PostGIS SQL INSERT 和一堆其他表示形式。
我认为您的 PRJ 位于:http://spatialreference.org/ref/sr-org/15/
数据似乎是NAD83,其SRID为4269。您的PostGIS数据库有一个
spatial_ref_sys
表,它是SRID查找表。
如果 SRID 为 4269 (NAD83) 和 4326 (WGS84) 时数据看起来相同,则说明有问题。
去下载 GDAL 实用程序,ogrinfo(它会吐出投影信息)和 ogr2ogr 实用程序非常宝贵。
James 已经给出了 spatialreference.org 的链接。这有助于查找空间参考信息...我假设您在
准备好 postgis 实例时确实加载了
spatial_ref_sys.sql
。
说实话,我不认为问题出在 PostGIS 方面。
我通常将数据保存在 PostGIS 数据库的不同 SRID 中。然而,我总是需要投影到输出SRS。您正在显示 OpenStreetMap 预渲染的图块,我敢打赌它们是使用 SRID 900913 绘制的(Google 地图的修改墨卡托投影,现在每个人都使用渲染)。
我给你的建议是:
1- 在 OpenLayers 代码中设置与您正在读取的任何图块相匹配的正确投影。
2.- 将数据库中的数据保存在您想要的任何 SRID 中(当然只要它是正确的)。
3.- 确保您用来从数据生成图像的服务器(ArcGIS Server、Mapserver、GeoServer 或其他任何东西)重新投影到同一个 SRS。
一切都会匹配。
干杯
使用GDAL的OSR Python模块来确定代码:
from osgeo import osr
srsWkt = '''GEOGCS["GCS_North_American_1983",
DATUM["D_North_American_1983",
SPHEROID["GRS_1980",6378137.0,298.257222101]],
PRIMEM["Greenwich",0.0],
UNIT["Degree",0.0174532925199433]]'''
# Load in the projection WKT
sr = osr.SpatialReference(srsWkt)
# Try to determine the EPSG/SRID code
res = sr.AutoIdentifyEPSG()
if res == 0: # success
print('SRID=' + sr.GetAuthorityCode(None))
# SRID=4269
else:
print('Could not determine SRID')
请务必查看:http://www.epsg-registry.org/
使用“按过滤器查询”选项并输入:North American Datum 1983。
这产生 -> EPSG:6269。
希望这对您有用。
其他答案更权威,所以我什至犹豫是否要添加这个,但对于一个在使用前应验证的简单建议,可以简单地将“SRID”加上文本粘贴到搜索引擎中,即:
SRID GEOGCS["GCS_North_American_1983", DATUM["D_North_American_1983", SPHEROID["GRS_1980",6378137.0,298.257222101]], PRIMEM["格林威治",0.0], UNIT["度",0.0174532925199433]]
当我尝试时,DuckDuckGo 在 EPSG.io 上返回了 SRID 4269 的正确页面作为最佳结果,Bing 和 Google 也几乎做到了这一点。