QGIS가 .prj 파일에서 CRS를 감지하지 못하는 이유는 무엇입니까?


9

postgreSQL / postGIS 데이터베이스에 미국의 여러 카운티를 포괄하는 1km 육각형 그리드가 있습니다. 각 그리드에는 CRS EPSG : 3857이 있고, 카운티 레이어에는 EPSG : 3857이 있습니다. QGIS에서 카운티가있는 그리드를 볼 때 모든 것이 웅장 해 보입니다.

그러나 ...이 그리드를 동료와 공유하려면 ogr2ogr을 사용하여 셰이프 파일로 내 보내야했습니다. 이것을 QGIS에서 볼 때 각 그리드는 약 20km 정도 좁아 보이고 QGIS는 자동으로 CRS를 EPSG : 3395 (프로젝트 CRS가 아님)로 설정합니다.

postGIS 테이블 을 QGIS 에서 shapefile로 내보낼 때 .prj 파일은 ogr2ogr로 내 보낸 shapefile과 정확히 동일하게 보이지만 postGIS로 내 보낸 테이블은 올바르게 표시됩니다. QGIS 에서 shapefile 내보낼 때 QGIS가 .qpj 파일을 생성한다는 것을 알았 으므로 QGIS가 .prj를 무시하고 대신 .qpj를 찾고 있다는 결론에 도달했습니다. .qpj없이 .prj를 읽을 수없는 이유는 무엇입니까? 다른 모양 파일 (예 : 미국 인구 조사의 모양 파일)에는 .qpj가 없지만 QGIS는이를 올바르게 표시합니다.

ogr2ogr을 사용하여 내보내는 모든 파일에 대해 default.qpj를 저장하고 이것으로부터 새로운 .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 [ "그리니치", 0], UNIT [ "도", 0.01745329251994 [ "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 ["Greenwich ", 0, AUTHORITY ["EPSG ","8901 "]], UNIT ["degree ", 0.0174532925199433, AUTHORITY ["EPSG ","9122 "]], AUTHORITY [ "EPSG", "4326"]], PROJECTION [ "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 테이블에서 원래로드 될 때 그리드가 QGIS에 올바르게 표시되었으므로 (EPSG : 3857) 문제가 무엇인지 여전히 확실하지 않습니다.

동료가 .prj 또는 .qpj를 제대로 읽지 못하는 ArcGIS에서 파일을 사용할 수 없기 때문에 해결 방법이 생각보다 어려웠습니다.


ogr2ogr 명령을 추가 할 수 있습니까?
alphabetasoup

.prj 및 .qpj 파일의 내용을 모두 게시 할 수 있습니까?
mkennedy

1
그 "는 보조 구에 WGS84 웹 메카 토르 투영"에 대한 제한 기능이있다 할 수 있습니다 en.wikipedia.org/wiki/Web_Mercator ..Unlike, 타원 메르카토르 구형 메르카토르는 웹 메르카토르 때문에 타원형의 사용에 매우 등각 아니다 구형 투영에 대한 데이텀 지리 좌표.
huckfinn

@ huckfinn 스크립트에서 모든 EPSG : 3857을 EPSG : 2163으로 변경했으며 이제 문제가 해결되었습니다. EPSG : 3857을 사용하여 postgreSQL 테이블에서로드 할 때 그리드가 모두 올바르게 표시되기 때문에 왜 이것이인지는 확실하지 않습니다. 팁 고마워.
haff

답변:


4

EPSG:3857정의는 구글이 현대 GIS 소프트웨어로 발명 한 프로젝션을 얻기위한 더러운 해킹입니다. "정상"투영에 사용되지 않는 구와 타원체의 조합입니다. 불행히도, 모든 소프트웨어는 다른 방법으로 소프트웨어를 적응시킵니다.

QGIS는 .qpj 파일을 사용하고 .prj 파일에서 WKT를 ARCGIS로, proj.4 정의를 GDAL로 사용합니다. .qpj 파일은 proj.4 정의를 WKT 정의에 통합합니다.

이러한 문제를 해결하는 가장 안전한 방법은 Google Mercator를 사용하지 않는 것입니다. 로컬 State Plane, UTM 또는 일부 대륙 전체 Lambert 또는 Albers 투영을 더 잘 사용할 수 있습니다.


알아 둘만 한. 답변 주셔서 감사합니다. 그러나 ogr2ogr을 사용하여 EPSG 2163으로 모양 파일을 내보낼 때 .qpj가 생성되지 않았지만 QGIS가 여전히 올바르게 읽습니다. 그래서 QGIS는 .qpj가 없을 때 .prj에서 정보를 읽을 것이라고 가정합니다. 또한 상태 평면 투영은 하나의 상태에서만 작동하는 경우 훌륭하게 작동하지만 내 스크립트는 많은 상태에서 카운티 fips 코드를 사용하므로 상태 평면은 실용적이지 않습니다.
haff

1
QGIS는 일반적으로 .prj 파일과 함께 작동하지만 다른 소프트웨어에서 제공되는 World Merctaor 투영 파일에서는 작동하지 않습니다. 가장 적합한 CRS는 항상 연구 영역의 크기에 따라 다릅니다. EPSG 2163은 귀하의 작업에 적합해야합니다.
AndreJ
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.