在圆圈中查找坐标

时间:2009-07-09 17:14:57

标签: java google-maps grails groovy geolocation

我正在使用Grails下的Google地图进行混搭,用户可以通过选择地图上的点和半径来创建geofences。这将存储在我的数据库中,应用程序会不断从GPS设备接收一组坐标。

我想将收到的坐标与存储在圆圈中的区域进行比较。如果该点位于圆圈内部(或外部),程序将触发一个动作。但是,我想知道如何找出坐标位于圆圈内部/外部。有一个Javascript库允许这样做,但我需要在服务器上执行此操作。

是否有Java(甚至是Groovy)库? 你会如何实现它?

7 个答案:

答案 0 :(得分:6)

如果距离圆心的距离为< = 圆的半径,那么它就在圆圈内。
如果该区域由多个圆圈构成而不是与所有圆圈相比......那将不会花那么长时间。

java.awt.geom.Point2D.Double非常适合这个。

答案 1 :(得分:4)

好吧,如果它不需要“完美”,你不必担心绘制圆圈或类似的东西。您可以只取两个位置(您要测试的位置和圆心)并使用Pythagorus找到距离。如果该距离小于圆的半径,则它在内部。

然而,有一点值得注意:这不完美的原因在于,对于你的观点,你可能会获得经度和经度......而地球就是一个球体。因此,在地球两极附近,这将会崩溃。但对于你正在做的事情来说,它可能已经足够好了。

答案 2 :(得分:2)

可悲的是,这里的大部分回复都不方便,因为GPS坐标以度为单位。你将需要一些东西从纬度和经度的两个点转换成一个很大的圆距离,这是简单的毕达哥拉斯定理所不足的。

如果您使用的是Google地图API,则可以使用GLatLng完成所需的一切操作。正如其他海报所述,您可以确定两点之间的距离小于指定圆的半径。具体来说,GLatLng.distance(其他:GLatLng)返回太多GPS位置之间的米距离。

要实际显示圆圈需要更多技巧。您需要创建一个GPolygon来绘制圆的圆周。您可以找到许多可以为您执行此操作的免费JavaScript函数。

答案 3 :(得分:2)

Victor和Beska有正确的答案。也就是说,如果点和中心之间的距离小于半径,那么它就在圆圈中。

对于两点之间的great circle距离,您可以使用GeoTools'GeodeticCalculator。特别是,您可以使用setStartingGeographicPointsetDestinationGeographicPoint设置点和半径,然后调用getOrthodromicDistance来返回距离。

答案 4 :(得分:0)

您想要找到所选坐标与圆心之间距离的矢量,然后通过平方矢量的分量并将它们相加来计算所选坐标与圆心之间的平方距离;如果该标量(平方距离)小于半径的平方,则该点在圆内。

这种方法避免了必须采用平方根,并且与正常距离比较一样准确。

答案 5 :(得分:0)

一种可能性是计算距中心点的距离并将其与半径进行比较。

根据您的应用程序,您可能必须考虑到世界是一个球体而不是二维。要计算地球上的距离,您可以使用此formula

答案 6 :(得分:0)

由于您使用的是谷歌地图,并且对于地理距离,球形几何体会保持而不是欧几里德几何体。然而,如果它像停车场等相对较小的距离那么你可以使用欧几里德距离公式(http://en.wikipedia.org/wiki/Distance)来确定该点是在圆圈的内部还是外部。

我认为你知道圆心C(xc,yc)的坐标及其半径R。然后对于给定的点P(x1,y1)找到欧氏距离,D为

平方根((x1-xc)^ 2 +(y1-yc)^ 2))。如果D> R,该点位于圆圈之外。如果D < R,点位于圆圈内。如果D = R,则该点位于圆周上。

如果你在更远的距离上进行测量,那么你应该选择寻找测地线(请查看http://en.wikipedia.org/wiki/Great-circle_distance)。

我希望它有所帮助。

欢呼声