【问题标题】:How to compute a radius around a point in an Android MapView?如何计算 Android MapView 中某个点的半径?
【发布时间】:2010-01-16 10:50:33
【问题描述】:

我有一个MapView,我在其中显示了一个“有用的半径”(考虑坐标的准确性)。使用MapViewProjectionmetersToEquatorPixels,诚然这只是赤道距离)没有给我足够准确的距离(以像素为单位)。如果您想在给定半径的情况下围绕坐标显示一个圆圈,您将如何计算?

【问题讨论】:

  • 这也可以说是:我有一个 GPS 坐标和一个距离,如何绘制一个包含 GPS 点半径的圆?
  • 我不确定我是否理解这个问题 - 你说它没有给你足够准确的距离是什么意思?你的意思是说 100m 但它只在 50m 处显示一个圆圈或其他什么?
  • 是的。它的偏差很大。
  • 实际上,meterToRadius 函数非常失败,我通过使用地图视图并在单击位置时画一个圆圈对其进行了测试。我数学不好,公式需要专家;)

标签: android gps android-mapview


【解决方案1】:

因此,Google 地图使用Mercator projection。这意味着您离赤道越远,距离就越扭曲。根据this discussion,转换距离的正确方法是:

public static int metersToRadius(float meters, MapView map, double latitude) {
    return (int) (map.getProjection().metersToEquatorPixels(meters) * (1/ Math.cos(Math.toRadians(latitude))));         
}

【讨论】:

  • 感谢您的回答。但我对这个方程有疑问。这个等式是否足以降低应用程序的性能?只是好奇。
  • 公式中唯一可能耗时的部分是 Math.cos()。您可以使用 android.util.FloatMath.cos() 函数来加快速度,甚至可以保留预先计算的因子表,例如每一个完整的学位。然后你可以说 return (int) (map.getProjection().metersToEquatorPixels(meters) * factor[(int)latitude].
【解决方案2】:
mMap.addCircle(
    new CircleOptions().center(
        new LatLng(
            bounds.getCenter().latitude, 
            bounds.getCenter().longitude
        )
    )
    .radius(50000)
    .strokeWidth(0f)
    .fillColor(0x550000FF)
);

【讨论】:

  • 答案需要格式化并添加更多关于您的代码如何工作以及它如何解决 OP 问题的上下文!
【解决方案3】:
projection.toPixels(GeoP, pt);
float radius = projection.metersToEquatorPixels(50);

试试这个看看...我在我的 MapRadius 上使用了它,它似乎正在工作

【讨论】:

  • 如果你看到我的回答,你就会明白为什么这在所有情况下都不起作用。
猜你喜欢
  • 2012-09-12
  • 2013-04-05
  • 2023-04-06
  • 2018-11-02
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 2010-09-16
  • 2021-11-09
相关资源
最近更新 更多