我在postgreSQL / postGIS数据库中有许多1公里的六角形网格,覆盖了美国的各个县。每个网格具有CRS EPSG:3857,而县层具有EPSG:3857。在QGIS中使用县查看网格时,一切看起来都很宏伟。
但是...为了与同事共享这些网格,我不得不使用ogr2ogr将它们导出到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并为此使用ogr2ogr导出的每个文件为此创建一个新的.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,因此我的解决方法被证明是我想的那样粗糙。