Нахождение координаты в круге - PullRequest
3 голосов
/ 09 июля 2009

Я делаю коллаж, используя Google Maps в Grails, где пользователи могут создавать геозон , выбирая точку на карте и радиус. Это сохраняется в моей базе данных, и приложение постоянно получает набор координат от устройства GPS.

Я хотел бы сравнить полученные координаты с областью, сохраненной в кругах. Если точка находится внутри (или снаружи) круга, программа запустит действие. Тем не менее, я хотел бы знать, как я могу узнать, расположены ли координаты внутри / снаружи круга. Есть библиотека Javascript, которая позволяет это делать, но мне нужно сделать это на сервере.

Есть ли для этого библиотека Java (или даже Groovy)? Как бы вы это реализовали?

Ответы [ 7 ]

6 голосов
/ 09 июля 2009

если расстояние от точки до центра круга равно <= <strong>радиусу круга , то оно находится внутри круга.
если область состоит из более чем одного круга, чем сравнивать со всеми кругами ... это не займет много времени.

java.awt.geom.Point2D. Double идеально подходит для этого.

4 голосов
/ 09 июля 2009

Ну, если это не обязательно должно быть "идеально", вам не нужно беспокоиться о построении кругов или чем-то в этом роде. Вы можете просто взять два местоположения (местоположение, которое вы хотите проверить, и центр круга) и использовать Pythagorus, чтобы найти расстояние. Если это расстояние меньше радиуса круга, оно внутри.

Однако следует принять во внимание одну оговорку: причина, по которой это не было бы идеально, заключается в том, что для ваших точек вы, вероятно, получите широту и долготу ... а Земля - ​​это сфера. Так что около полюсов Земли это как бы развалится. Но это вполне может быть достаточно для того, что вы делаете.

2 голосов
/ 09 июля 2009

У Виктора и Бески правильный ответ. То есть, если расстояние между точкой и центром меньше радиуса, то оно в круге.

Для большого круга расстояния между двумя точками вы можете использовать GeoTools 'GeodeticCalculator. В частности, вы устанавливаете точку и радиус, используя setStartingGeographicPoint и setDestinationGeographicPoint, а затем вызываете getOrthodromicDistance, который возвращает расстояние.

2 голосов
/ 09 июля 2009

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

Если вы используете API карт Google, вы, вероятно, можете делать все, что вам нужно, используя GLatLng . Как отмечали другие авторы, Вы можете определить, что расстояние между двумя точками меньше радиуса указанного круга. В частности, GLatLng.distance (прочее: GLatLng) возвращает расстояние в метрах между слишком местоположениями GPS.

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

0 голосов
/ 09 июля 2009

Поскольку вы используете Google Maps и для географических расстояний сферическая геометрия сохраняется, а не евклидова геометрия. Однако, если это относительно меньшее расстояние, например, парковка, и т. Д., То вы можете использовать евклидову формулу расстояния (http://en.wikipedia.org/wiki/Distance), чтобы узнать, находится ли точка внутри или за пределами круга.

Полагаю, вы знаете координаты центра окружности C (xc, yc) и его радиуса R. Тогда для заданной точки P (x1, y1) найдите евклидово расстояние D как

квадратный корень ((x1-xc) ^ 2 + (y1-yc) ^ 2)). Если D> R, точка лежит вне круга. Если D

Если вы проводите измерения на больших расстояниях, вам следует искать геодезические (отметьте это http://en.wikipedia.org/wiki/Great-circle_distance).

Надеюсь, это поможет.

ура

0 голосов
/ 09 июля 2009

Одна из возможностей - рассчитать расстояние от центральной точки и сравнить его с радиусом.

В зависимости от вашего приложения вам, возможно, придется принять во внимание, что мир является сферой, а не двумерным. Чтобы вычислить расстояние на земле, вы можете использовать эту формулу .

0 голосов
/ 09 июля 2009

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

Этот метод избавляет от необходимости брать квадратный корень и является таким же точным, как и обычное сравнение расстояний.

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