如何在 MapView 上绘制多边形,填充它,并在其上放置一个 onTouch 事件

Posted

技术标签:

【中文标题】如何在 MapView 上绘制多边形,填充它,并在其上放置一个 onTouch 事件【英文标题】:How to draw a Polygon on MapView, fill it, and put a onTouch Event on it 【发布时间】:2012-12-31 20:40:40 【问题描述】:

是否可以在 osmdroid MapView Overlay 的绘制多边形中设置 EventListener ?我想在 Overlay 上打印,触摸它后我想改变它的颜色或处理 Polygon 后面的数据。

例如:

Poly1: ID = 1337, P1(0,0),P2(1,0),......,Pn(0,0)

Poly2: ID = 42 , P1(10,7),P2(18,39),......,Pn(10,7)

在 Poly1 中触摸后,我想知道啊哈 ID 1337 被按下。想要改变它的颜色。

我怎样才能实现这样的行为?

【问题讨论】:

您可以按照以下链接在地图上绘制折线。 ***.com/questions/39454857/… 【参考方案1】:

使用this 文档绘制多边形

使用this 监听地图点击

使用this 确定触摸是否在其中一个多边形内

我不确定几何库可以在android上运行,所以随意替换第三个组件。

编辑

误读了问题并将其与谷歌地图相关联,抱歉。

【讨论】:

抱歉,我正在使用 osmdroid,您使用的是 Google API。我已经画了一个多边形,并且我知道如何获取 OnTouch 事件的位置。是使用几何库确定触摸是否在多边形中的唯一方法吗?我希望画布可能知道它的图纸,并且可以确定在图纸上的点击:(不是这样吗? 哦,对不起...忽略了 OSMDroid 的东西。关键是地图库就是这样,它们的范围不直接包括几何/作为一个特征,所以是的,你必须以某种方式自己提供它。不过,它仍然值得查看您的地图库的文档。 好的,我将查看 JTS 并使用它来获取被触摸的多边形。所以我想我会解决我的问题:) 谢谢【参考方案2】:

以下是如何绘制和填充多边形(矩形示例):

ArrayList bgRectPoints = new ArrayList();

    GeoPoint pt1 = new GeoPoint(-15.953548, 126.036911);
    bgRectPoints.add(pt1);
    GeoPoint pt2 = pt1.destinationPoint(10000, 0);
    bgRectPoints.add(pt2);
    GeoPoint pt3 = pt2.destinationPoint(10000, 90);
    bgRectPoints.add(pt3);
    GeoPoint pt4 = pt3.destinationPoint(10000, 180);
    bgRectPoints.add(pt4);
    bgRectPoints.add(pt1);

    Polygon polygon = new Polygon();
    polygon.setPoints(bgRectPoints);
    polygon.setFillColor(Color.BLACK);

    mapView.getOverlays().add(polygon);

要接收触摸/点击初始化多边形,如下所示:

    Polygon polygon = new Polygon()
        @Override
        public boolean onSingleTapConfirmed(MotionEvent event, MapView mapView) 
            Toast.makeText(context, "Polygon clicked!",Toast.LENGTH_SHORT).show();
            return super.onSingleTapConfirmed(event, mapView);
        
    ;

更多内容请关注here

【讨论】:

Polygon.setFillColor() 现已弃用

以上是关于如何在 MapView 上绘制多边形,填充它,并在其上放置一个 onTouch 事件的主要内容,如果未能解决你的问题,请参考以下文章

如何在不连接它们的情况下在 MapView 上绘制两个 MKPolygons?

使用 Swift 在 MapView 上绘制多边形

是否可以在 ios 的 mapView 上集群 MKPolygon

如何在 QGraphicsScene 上绘制填充多边形

如何在 Android 的 MapView 上绘制带边框的文本?

如何在图像上拖放绘制的多边形