Я использую MySQL для извлечения длинных длин из базы данных и проверки, находятся ли они в определенном районе.
Все отлично работает, за исключением случаев, когда точка находится на границе между двумя окрестностями. Тогда точка входит в обе окрестности. Это дублируется. Как лучше всего обрабатывать точки на границах?
Каждая точка должна учитываться только в одном районе, а не в обоих. Кроме того, я не хочу, например, для района А получить все пограничные случаи, а для соседнего района Б - нулевые.
Представьте, что точка 30.3030, -70.7070 лежит на границе между Ньюпортом и Олдпортом. К сожалению, точка засчитывается дважды. Он записывается как в Олдпорте и Ньюпорте.
тип | широта | долгота | окрестности
small | 30.3030 | -70.7070 | Newport
small | 30.3030 | -70.7070 | Oldport
small | 30.3344 | -70.7274 | Anotherport
Я использую оператор выбора ниже:
SELECT t.type, t.latitude, t.longitude, s.neighborhoods
FROM my_type_table t, neighborhood_shapes s
WHERE myWithin(POINTFROMTEXT( CONCAT( 'POINT(', t.latitude, ' ', t.longitude, ')' ) ) , s.neighborhood_polygons )) = 1
my_type_table содержит столбцы:
- тип (VARCHAR)
- широта (десятичная)
- долгота (десятичная)
... и окрестности имеют столбцы:
- окрестностей (VARCHAR)
- окрестности_полигоны (геометрия)
Я использую функцию myWithin, чтобы проверить, находится ли точка в той или иной окрестности. Вот ссылка на него: Функция myWithin на форуме mySQL . Функция возвращает 1, когда точка находится в многоугольнике, и 0, когда ее нет в многоугольнике.
Как бы вы решили эту проблему? Любой совет?