你怎么知道什么SRID用于一个shp文件?

pri*_*stc 34 gis postgis geodjango srid

我正在尝试将一个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]]
Run Code Online (Sandbox Code Playgroud)

SRID与此相关的是什么?更一般地说,如何根据PRJ文件中的信息查找SRID?在某个地方是否有一个列出所有SRID及其"geogcs"等价物的查找表?

作为参考,这里是使用导入的一些数据的图像srid=4269(我也尝试了4326并获得了完全相同的结果):

图片http://img245.imageshack.us/img245/2545/4326sand.png

黄色是我从SHP导入的数据,背景来自openlayers(来自geodjango admin).这是否意味着我使用了错误的SRID,或者这只是预期的误差范围?

shp文件来自这里

Jam*_*hek 23

为了详细说明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/


Nel*_*son 20

Prj2EPSG是一个针对这个问题的小型网站; 粘贴在PRJ内容中,并尽力找到匹配的EPSG.他们还有一个Web服务API.这不是一门精确的科学.他们似乎使用Lucene和EPSG数据库来进行匹配的文本搜索.


syn*_*che 11

数据似乎是NAD83,其SRID为4269.您的PostGIS数据库有一个spatial_ref_sys表,它是SRID查找表.

如果SRID为4269(NAD83)和4326(WGS84)的数据看起来相同,那就有问题了.


rbu*_*hum 7

去下载GDAL实用程序,ogrinfo(它会吐出投影信息)和ogr2ogr实用程序是非常宝贵的.

詹姆斯已经给了spatialreference.org一个链接.这有助于找到空间参考信息...我假设您spatial_ref_sys.sql准备postgis实例时加载了.

说实话,我不认为问题出在PostGIS方面.

我通常将我的数据保存在PostGIS dbs中的不同SRID中.但是,我总是需要投射到输出SRS.您正在展示OpenStreetMap预渲染图块,我敢打赌它们是使用SRID 900913(Google Map的修改后的墨卡托投影,现在每个人都用来渲染)绘制的.

我给你的建议是:

1-在OpenLayers代码中设置正确的投影,该代码匹配您正在读取的任何图块.

2.-将数据保存在您想要的任何SRID中(只要它当然是正确的).

3.-确保用于生成数据图像的服务器(ArcGIS Server,Mapserver,GeoServer或其他任何内容)正在重新投影到同一SRS.

一切都会匹配.

干杯


Mik*_*e T 6

使用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')
Run Code Online (Sandbox Code Playgroud)