다른 PostgreSQL / Postgis 설치에서 동일한 변환에 대한 다른 결과

Aug 21 2020

한 서버에서 다른 서버로 웹 서비스를 마이그레이션하는 동안 동일한 쿼리에 대해 다른 변환 결과를 발견했습니다. 우리의 경우, Polygon은 SRID = 4326으로 ​​WKT에 제공되고 쿼리가 PostgresSQL로 전송되어 31467로 변환됩니다. 서로 다른 서버에 다른 proj4 정의가있는 것으로 의심되지만 srid 31467에 대한 spatial_ref_sys 정보는 동일합니다.

WKT, SRID = 4326의 예제 다각형 :

POLYGON((6.765692822761539 51.00597872375141,6.767598964757953 51.00509342952401,6.771910476416512 51.006635544034566,6.7707304837520645 51.00806338213016,6.765692822761539 51.00597872375141))

서버 A

SELECT ST_AsText(ST_Transform(ST_GeomFromText('POLYGON((6.765692822761539 51.00597872375141,6.767598964757953 51.00509342952401,6.771910476416512 51.006635544034566,6.7707304837520645 51.00806338213016,6.765692822761539 51.00597872375141))',4326),31467))

수율 :

POLYGON((3343258.68567984 5654686.62282287,3343389.47157136 5654584.09718158,3343697.23474346 5654746.47217529,3343619.23068104 5654907.79612667,3343258.68567984 5654686.62282287))

추가 버전 정보 :

SELECT PostGIS_Full_Version();  
SELECT version();

수확량

POSTGIS="2.2.5 r15298" GEOS="3.5.0-CAPI-1.9.0 r4084" PROJ="Rel. 4.8.0, 6 March 2012" GDAL="GDAL 1.9.2, released 2012/10/08" LIBXML="2.7.6" LIBJSON="0.11" RASTER
PostgreSQL 9.4.13 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18), 64-bit

SELECT proj4text FROM spatial_ref_sys WHERE srid=31467;

수확량

+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +datum=potsdam +units=m +no_defs

서버 B에서 변환을 실행하면

SELECT ST_AsText(ST_Transform(ST_GeomFromText('POLYGON((6.765692822761539 51.00597872375141,6.767598964757953 51.00509342952401,6.771910476416512 51.006635544034566,6.7707304837520645 51.00806338213016,6.765692822761539 51.00597872375141))',4326),31467))

우리는 받는다

POLYGON((3343204.36380305 5654547.24689407,3343335.13281662 5654444.73197122,3343642.85963301 5654607.08595063,3343564.86647133 5654768.39203429,3343204.36380305 5654547.24689407))

서버 A의 반환 된 다각형과 비교할 때 현저하게 다른 결과입니다.

추가 버전 정보 :

SELECT PostGIS_Full_Version();
SELECT version();

수확량

POSTGIS="2.5.3 r17699" [EXTENSION] PGSQL="100" GEOS="3.7.2-CAPI-1.11.2 b55d2125" PROJ="Rel. 6.2.0, September 1st, 2019" GDAL="GDAL 3.0.1, released 2019/06/28 GDAL_DATA not found" LIBXML="2.9.1" LIBJSON="0.11" LIBPROTOBUF="1.0.2" RASTER
PostgreSQL 10.10 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit

SELECT proj4text FROM spatial_ref_sys WHERE srid=31467;

수확량

+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +datum=potsdam +units=m +no_defs

두 다각형을 모두 geojson으로 내보내고 QGis에서 렌더링하면 차이점이 분명해집니다.

특히 두 설치 모두에서 31467에 대한 proj4 정의가 동일하기 때문에 최신 버전의 PostGIS 및 관련 라이브러리가 결과에 영향을 미칠 것으로 예상하지 않았을 것입니다. 여기서 놓친 것이 있습니까?

답변

4 CL. Aug 21 2020 at 10:07

PROJ 라이브러리에는 potsdam데이텀에 대한 세 가지 정의가 있습니다.

버전 4.8.0에서, 그것은 한 변화 보다 정확한 일곱 매개 변수 폼에 세 매개 변수 양식에서. 이 7 개 매개 변수 형식은 서버 A가 사용하는 것과 epsg.io에 표시되는 것 입니다.

버전 5.0.1에서는 BeTA2007 그리드 를 사용하도록 변경되었습니다 . 이것이 서버 B가 사용하는 것입니다.