与内存功能集合和功能互动为空间一起工作



我是DOTSPatial的初学者,我遇到了问题。我尝试使用内存功能(仅将它们保存在地图中(,直到用户点击保存按钮为止。基本思想是,如果功能集不准备就绪,则用户会导入一些DXF文件,并根据图层名称创建功能集,并且对于来自DXF的每个polyline,都会创建功能,这些功能将添加到功能集中。

 public IFeature AddPoligons(EntityObject polyline, List<Text> textInDxf)
{
    IFeatureSet featureSet = null;
    //Getting the right featureset from map
    foreach (var x in appManager.Map.GetPolygonLayers())
    {
        if (!string.Equals(x.DataSet.Name, layerName)) continue;
        featureSet = x.DataSet as FeatureSet;
        break;
    }
    var polygon = CreatePolygon(polyline);
    //Creating feature and adding to FeatureSet
    var feature = featureSet.AddFeature(polygon);
    //Populating DataRow with information
    AddinfoIntoDataTable(feature, polygon, textInDxf);
    return feature;
}

所有东西看起来都不错,地图已使用新的多边形进行更新,可以选择它们,从数据表中查看信息,但是,当我尝试删除选定的功能(Polygon(时,它会引发indexoutofrange异常。

我在那里做错了什么?

请帮忙!谢谢你,很抱歉我的英语不好。

P.S。当我首先创建功能集时,我将其保存在磁盘上,然后使用map.addlayer((方法加载到MAP中。

同时,我在Codeplex-Dotspatial论坛上找到了该解决方案,并由Jany发布。每个操作都针对功能集(添加,删除,移动(

在每个操作之后调用此代码的想法
featureLayer.DataSet.UpdateExtent();
featureLayer.DataSet.InitializeVertices();
featureLayer.LabelLayer?.CreateLabels();
if(save)
{
    featureLayer.DataSet.Save();
    featureLayer.DataSet.Close();
}
featureLayer.AssignFastDrawnStates();
AppManager.Map.Refresh();
AppManager.Map.ResetBuffer();

featurelayer是ifeaturelayer。

有一个问题:

如果我们使用appmanager.serialization.saveproject((保存项目,然后打开project appmanager.serialization.openproject((问题再次出现。作为此解决方案,我在打开项目之后称我的保存方法,简而言之是这样:

public void Save()
{
     foreach(var featureLayer in AppManager.Map.GetPolygonLayers())
     {
         featureLayer.DataSet.Save();
    }
}

希望对某人有帮助。

相关内容

  • 没有找到相关文章

最新更新