Вычисление, какие точки (широта, долгота) находятся в пределах определенного расстояния в MySQL? - PullRequest
3 голосов
/ 06 января 2012

Есть две точки A, B и расстояния x (мили от A) и y (мили от B).Пусть расстояние от A до B равно N. Итак, A находится в N милях от B. Как мне решить проблему: Какие доступные точки находятся (N + x + y) в милях от A?Я не уверен, как это объяснить лучше.Я действительно понятия не имею, как решить эту проблему, я прочитал Самый быстрый способ найти расстояние между двумя точками широты и долготы , и я считаю, что данное решение рассчитывает расстояние между двумя точками, и не знаю, если это решениеможно использовать для решения моей проблемы или, если да, то как.

1 Ответ

2 голосов
/ 06 января 2012

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

«Алгоритм k-кластеризации в одной линии ... это именно алгоритм Крускала ... эквивалентный поиску MST и удалению k-1 самых дорогих ребер». Смотрите, например, здесь: https://stats.stackexchange.com/questions/1475/visualization-software-for-clustering.

Хорошим примером для кривой монстров является кривая Гильберта. Основной формой этой кривой является U-образная форма, и, скопировав многие из них вместе и вращая ее, кривая заполняет евклидово пространство. Удивительно, но серый код может помочь определить ориентацию этой U-формы. Вы можете найти в блоге пространственного индекса Ника кривую Гильберта более подробную информацию . Вместо этого, чтобы вычислить индекс кривой, вы можете собрать квадрик, как в картах Bing. Quadkey уникален для каждой координаты и может использоваться с обычными строковыми операциями. Каждая позиция в ключе является частью кривой U-образной формы, и, таким образом, вы можете выбрать эту область точек из частично выбранных слева направо от четырехугольника.

На этом изображении зеленый полигон найден с использованием кривой Гильберта:

enter image description here

Вы можете найти мои php классы здесь: http://www.phpclasses.org/package/6202-PHP-Generate-points-of-an-Hilbert-curve.html

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