Считать содержимое файла KML в приложение C # - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь извлечь Area_No, Dateof, Location, Week и координаты из следующего KML-файла в приложение Windows C # Form.

<?xml version="1.0" encoding="utf-8" ?>
<kml xmlns="http://www.test.net">
<Document id="root_doc">
<Schema name="LOC2018" id="LOC2018">
<SimpleField name="AREA_NO" type="string"></SimpleField>
<SimpleField name="DATEOF" type="string"></SimpleField>
<SimpleField name="LOCATION" type="string"></SimpleField>
<SimpleField name="Week" type="string"></SimpleField>


</Schema>
<Folder><name>LOC2018</name>
<Placemark>
<Style><LineStyle><color>ff0000ff</color></LineStyle><PolyStyle> 
<fill>0</fill></PolyStyle></Style>
<ExtendedData><SchemaData schemaUrl="#LOC2018">
    <SimpleData name="AREA_NO">1</SimpleData>
    <SimpleData name="DATEOF">1899/12/30</SimpleData>
    <SimpleData name="LOCATION">TEST ROAD</SimpleData>
    <SimpleData name="Week">Week1</SimpleData>
    </SchemaData></ExtendedData>
 <MultiGeometry><Polygon><altitudeMode>clampToGround</altitudeMode> 
 <outerBoundaryIs><LinearRing><altitudeMode>clampToGround</altitudeMode> 
<coordinates>18.672267,-4.158488 16.494032,-2.401444 
16.494032,-2.401444</coordinates></LinearRing></outerBoundaryIs></Polygon> 
</MultiGeometry>
</Placemark>
</Folder>
</Document></kml>

Я новичок в работе с этими файлами и пробовал несколько вариантов, которые я нашел на этом сайте, но безрезультатно.

Я могу загрузить файл и увидеть узлы, но не могу получить доступ к элементам в SchemaData или координатам.

Код, который у меня есть на данный момент:

XDocument doc = XDocument.Load(filename);

        List<XElement> placemarks = doc.Descendants().Where(x => x.Name.LocalName == "SchemaData").ToList();
        foreach (XNode x in placemarks)
        {

        }

, который просто возвращает некоторую информацию, но не в формате, с которым я могу работать.

Может кто-нибудь указать мне, как получить эти данные?

Спасибо.

1 Ответ

0 голосов
/ 31 августа 2018

После нескольких поисков и проб и ошибок я смог получить необходимую информацию из следующего кода.

XDocument doc = XDocument.Load(filename);
        List<XElement> placemarks = doc.Descendants().Where(x => x.Name.LocalName == "SimpleData").ToList();
        foreach (XElement x in placemarks)
        {

        }

"метки" могут быть доступны для получения данных.

...