0

我正在尝试使用 Google 地图引擎在 android 中使用不规则多边形覆盖地图上的一个区域。

这是我正在测试的示例代码...覆盖 Overlay 类的 draw 方法。

    @Override
    public boolean draw(Canvas canvas, MapView mapView, boolean shadow,
            long when) {

        ArrayList<GeoPoint> points = new ArrayList<GeoPoint>();

        points.add(getPoint(40.69601721120307,-7.975247972597344));
        points.add(getPoint(39.59209428101375,-5.602198679879018));
        points.add(getPoint(37.98114679179523,-5.43877491468928 ));
        points.add(getPoint(39.01059159609532,-4.050442951443798));
        points.add(getPoint(37.99556954318146,-1.728440918734253));
        points.add(getPoint(39.26565517073047,-2.576421100521262));
        points.add(getPoint(40.21994329403012,-1.164105822610836));
        points.add(getPoint(40.57540056971796,-3.415060042751821));
        points.add(getPoint(42.5081775151286,-4.553753858729792));
        points.add(getPoint(40.74284989396188,-5.388244948956315));
        points.add(getPoint(40.69601721120307,-7.975247972597344));



        Paint mPaint = new Paint();
        mPaint.setColor(Color.RED);        
        mPaint.setStyle(Style.STROKE);
        mPaint.setStrokeWidth(2);

        Point point1 = null;
        Path path = new Path();
        for(GeoPoint p : points){                                                                                  

            Point point2 = new Point();         
            mapView.getProjection().toPixels(p, point2);

            if(point1 != null){                 
                path.lineTo(point2.x, point2.y);                
                canvas.drawPath(path, mPaint);
                mapView.getProjection().toPixels(p, point1);
            } else {
                point1 = new Point();
                mapView.getProjection().toPixels(p, point1);                
                path.moveTo(point1.x, point1.y);
            }

        }
        return true;
    }

当我运行测试时,我可以在地图上看到这个结果:

在此处输入图像描述

但是,当我将样式更改为 Style.STROKE_FILL 或 Style.FILL 时,我会在地图上看到以下内容:

在此处输入图像描述

我在论坛中找不到解决此问题的方法。

我将不胜感激任何帮助。

谢谢。

4

3 回答 3

3

试试这个。更改是在完成后绘制路径。

    Point point1 = null;
    Path path = new Path();

    for(GeoPoint p : points){                                                                                  

        Point point2 = new Point();         
        mapView.getProjection().toPixels(p, point2);

        if(point1 != null){                 
            path.lineTo(point2.x, point2.y);                        
            mapView.getProjection().toPixels(p, point1);
        } else {
            point1 = new Point();
            mapView.getProjection().toPixels(p, point1);                
            path.moveTo(point1.x, point1.y);
        }

    }
    canvas.drawPath(path, mPaint);

您还可以在绘制路径之前对其进行检查。

于 2012-10-14T15:49:14.053 回答
0

你确定点的顺序是正确的吗?

于 2012-10-14T15:44:23.513 回答
0
       Paint   mPaint = new Paint();
       Path path = new Path();


        // 
       GeoPoint name0 = new GeoPoint(40696017,-7975247);  // = 40.69601721120307,-7.975247972597344
       Point pname0 = new Point();   
       projection.toPixels(name0, pname0);
       path.moveTo(pname0.x, pname0.y);        //first= moveto
       //
       GeoPoint name1 = new GeoPoint(39592094,-5602198); // 39.59209428101375,-5.602198679879018
       Point pname1 = new Point();   
       projection.toPixels(name1, pname1);
       path.lineTo(pname1.x, pname1.y);
       //
       GeoPoint name2 = new GeoPoint(...,...);
       Point pname2 = new Point();   
       projection.toPixels(name2, pname2);
       path.lineTo(pname2.x, pname2.y);

       // ... , ...


       canvas.drawPath(path, mPaint);
于 2013-02-28T01:52:30.410 回答