@glebn
Золото, а не человек!

Почему MySQL находит точку внутри полигона, хотя она находится не в нем?

Собственно есть полигон и точка:
b680022ccc2c4172a9fc6fac2fae68ff.png
Делаю такой запрос и мне возвращается "yes" (якобы точка внутри полигона). Что я делаю не так?
set @r = st_GeomFromText('POLYGON((
37.22216838998539 55.84054891160275, 
37.21838662328132 55.83319286655621, 
37.241389247793016 55.825028405079834, 
37.23314950169925 55.81497747433474, 
37.2333211630762 55.81246433423204, 
37.23928639592532 55.78352732389286, 
37.33145779202875 55.769560201254166, 
37.3683649880737 55.7713020105184, 
37.39943569730221 55.78020337060204, 
37.44464477187915 55.80740526357401, 
37.454772793119375 55.82122732160703, 
37.465587459867436 55.83697652282129, 
37.459922634427976 55.83581729079571, 
37.45631774551197 55.83523766176832, 
37.43589004165455 55.836590116002256, 
37.42865282177775 55.83428693095061, 
37.42607790112345 55.83090550567636, 
37.39346223950235 55.84790625380606, 
37.387677439690705 55.85716977857572, 
37.36999631786453 55.868271531747475, 
37.33513310159018 55.880326311160644, 
37.31625035012533 55.885536584352174, 
37.28723957742026 55.876562899285055, 
37.22539627677173 55.85184165763322, 
37.22216838998539 55.84054891160275))');
set @p = st_GeomFromText('POINT(37.441008 55.872223)');
select if(mbrcontains(@r, @p), 'yes', 'no') as contain;
  • Вопрос задан
  • 709 просмотров
Решения вопроса 1
@glebn Автор вопроса
Золото, а не человек!
Всем спасибо! Нашел решение. Это ST_Within (с версии mysql 5.6) Обращаю внимание что для ее правильной работы нужно поменять местами переменные из примера в моем вопросе т.е
select if(ST_Within(@p, @r), 'yes', 'no') as contain;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
MBR - как я понимаю, это лишь прямоугольная ограничивающая область для вписанного в неё полигона.
Т.е., иными словами, Вам не подходит такой вариант детектирования принадлежности точки полигону.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы