В чем разница между ST_Intersect в сферической геометрии и географии? - PullRequest
0 голосов
/ 25 мая 2018

Я столкнулся с особой ситуацией, когда пытаюсь найти любые геопространственные объекты, которые (частично) лежат в многоугольнике.Когда я применяю функцию ST_Intersect к двум геометриям, используя WGS84 SRID , пересечение многоугольника и точки к северу от многоугольника возвращает FALSE, как и ожидалось:

SELECT ST_Intersects(
    ST_GeomFromText('POLYGON((-12 0,12 0,12 50.7,-12 50.7,-12 0))', 4326), 
    ST_GeomFromText('POINT(6.0 50.9)', 4326)
);


Теперь, когда я запускаю этот же запрос, но с двумя географиями вместо геометрий, запрос возвращает TRUE:

SELECT ST_Intersects( 
    ST_GeogFromText('POLYGON((-12 0,12 0,12 50.7,-12 50.7,-12 0))'),
    ST_GeogFromText('POINT(6 50.9)')
);

Я ожидаю, что версия географии использует кратчайшее расстояние большого круга для создания многоугольника, в то время как версия геометрии создает многоугольник на плоской плоскости и только затем проецирует его на WGS84 эллипс.

Может ли кто-нибудь проверить или опровергнуть мои подозрения?

Я использую Postgresql 9.6 с PostGis 2.4.4

.

1 Ответ

0 голосов
/ 26 мая 2018

Операции с geography типом данных выполняются над сферой .Операции с типом данных geometry выполняются на плоскости.

Самая короткая линия, соединяющая две точки на плоскости, является прямой.

Самая короткая линия, соединяющая две точки на сфере, является дугой.Эта дуга называется большой круговой дугой и создается путем пересечения сферы с планом, проходящим через 2 точки и центр Земли.

Следовательно, дуга проходит через -12; 50,7 Н и + 12; 50,7 Н с прохождением через точку около 0; 51,3 Н.Это справедливо для линий, но также и для границ многоугольников.

Этот документ имеет несколько интересных рисунков, чтобы понять концепции, лежащие в основе geography типа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...