Добрый день, коллеги!
Столкнулся с проблемой поиска точек в полигоне, бьюсь второй день, не понимаю в какую сторону копать дальше.
Есть сайт по недвижке, работает на битриксе. Для хранения и поиска геометок создал отдельную таблицу http://i.imgur.com/tBHSmK6.png. В таблице столбец geo - является пространственным индексом.
Пример запроса для создания пространственного индекса:
ALTER TABLEgeo_objects
ADD SPATIAL(geo
);Пример запроса для добавления данных:
INSERT INTO geo_objects (element_id, type, deal_type, lat, lon, geo) VALUES ( 77068, 1, 53, '41.29497550', '69.27162570', POINT(41.294975, 69.271625) )Уточняющая информация: использую 6 цифр после запятой в координатах для пространственного столбца geo.
На сайте есть функционал рисования полигона для поиска объектов в определенной области. Функционал рисования полигона позаимствовал отсюда.
Если вкратце, то поверх карты выводит прозрачный канвас, на нем рисуется полигон, дальше координаты полигона переводятся в геокоординаты, как переводятся можно посмотреть в примере по ссылке выше.
Полигон рисуется идеально, координаты полигона отправляю постом на сервер, где произвожу поиск в таблице с геометками. Пример запроса:
SELECT element_id as id, type, lat, lon FROM geo_objects WHERE MBRINTERSECTS(GeomFromText("POLYGON(( 41.382577 69.184287, 41.381736 69.194157, 41.380508 69.199651, 41.378374 69.202483, 41.376499 69.206259, 41.372877 69.207976, 41.367898 69.208405, 41.366346 69.208405, 41.364342 69.207289, 41.363436 69.203341, 41.363566 69.199221, 41.364083 69.193728, 41.365958 69.186003, 41.368415 69.184201, 41.371131 69.183686, 41.373783 69.183772, 41.378568 69.185403, 41.382577 69.184716, 41.382577 69.184287))") ,geo)Главная проблема: в результат выборки почему то попадают метки за пределами полигона (для наглядности скрин).
Прошу помощи, не понимаю в чем загвоздка. Заранее большое спасибо всем откликнувшимся!
Данные по используемой версии базы данных:
Тип сервера: MySQLВерсия сервера: 5.7.27-0ubuntu0.18.04.1 - (Ubuntu)Если требуется указать еще какие то данные - уточните, дополню пост.
Хм, разобрался.
SELECT element_id as id, type, lat, lon FROM geo_objects
WHERE ST_Contains(GeomFromText("POLYGON((
39.97251438002254 66.0505321360107,
40.0376704159915 65.3858592844482,
40.00726426587265 65.03978994851072,
39.9290770227099 64.92443350319822,
39.80310868650324 64.88048819069822,
39.61632805005889 64.92443350319822,
39.52945333543361 65.06176260476072,
39.44257862080833 65.4627635813232,
39.320954020332934 66.4075878000732,
39.338328963257986 66.6877391672607,
39.38176632057063 66.8030956125732,
39.47732850665844 66.8909862375732,
39.92038955124737 66.9239452219482,
40.00292053014139 66.8745067453857,
40.1462638092731 66.6383006906982,
39.97251438002254 66.0505321360107
))") ,geo)
Поиск входящих в полигон точек осуществляю через функцию ST_Contains.
На решение навел этот топик https://stackoverflow.com/questions/39582184/mysql-function-mbrcontains-is-not-accurate.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
никак не могу понять как работать с запросами MySQL в С++Я пытаюсь написать консольную программку которая будет записывать данные о клиентах...
В общем, недавно перестали отправляться письма на почту к клиенту об оформлении заказаПисьмо на почту администратора о том же заказе приходит
Функция wp_add_inline_style выводит блок CSS стилей с атрибутом type='text/css', возможно ли как-то в WP вывести стили без type='text/css'?