【发布时间】:2010-12-20 00:40:14
【问题描述】:
我画了一个以任意点为中心的圆。现在我想显示该循环区域内的所有点标记。我使用了 circle.getBounds() 然后 contains() 方法,但它也显示了圆外的一些点(latlngBounds 类型)。我也不想使用使用 sin(lat)...cos(..) 事物的数学函数,因为我认为它会减慢我的应用程序,因为我正在使用数百万个点标记。您能否建议我一个可行的解决方案或任何示例将不胜感激。 谢谢。
【问题讨论】:
-
您“认为”您的应用程序会很慢,但您尝试过吗?
-
不,我还没有尝试过,实际上我向我的前辈推荐了这个东西,他们告诉如果有其他选择可以尝试。所以请告诉我是否有任何方法可以避免这种数学函数。我不确定这将如何影响性能。有没有人测试过它的性能指标。
-
谢谢,我尝试了数学公式来得到一个圆圈内的所有点,它工作正常。
-
搜索并显示大约 3000 个标记只需不到一秒钟的时间。
-
函数 calc_distance(cen,pointMarker){ var lat2=cen.lat(); var lon2=cen.lng(); var lat1=pointMarker.getPosition().lat(); var lon1=pointMarker.getPosition().lng();变量 R = 6371; // km var dLat = (lat2-lat1)* Math.PI / 180; var dLon = (lon2-lon1)* Math.PI / 180; var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(lat1* Math.PI / 180) * Math.cos(lat2* Math.PI / 180) * Math.sin (dLon/2) * Math.sin(dLon/2); var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));返回 R * c; }
标签: geometry