Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 剪裁或删除google maps v2多段线的某些部分_Android_Google Maps Markers_Google Maps Api 2_Google Polyline - Fatal编程技术网

Android 剪裁或删除google maps v2多段线的某些部分

Android 剪裁或删除google maps v2多段线的某些部分,android,google-maps-markers,google-maps-api-2,google-polyline,Android,Google Maps Markers,Google Maps Api 2,Google Polyline,我已经为不同的点绘制了多段线,如图所示。 中心视图:-(圆形) **标记代码**: viewIntermediateMarker = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)) .inflate(R.layout.layout_intermediate_marker, null); middlemarker = map.addMarker(new MarkerOptions(

我已经为不同的点绘制了多段线,如图所示。
中心视图:-(圆形) **标记代码**

viewIntermediateMarker = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE))
            .inflate(R.layout.layout_intermediate_marker, null);

middlemarker = map.addMarker(new MarkerOptions()
                    .position(MIDDLE)
                    .snippet(String.valueOf(MIDDLE))
                    .icon(BitmapDescriptorFactory
                            .fromBitmap(SearchNearByCourseActivity
                                    .createDrawableFromView(mContext,
                                            viewIntermediateMarker))));
多段线
(白色):

poly_TToMid = map.addPolyline(new PolylineOptions()
                        .add(MIDDLE_MARKER, TEE_POINT).width(3)
                        .color(Color.WHITE));
    poly_MidToFlage = map.addPolyline(new PolylineOptions()
                        .add(MIDDLE_MARKER, upperSquMidLat).width(3)
                        .color(Color.GREEN));
多段线
(绿色):

poly_TToMid = map.addPolyline(new PolylineOptions()
                        .add(MIDDLE_MARKER, TEE_POINT).width(3)
                        .color(Color.WHITE));
    poly_MidToFlage = map.addPolyline(new PolylineOptions()
                        .add(MIDDLE_MARKER, upperSquMidLat).width(3)
                        .color(Color.GREEN));
但是我想让我的图像1成为图像2,即我想删除(修剪)圆心内的多段线(绿色和白色),如下图所示。


请给出一些答案,说明如何在android
GoogleMapv2API
中实现这一点。非常感谢您的帮助……

这是一个相当大的问题,实施起来并不那么容易。至少我想不出任何简单的方法

这一困难背后的主要原因是不断变化的缩放级别。在不同的缩放级别,标记下方的多段线位于不同的位置,因为地图米/像素密度会发生变化

实现这一目标的一种方法是:

计算标记的半径,并根据当前缩放级别以米为单位获取半径。然后循环通过多段线点并检查距离,如下所示:

List<LatLng> points = polyline.getPoints();

LatLng latLng = points.get(0);
// Get the starting point's lat lng coordinates
Location startLoc = new Location("Test");
startLoc.setLatitude(latLng.latitude);
startLoc.setLongitude(latLng.longitude);

for (int i=1; i<points.size(); i++) {
    Location loc = new Location("Test");
    loc.setLatitude(points.get(i).latitude);
    loc.setLongitude(points.get(i).longitude);

    float distance = startLoc.distanceTo(loc);

    if (distance >= radiusInMeters) {
        polyline.setPoints(points.subList(i, points.size()));
        break;
    }
}
您还可以在快照上使用更高级的方法
getPixels
,获取背景片段

注:

  • 这两种方法都要求您在缩放级别更改时重新绘制标记和/或多段线,因此,如果您有很多标记,我的建议是重新考虑您的策略
  • 也许可以先使用实心背景标记或以不同的方式绘制多段线

@Rod\u Algonquin检查编辑的问题。感谢您的帮助。非常好的建议,我正在尝试这两个建议。