Hasil yang berbeda untuk transformasi yang sama pada instalasi PostgreSQL / Postgis yang berbeda

Aug 21 2020

Saat memigrasi layanan web dari satu server ke server lain, kami melihat hasil transformasi yang berbeda untuk kueri yang sama. Dalam kasus kami, Polygon disediakan dalam WKT dengan SRID = 4326 dan kueri dikirim ke PostgresSQL untuk mengubahnya menjadi 31467. Diduga bahwa server yang berbeda memiliki definisi proj4 yang berbeda, tetapi informasi spatial_ref_sys untuk srid 31467 identik.

Contoh poligon di WKT, SRID = 4326:

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

Server 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))

hasil:

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

Informasi versi tambahan:

SELECT PostGIS_Full_Version();  
SELECT version();

hasil

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

dan

SELECT proj4text FROM spatial_ref_sys WHERE srid=31467;

hasil

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

Saat kami menjalankan transformasi di Server 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))

kami terima

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

Hasil yang sangat berbeda jika dibandingkan dengan poligon yang dikembalikan dari Server A.

Informasi versi tambahan:

SELECT PostGIS_Full_Version();
SELECT version();

hasil

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

dan

SELECT proj4text FROM spatial_ref_sys WHERE srid=31467;

hasil

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

Saat kedua poligon diekspor ke geojson dan ditampilkan di QGis, perbedaannya menjadi jelas:

Kami tidak akan mengharapkan versi PostGIS yang lebih baru dan pustaka terkait memiliki efek seperti itu pada hasil, terutama karena definisi proj4 untuk 31467 pada kedua penginstalan adalah identik. Apakah ada sesuatu yang kami lewatkan di sini?

Jawaban

4 CL. Aug 21 2020 at 10:07

Pustaka PROJ memiliki tiga definisi berbeda untuk potsdamdatum.

Dalam versi 4.8.0, ini diubah dari bentuk tiga parameter menjadi bentuk tujuh parameter yang lebih tepat. Bentuk tujuh parameter ini adalah apa server A menggunakan, dan apa yang ditampilkan pada epsg.io .

Dalam versi 5.0.1, itu diubah untuk menggunakan kisi BeTA2007 . Inilah yang digunakan server B.