删除地标,然后将减去该地标的整个kml保存到新文件中

奥雷留斯·施尼茨勒

我的目标是删除使用sharpkml读取的kml文件中的地标,并将xml保存为新的kml。

我尝试了什么

  • RemoveChildren->找不到
  • AddUpdate与DeleteCollection->无法正常工作

using SharpKml.Base;
using SharpKml.Dom;
using SharpKml.Engine;

           
TextReader i_test = File.OpenText(@"test.kml");
KmlFile k_test = KmlFile.Load(i_test);
Kml l_test = k_test.Root as Kml;
var serializer = new Serializer();
if (l_test != null)
{
    foreach (var ort_u in l_test.Flatten().OfType<Placemark>())
    {
        Placemark p_u = ort_u;
        foreach(var einh in ort_u.ExtendedData.Data)
        {
            if (einh.Name == "teststring")
            {
                    var update = new Update();
                    update.AddUpdate(new DeleteCollection(){ p_u });
                    serializer.Serialize(l_test);
                    Console.WriteLine(serializer.Xml.Length);
            }
        }
    }
}

它们都不起作用。

如何使用SharpKml删除地标,并将减去该地标的整个kml保存到新文件中?

Xanatos

好吧... APlacemarkFeature,而Features进入Containers ...并且Containers中有一个恰当的名称.RemoveFeature()...可悲的是,该方法使用.Id来查找Feature,但并非所有Features都有Id...。但这可以解决。我们设置一个临时IdGuid.NewGuid().ToString()),它或多或少地保证是唯一的(Guid或多或少地保证是唯一的),并且我们使用它Id来删除Feature

请注意,我不得不添加.ToArray()foreach,因为你不能修改的集合,你正在经历,但与.ToArray()我们通过一个集合的“复制”,而我们删除原始的元素。

foreach (var placemark in kml.Flatten().OfType<Placemark>().ToArray())
{
    if (placemark.Name == "Simple placemark")
    {
        placemark.Id = Guid.NewGuid().ToString();
        ((Container)placemark.Parent).RemoveFeature(placemark.Id);
    }

    Console.WriteLine(placemark.Name);
}

我已经在SharpKml的github上打开了一个关于此问题的错误。

为了保存:

using (var stream = File.Create("output.kml"))
{
    var ser = new Serializer();
    ser.Serialize(kml, stream);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用文件中的kml地标?

Python从包含多个地标的KML文件中提取数据

.kml文件中带有地标的Google Maps Polygon(使用geoxml3和kmllayer)

VBA选择两个文件,在工作簿之间执行vlookup,然后将结果保存到新文件中

循环执行excel文件,然后将其保存到新文件夹python pandas中

将NSDictionary保存到文件并创建新文件

Flutter如何将图像文件保存到图库中的新文件夹?

R按列中的条件从文件列表中选择多个文件,然后保存到新文件夹中

在目录中的文件中查找字符串,然后将整个文件移至新文件夹

CSV 查找并保存到新文件

在Android中使用“文件文件=新文件(文件名)”将文件保存到何处

数据扩充后如何在不循环的情况下将图像保存到新文件夹中

我该如何修改以将电子表格保存到新文件夹中

将最后n行复制到新文件,然后从原始文件中删除n行

打开txt文件,创建新的txt文件,将旧文本保存到新文件

如何使用OS将文件保存到新文件夹?

如何解析KML文件以从地标元素检索坐标点?

从文件中读取N行并将其保存到新文件

Python在文件中查找字符串,编辑行并保存到新文件

尝试按字母顺序对 txt 文件进行排序并将其保存到新文件中

如何使用python将每个循环保存到新文件

Excel VBA-将工作表保存到没有公式的新文件

如何将图像保存到新文件夹Matlab

将终端名称之间的数据保存到新文件?

如何将一个文件的模式搜索到另一个文件中,并将每个模式的结果保存到新文件中

Linux / Unix替换字符串中的模式并使用sed保存到新文件

在 Python 中每次迭代將圖片保存到一個新文件夾

将csv中的每一行保存到新文件,文件名作为特定列中包含的字符串

使用Awk将file1的每一行保存到新文件中,文件名来自file2的每一行