2009-07-09 7 views
3

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

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

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

ответ

6

, если расстояние от точки до центра окружности является < = радиуса окружности то внутри круга.
Если область состоит из более чем одного круга, чем по сравнению со всеми кругами ... это не займет много времени.

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

4

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

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

0

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

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

0

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

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

2

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

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

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

0

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

Я полагаю, вы знаете координаты центра окружности С (хс, Ус) и его радиус, R. Тогда для заданной точки Р (x1, y1) найти расстояние евклидовой, D, как

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

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

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

ура

2

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

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