osmbonuspack:无法在 kml 结构中为每个标记分配自己的样式

如何解决osmbonuspack:无法在 kml 结构中为每个标记分配自己的样式

我正在使用 osmdroid 和 osmbonus 包库开发一个 Android 应用程序,它允许用户菜单中将图标拖放到地图上。 该应用程序旨在允许用户“保存地图”,因此我试图管理如何将所有拖动的标记保存在 kml 文档中,而不是在必要时加载它。

我已经尝试按照 13.3 教程 https://github.com/MKergall/osmbonuspack/wiki/Tutorial_4 进行操作,但我仍然无法弄清楚,所以我可能遗漏了一些东西。

我创建了一个用于在地图中插入标记的类,使用此方法

public void insertIcon(int image) throws IOException {
        marker = new Marker(map);
        point = new GeoPoint(currentLocation);

        marker.setPosition(point);
        marker.setAnchor(Marker.ANCHOR_CENTER,Marker.ANCHOR_BottOM);
        map.getoverlays().add(marker);

        map.invalidate();

        applyDraggableListener(marker);

        marker.setIcon(activity.getDrawable(image));
    }

然后一旦将标记拖到某个位置,我将其添加到 kml 结构中:

 ...
            public void onMarkerDragEnd(Marker marker) {
                GeoPoint geopoint = marker.getPosition();
                //poiMarker.setDraggable(false);

                Utilities.kmlDocument.mKmlRoot.addOverlay(marker,Utilities.kmlDocument);
            }
...

此时,我不知道如何为该特定标记分配其特定样式,这基本上只是图标。 我已经在 MyKmlStyler 中进行了几次测试,但问题的要点实际上是我不知道如何区分每个 kmlPlacemark。 在 onPoint方法 MyKmlStyler 中,我放置了一个 println,显然所有地标都具有相同的样式。

  @Override
    public void onPoint(Marker marker,KmlPlacemark kmlPlacemark,KmlPoint kmlPoint) {
         System.out.println(kmlPlacemark);
    }

我唯一能做的就是为所有拖动的标记提供独特的样式。 我已经尝试过 putStyle 和教程中描述的其他方法,但正如我已经说过的,我很可能遗漏了一些东西。 我的目标是根据用户拖动的标记的真实图标为每个 kmlPlacemark 赋予不同的样式,所有这些都在同一个 kmlDocument 中。

编辑

我以为我设法通过这种方式找到了解决方案:


public void onMarkerDragEnd(Marker marker) {
        /*GeoPoint geopoint = marker.getPosition();
        poiMarker.setDraggable(false);
        */

        KmlDocument mKmlDocument = new KmlDocument();
        KmlPlacemark p = new KmlPlacemark(marker);

        Style s = buildStyle();

        p.mStyle = mKmlDocument.addStyle(s);

        mKmlDocument.mKmlRoot.add(p);

        mKmloverlay = (FolderOverlay) mKmlDocument.mKmlRoot.buildOverlay(map,null,mKmlDocument);
        Utilities.kmlDocument.mKmlRoot.addOverlay(mKmloverlay,Utilities.kmlDocument);
}

  private Style buildStyle(){
        Drawable defaultMarker = AppCompatResources.getDrawable(activity,R.drawable.person);
        Bitmap defaultBitmap = ((BitmapDrawable) defaultMarker).getBitmap();
        return new Style(defaultBitmap,0x901010AA,3.0f,0x20AA1010);
    }

但仍然没有对标记应用任何样式,因此显示的图标是认图标,而不是所选图标。

注意Utilities.kmlDocument 是我存储所有地图标记的地方,因此它不同于 mKmlDocument

解决方法

基本上,如果您尝试依赖标记来构建 KML 文档,那么您的根本原因就是问题。 您应该处理自己的“模型”,然后根据该模型根据需要构建标记,并在需要时构建 KML 文档。

您的“模型”可能是一个简单的对象数组列表,其中包含:一个 GeoPosition 和一个“类型”。根据这种类型,您将能够创建具有各种图标的标记和具有各种样式的 KmlPlacemark。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?