【问题标题】:Add feature to existing layer in Geotools向 Geotools 中的现有图层添加功能
【发布时间】:2015-01-09 00:42:03
【问题描述】:

我在 Geotools MapPane 中添加了一个图层,其中包含各种 WKT 字符串功能。图层显示正确。现在,单击 UI 上的按钮,我想向该层添加另一个功能。

最初,我创建图层并使用以下内容显示它:

List<SimpleFeature> list  = featuresFromWkt(wktString, name); //method name explains what it does..
ListFeatureCollection col = new ListFeatureCollection(getFeatureType(), list); 
Color color = Color.BLUE;
Style style = SLD.createPolygonStyle(color, color.brighter(), 0.5f);
FeatureLayer layer = new FeatureLayer(col, style);
layer.setVisible(true);
layer.setTitle(name);
mapContent.layers().add(layer)

现在,要向图层添加一些内容,我从内容中获取图层,使用:

FeatureLayer layer = (FeatureLayer) mapContent.layers().get(0);

我现在可以使用 layer.getSimpleFeatureSource() 来检索源,但似乎没有办法将此源转换回我可以调用 .addFeature(someNewFeature) 以向地图添加内容的东西。

我可以保留对 ListFeatureCollection 的引用并使用它来添加新功能,但我更愿意只使用 mapConent.layers.get(layerNumber) 方法,然后使用图层添加内容。

到目前为止,我看到的所有示例都只是添加了具有新功能的另一层。我不想添加另一层,而只是向现有层添加一些内容,其内容位于内存中。我在这里错过了什么吗?是否有我不知道的 GeoTools 类?

【问题讨论】:

    标签: java geotools


    【解决方案1】:

    看看http://osgeo-org.1560.x6.nabble.com/Adding-geometry-to-layer-td4324729.html。这听起来与您的问题非常相似,不久前在 GeoTools 邮件列表中被问到。

    基本思路,以防上面链接的邮件列表存档在某个时间点不可用:

    • 创建一个包含您的特征的特征集合(最初可能为空)
    • 将此要素集合添加到地图图层
    • 稍后将功能添加到功能集合中。

    根据邮件列表上的声明:“当您将要素添加到集合时,地图窗格应自动重新绘制(从要素集合发送到地图图层到图层列表到地图窗格的一系列事件)"

    【讨论】:

    • 谢谢。几分钟前我得出了同样的结论。我扩展了 FeatureLayer 类,并在这个新类中保留了对特征集合的引用。然后,从 MapContent 中获取图层,将其转换为我的新类并调用 .addFeature(feature) 方法。 .addFeature 方法只是将特征添加到集合中。它看起来确实有点脏,但对我有用,因为它允许我通过从 mapContent 获取图层来添加东西。希望它以后不会咬我:)
    • 这里不太好用:层只是偶尔更新一次,而且我的API不是非常一致:SimpleFeatureCollections#contains()SimpleFeatureCollections#add()是基于特征ID,而SimpleFeatureCollections#remove()是基于全特征哈希的,这会导致由于某些属性的变化而没有删除特征。我想我会删除/添加图层以实现实时。 ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    相关资源
    最近更新 更多