Найдите, сколько (googlemap) многоугольников около x расстояния до точки - PullRequest
1 голос
/ 18 сентября 2011

Я работаю в системе MYSQL / PHP, где у меня есть следующее:

- набор широты, долготы в виде (широта, долгота), сохраненный в текстовом формате: (широта,lng1) # (lat2, lng2) # (lat3, lng3) и т. д., который в основном является многоугольником, нарисованным над экземпляром googlemap, хранящимся в базе данных.

- таблица, которая хранит в поле - координаты точки P (plat, plng), которая в основном является точкой, в которой находится устройство

Мне нужно выяснить, сколько полигонов изпервая таблица находится на расстоянии X километров от точки P, в основном с использованием MYSQL.

Я уже сталкивался с довольно большим количеством библиотек Google Map по этому поводу, но я намерен решить эту проблему самым быстрым из возможных способов -который я предполагаю, через запрос MYSQL.

Может ли кто-нибудь, пожалуйста, пролить свет на это?


До сих пор я рассмотрел несколько примеров геопространственных запросов - и придумаю следующее:

    SELECT user_id, latitude, longitude, 
      GeomFromText( "POINT(CONCAT_WS(' ',latitude,longitude))" ) AS point,
      Contains( GeomFromText( 'POLYGON(-26.167918065075458 28.10680389404297, 
    - 26.187020810321858 28.091354370117188, -26.199805575765794 28.125,-26.181937320958628 28.150405883789062, -26.160676690299308 28.13220977783203, -26.167918065075458 28.10680389404297)' ) , 
      GEOMFromText( "POINT(CONCAT_WS(' ',latitude,longitude))" ) ) 
   FROM user_location

Но проблема в том, что он показывает запись с lat: -26.136230, long: 28.338850, который находится далеко от границ многоугольника.Может кто-нибудь, пожалуйста, руководство?

Ответы [ 2 ]

2 голосов
/ 18 сентября 2011

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

Если у вас есть lat1, lng1 и lat2, lng2, выраженные в метрах, я считаю, что расстояние между ними равно:

SQRT(POW(ABS(lat1 - lat2),2) + POW(ABS(lng1 - lng2),2))

Используя алгоритм, подобный этому, вам нужно решить, хотите ли вы сравнить ваши известные широты / долготы с одной центральной точкой многоугольника или с точками его углов (в три раза больше работы).!).

У MySQL есть геопространственное расширение, на которое стоит обратить внимание.К сожалению, у меня нет такого опыта.

0 голосов
/ 20 сентября 2011

Хорошо, сделал это - и это работает - может кому-то помочь:

SELECT user_id,latitude,longitude,
   Contains(
          PolyFromText( 'POLYGON((-26.167918065075458 28.10680389404297, -26.187020810321858 28.091354370117188, -26.199805575765794 28.125,-26.181937320958628  28.150405883789062, -26.160676690299308 28.13220977783203, -26.167918065075458 28.10680389404297))' ),
          PointFromText(concat("POINT(",latitude," ",longitude,")"))
   ) as contains
FROM user_location

=====

Хотя я согласен с мнением эксперта о том, что PostGIS может быть лучшим вариантом.

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