【问题标题】:osmdroid Polygon - adding a new point in a triangleosmdroid Polygon - 在三角形中添加一个新点
【发布时间】:2017-06-16 01:15:32
【问题描述】:

我可以使用singleTapConfirmedHelper() 制作多边形。但我仍然有一个问题。添加第四个点(红色圆圈)时如何删除线(蓝色箭头)。添加第四点后,该线不会消失。我希望我解释得很好。谢谢。

    @Override
    public boolean singleTapConfirmedHelper(GeoPoint p) {

    Polygon circle = new Polygon();
    circle.setPoints(Polygon.pointsAsCircle(p, 2.0));
    circle.setFillColor(0x12121212);
    circle.setStrokeColor(Color.RED);
    circle.setStrokeWidth(2);
    map.getOverlays().add(circle);
    circle.setInfoWindow(new 
    BasicInfoWindow(org.osmdroid.bonuspack.R.layout.bonuspack_bubble, 
    map));
    circle.setTitle("Centered on " + p.getLatitude() + "," + 
    p.getLongitude());

    List<GeoPoint> pts = new ArrayList<>();
    pts.add(new GeoPoint(p.getLatitude(), p.getLongitude()));

    Polygon polygon = new Polygon(ctx);
    polygon.setTitle("This is a polygon");
    polygon.setSubDescription(Polygon.class.getCanonicalName());
    polygon.setFillColor(0x12121212);
    polygon.setVisible(true);
    polygon.setStrokeColor(Color.BLACK);
    polygon.setStrokeWidth(4);
    polygon.setInfoWindow(new 
    BasicInfoWindow(R.layout.bonuspack_bubble, map));
    polygon.setPoints(pts);
    map.getOverlays().add(polygon);

    map.invalidate();

    return true;
}

【问题讨论】:

    标签: android polygon osmdroid


    【解决方案1】:

    您正在为每个添加的点绘制新的多边形,而不是删除旧的。因此,MapView 会将它们全部绘制在另一个之上。您应该在调用 map.invalidate() 之前从覆盖列表中删除之前绘制的多边形。

    Polygon polygon = new Polygon(ctx);
    polygon.setTitle("This is a polygon");
    polygon.setSubDescription(Polygon.class.getCanonicalName());
    polygon.setFillColor(0x12121212);
    polygon.setVisible(true);
    polygon.setStrokeColor(Color.BLACK);
    polygon.setStrokeWidth(4);
    polygon.setInfoWindow(new 
    BasicInfoWindow(R.layout.bonuspack_bubble, map));
    polygon.setPoints(pts);
    map.getOverlays().add(polygon);
    if (oldPolygon != null) {
       map.getOverlays().remove(oldPolygon);
    }
    oldPolygon = polygon;
    
    map.invalidate();
    

    【讨论】:

    • 嗨!谢谢回复。我在上面添加了 if 条件,现在它不会只画线。
    • 对不起,我打错了,应该删除 oldPolygon。 “map.getOverlays().remove(oldPolygon)”。我会在回复中修正这一行。
    • 天啊!!非常感谢你。正如你所看到的,我在 6 月 16 日发布了这篇文章,我在我的项目中跳过了这一部分,因为它让我发疯。我真的应该研究我的逻辑。谢谢约瑟夫。对此,我真的非常感激。但是我仍然很困惑,我们一开始都没有添加 oldPolygon,我们怎么能删除它呢?
    • @MarkA。实际上我们确实添加了它。问题是您在代码中使用的变量只是指向内存中真实对象的指针。因此,当您将多边形添加到叠加层时,您实际上是在将对象添加到名为多边形的点变量中。如您所见,稍后我们将相同的对象存储在名为 oldPolygon 的变量中。因此,当我们尝试从叠加层中删除 oldPolygon 时,它指向我们在之前执行中添加的同一个多边形。
    • 非常感谢约瑟夫。您不仅给了我一个工作代码,还给了我一个理解。再次,非常感谢。我现在可以继续我的项目的这一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    相关资源
    最近更新 更多