Я полагаю, что у PostGIS 3.0 возникли проблемы с количеством десятичных знаков в ваших координатах.
Уменьшите десятичную точность на 1 di git, например, ST_MakePoint(14.29575, 40.89820)
, и это должно работать. Это не решение, которым я очень горжусь, но, предполагая, что это ошибка в ST_Distance, я считаю, что это приемлемый обходной путь.
SELECT
ST_Distance('POLYGON((88.20524 80.31286,89.30506 88.84312,83.62463 89.51824,88.20524 80.31286))'::geography,
ST_MakePoint(14.29575, 40.89820)::geography);
st_distance
------------------
5250149.46929165
(1 Zeile)
Тестирование среды
SELECT version();
version
---------------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 12.1 (Ubuntu 12.1-1.pgdg16.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609, 64-bit
(1 Zeile)
SELECT postgis_full_version();
postgis_full_version
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
POSTGIS="3.0.0 r17983" [EXTENSION] PGSQL="120" GEOS="3.7.1-CAPI-1.11.1 27a5e771" PROJ="Rel. 4.9.2, 08 September 2015" LIBXML="2.9.3" LIBJSON="0.11.99" LIBPROTOBUF="1.2.1" WAGYU="0.4.3 (Internal)"
(1 Zeile)
Я пытаюсь разобраться в этом наборе результатов, но кажется, что ST_Distance
не может справиться с определенная комбинация десятичных точек между точками и многоугольниками. С указанным полигоном он не будет работать, если точка имеет более 5 десятичных цифр :
WITH j (p1,p2) AS (
VALUES ('POLYGON((88.20524 80.31286,89.30506 88.84312,83.62463 89.51824,88.20524 80.31286))',
'POINT(14.295750 40.898207)')
)
SELECT
ST_Distance(ST_AsText(p1,5)::GEOGRAPHY,
ST_AsText(p2,5)::GEOGRAPHY) AS five_digits,
ST_Distance(ST_AsText(p1,6)::GEOGRAPHY,
ST_AsText(p2,6)::GEOGRAPHY) AS six_digits
FROM j;
five_digits | six_digits
------------------+------------
5250148.38625588 | 0
(1 Zeile)
Дополнительная информация: