如何在Google地图中的折线上方添加文字?

时间:2015-04-28 13:54:39

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

我有2个标记,我想在它们之间画一条线,并且有一个显示线条上方距离的文字,就像谷歌地图的网页版本一样。

maps

我已经找到了关于在两个标记之间画一条线的this示例,但是如何在该线上方添加文字?

2 个答案:

答案 0 :(得分:5)

我有一种情况可以显示折线上方两个标记之间的距离。

以下是我的要求:

enter image description here

我设法以其他方式完成它,这是非常有趣的方式,这样你就可以自定义它来实现任何目的。

<强>步骤:

  1. 使用Location.distanceBetween()方法计算标记之间的距离。
  2. 创建一个新的Layout XML文件,并为您的文字创建任何类型的UI。就我而言,它只包含一个TextView
  3. TextView
  4. 中设置计算距离
  5. XML Layout转换为Bitmap
  6. 从该BitmapDescriptor对象创建Bitmap
  7. 找出所需标记之间的中点,并使用在上一步中创建的BitmapDescriptor 添加自定义标记,然后就完成了。
  8. <强>代码:

      

    计算两个标记之间的距离

    float[] distance1 = new float[1];
    Location.distanceBetween(userMarker.getPosition().latitude, userMarker.getPosition().longitude, positionMarker.getPosition().latitude, positionMarker.getPosition().longitude, distance1);
    
      

    从XML布局文件创建位图

    LinearLayout distanceMarkerLayout = (LinearLayout) getLayoutInflater().inflate(R.layout.distance_marker_layout, null);
    
    distanceMarkerLayout.setDrawingCacheEnabled(true);
    distanceMarkerLayout.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
    distanceMarkerLayout.layout(0, 0, distanceMarkerLayout.getMeasuredWidth(), distanceMarkerLayout.getMeasuredHeight()); 
    distanceMarkerLayout.buildDrawingCache(true);
    
    TextView positionDistance = (TextView) distanceMarkerLayout.findViewById(R.id.positionDistance);
    
    positionDistance.setText(distance1[0]+" meters");           
    
    Bitmap flagBitmap = Bitmap.createBitmap(distanceMarkerLayout.getDrawingCache());
                    distanceMarkerLayout.setDrawingCacheEnabled(false);
                    BitmapDescriptor flagBitmapDescriptor = BitmapDescriptorFactory.fromBitmap(flagBitmap);
    
      

    要找出两个标记之间的中点,请执行以下操作:

    double dLon = Math.toRadians(flagMarker.getPosition().longitude - positionMarker.getPosition().longitude);
    
    double lat1 = Math.toRadians(positionMarker.getPosition().latitude);
    double lat2 = Math.toRadians(flagMarker.getPosition().latitude);
    double lon1 = Math.toRadians(positionMarker.getPosition().longitude);
    
    double Bx = Math.cos(lat2) * Math.cos(dLon);
    double By = Math.cos(lat2) * Math.sin(dLon);
    double lat3 = Math.atan2(Math.sin(lat1) + Math.sin(lat2), Math.sqrt((Math.cos(lat1) + Bx) * (Math.cos(lat1) + Bx) + By * By));
    double lon3 = lon1 + Math.atan2(By, Math.cos(lat1) + Bx);
    
    lat3 = Math.toDegrees(lat3);
    lon3 = Math.toDegrees(lon3);
    
      

    使用我们在之前步骤中创建的位图描述符

    添加新的cutom标记
    Marker centerOneMarker = mMap.addMarker(new MarkerOptions()
                    .position(new LatLng(lat3, lon3))
                    .icon(flagBitmapDescriptor));
    

    希望它对你有所帮助。

答案 1 :(得分:3)

一个想法是使用它们的纬度和长坐标计算两个标记之间的中点,然后在infowindow中显示您想要显示的任何信息。或者类似以下内容可能有所帮助:Link