【问题标题】:points inside a circle in Gmap v3Gmap v3中圆圈内的点
【发布时间】: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


【解决方案1】:

毕达哥拉斯还不够吗?我不得不做类似的事情,我使用标准 a^2 = b^2 + c^2 来计算它。查看我的堆栈溢出问题 - http://bit.ly/gJFuWM

我假设使用了 sin,因为你还考虑了地球的曲率?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 2022-01-15
    相关资源
    最近更新 更多