【问题标题】:How to bind the distance between two Markers to my polyline?如何将两个标记之间的距离绑定到我的折线?
【发布时间】:2014-04-05 10:42:56
【问题描述】:

首先我为我糟糕的英语道歉。

我目前正在开发一个 android 应用程序,并且我正在使用 google api v2。我的谷歌地图上有 2 个标记,并使用 .distancebetween 方法计算它们之间的距离。然后我在标记之间画一条折线。

现在我想将距离绑定到我的折线。距离应该在折线下方,如果我移动标记,距离应该仍在折线下方。

【问题讨论】:

  • 您在计算跟踪折线长度时遇到问题吗?或者不知道如何绘制文本以使其始终位于折线下方?
  • 问题是绘制一个文本使其始终位于折线下方。它应该看起来像这样:directupload.net/file/d/3583/tkka8iyx_png.htm

标签: android google-maps google-api google-maps-api-2 google-polyline


【解决方案1】:

这不容易做到,但肯定有可能。

步骤如下:

  • 计算每条线的中心
  • 对于该中心纬度,计算低于其 50dp 的点(使用 Projection
  • 在该位置放置一个标记
  • 用文字将标记图标设置为Bitmap
  • 当您接到对OnCameraChangeListener.onCameraChange 的调用或在HandlerRunnable 每隔几毫秒发布一次时更新标记位置

【讨论】:

  • 感谢您的帮助。关于第一步:“计算每条线的中心”。如何计算中心的纬度和经度点??
【解决方案2】:

这个方法可以帮助你找到距离,它找到起点LatLng和终点LatLng之间的距离

public double CalculationByDistance(LatLng StartP, LatLng EndP) {
    int Radius=6371;//radius of earth in Km         
    double lat1 = StartP.latitude;
    double lat2 = EndP.latitude;
    double lon1 = StartP.longitude;
    double lon2 = EndP.longitude;
    double dLat = Math.toRadians(lat2-lat1);
    double dLon = Math.toRadians(lon2-lon1);
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
    Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
    Math.sin(dLon/2) * Math.sin(dLon/2);
    double c = 2 * Math.asin(Math.sqrt(a));
    double valueResult= Radius*c;
    double km=valueResult/1;
    DecimalFormat newFormat = new DecimalFormat("####");
    int kmInDec =  Integer.valueOf(newFormat.format(km));
    double meter=valueResult%1000;
    int  meterInDec= Integer.valueOf(newFormat.format(meter));
    Log.i("Radius Value",""+valueResult+"   KM  "+kmInDec+" Meter   "+meterInDec);

    return Radius * c;
}

你也可以试试这个:

Location locationA = new Location("location A");  

locationA.setLatitude(locationA.getLatitudeE6() / 1E6);  
locationA.setLongitude(locationA.getLongitudeE6() / 1E6);  

Location locationB = new Location("location B");  

locationB.setLatitude(locationB.getLatitudeE6() / 1E6);  
locationB.setLongitude(locationB.getLongitudeE6() / 1E6);  

double distance = locationA.distanceTo(locationB);

【讨论】:

  • Location.distanceTo() 计算标准 WGS84 椭球上的最近距离,因此它将比您的第一段代码更准确。但是对于小于 500 公里的距离,这并不重要。第二。为什么将坐标除以 1e6?第三。它计算 2 点之间的最近距离,而不是通过折线...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-14
  • 1970-01-01
  • 2016-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多