QGIS为什么不从.prj文件检测CRS?


9

我在postgreSQL / postGIS数据库中有许多1公里的六角形网格,覆盖了美国的各个县。每个网格具有CRS EPSG:3857,而县层具有EPSG:3857。在QGIS中使用县查看网格时,一切看起来都很宏伟。

但是...为了与同事共享这些网格,我不得不使用ogr2​​ogr将它们导出到shapefile。在QGIS中查看这些图像时,每个网格看上去都在大约20 km左右移动,并且QGIS自动将CRS设置为EPSG:3395(这不是项目CRS)。

当我从QGIS导出postGIS表作为shapefile .prj文件看起来与ogr2ogr导出的shapefile完全相同,但是postGIS导出的表正确显示。我注意到从QGIS导出shapefile时QGIS会创建一个.qpj文件,因此得出的结论是QGIS忽略了.prj而是在寻找.qpj。为什么没有.qpj的情况下无法读取.prj?其他shapefile(例如来自美国人口普查的shapefile)没有.qpj,但QGIS可以正确显示这些文件。

我想出了一种解决方法,方法是保存default.qpj并为此使用ogr2​​ogr导出的每个文件为此创建一个新的.qpj,但这似乎很麻烦,而且显然不可复制,因为它仅适用于EPSG:3857。

旁注:我正在使用QGIS 2.0.1。

编辑:

这是我使用的ogr2ogr命令:

ogr2ogr -f "ESRI Shapefile" /home/matt/data/hex_grid_1 PG:'dbname=mydb user=matt' hex_grid_1

.prj的内容:

PROJCS [“ WGS_84_Pseudo_Mercator”,GEOGCS [“ GCS_WGS_1984”,DATUM [“ D_WGS_1984”,SPHEROID [“ WGS_1984”,6378137,298.257223563]],PRIMEM [“ Greenwich”,0],UNIT [“ Degree”,0.017453292519943295] [“ Mercator”],PARAMETER [“ central_meridian”,0],PARAMETER [“ false_easting”,0],PARAMETER [“ false_northing”,0],UNIT [“ Meter”,1],PARAMETER [“ standard_parallel_1”,0.0] ]

.qpj的内容:

PROJCS [“ WGS 84 /伪墨卡托”,GEOGCS [“ WGS 84”,DATUM [“ WGS_1984”,SPHEROID [“ WGS 84”,6378137,298.257223563,AUTHORITY [“ EPSG”,“ 7030”]],AUTHORITY [“ EPSG“,” 6326“]],PRIMEM [”格林威治“,0,AUTHORITY [” EPSG“,” 8901“]],UNIT [”度“,0.0174532925199433,AUTHORITY [” EPSG“,” 9122“]],授权[“ EPSG”,“ 4326”]],投影[“ Mercator_1SP”],PARAMETER [“ central_meridian”,0],PARAMETER [“ scale_factor”,1],PARAMETER [“ false_easting”,0],PARAMETER [“ false_northing” ,0],UNIT [“ metre”,1,AUTHORITY [“ EPSG”,“ 9001”]],AXIS [“ X”,EAST],AXIS [“ Y”,NORTH],EXTENSION [“ PROJ4”,“ + proj = merc + a = 6378137 + b = 6378137 + lat_ts = 0.0 + lon_0 = 0。0 + x_0 = 0.0 + y_0 = 0 + k = 1.0 + units = m + nadgrids = @ null + wktext + no_defs“],AUTHORITY [” EPSG“,” 3857“]]

编辑

通过将所有脚本中的EPSG:3857转换为EPSG:2163可以解决该问题。我仍然不确定是什么问题,因为最初从postgreSQL表(使用EPSG:3857)加载时,网格在QGIS中正确显示。

由于我的同事无法在ArcGIS中使用该文件,而该文件无法正确读取.prj或.qpj,因此我的解决方法被证明是我想的那样粗糙。


您可以添加ogr2ogr命令吗?
alphabetasoup

您还可以发布.prj和.qpj文件的内容吗?
mkennedy

1
en.wikipedia.org/wiki/Web_Mercator上的“ WGS84 Web墨卡托投影在辅助球上”的功能可能有限。不同于椭圆墨卡托和球形墨卡托,Web墨卡托由于使用了椭圆体而不太保形相对于球形投影的基准地理坐标。
huckfinn

@huckfinn我在脚本中将所有EPSG:3857更改为EPSG:2163,现在问题已解决。我仍然不确定为什么会这样,因为当从带有EPSG:3857的postgreSQL表中加载时,所有网格都可以正确显示。谢谢你的提示。
哈夫

Answers:


4

EPSG:3857定义是一个肮脏的技巧,可以用来获取Google发明到现代GIS软件中的预测。它是“正常”投影不使用的球体和椭球体的组合。不幸的是,每种软件都使用另一种方式来适应它。

QGIS使用.qpj文件,ARCGIS使用.prj文件中的WKT,而GDAL使用proj.4定义。.qpj文件将proj.4定义合并到WKT定义中。

解决此类问题的最安全方法是避免使用Google Mercator。您可以更好地使用当地的国家平面,UTM或某些大洲的Lambert或Albers投影。


很高兴知道。感谢您的回答。但是我注意到,当我使用ogr2​​ogr用EPSG 2163导出形状文件时,没有创建.qpj,但是QGIS仍然可以正确读取它。因此,我假设QGIS将在没有.qpj的情况下从.prj读取信息。同样,如果仅在一个州中运行,则州平面投影将非常有用,但是我的脚本采用了来自许多州的县级菲普斯代码,因此在我的情况下,州平面不切实际。
哈夫

1
QGIS通常可以与.prj文件一起使用,但不能与来自其他软件的World Merctaor投影文件一起使用。最适合的CRS始终取决于研究区域的大小。EPSG 2163应该可以完成您的任务。
AndreJ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.