Клуб API Карт

Как прочитать данные из kml после загрузки в карту?

Тарасов Александр
12 августа 2016, 17:55

Добрый день. 
Имеется файлик в формате kml со следующей структурой:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
	<Document>
		<name>Legend</name>
		<open>1</open>
		<Style id="Style1">
			<LineStyle>
				<color>ff00006d</color>
				<width>2</width>
			</LineStyle>
			<PolyStyle>
				<fill>0</fill>
			</PolyStyle>
		</Style>
		<Schema name="" id="Schema1">
			<SimpleField type="xsd:int" name="G3E_ID">
			</SimpleField>
			<SimpleField type="xsd:int" name="G3E_FNO">
			</SimpleField>
			<SimpleField type="xsd:int" name="G3E_CNO">
			</SimpleField>
			<SimpleField type="xsd:int" name="G3E_FID">
			</SimpleField>
			<SimpleField type="xsd:short" name="G3E_CID">
			</SimpleField>
			<SimpleField type="xsd:int" name="DP_TYPE">
			</SimpleField>
			<SimpleField type="xsd:string" name="DP_NAME">
			</SimpleField>
			<SimpleField type="xsd:int" name="ID1">
			</SimpleField>
		</Schema>
		<Folder>
			<name>Текст</name>
			<Placemark>
				<name>Подтекст</name>
				<styleUrl>#Style1</styleUrl>
				<ExtendedData>
					<SchemaData schemaUrl="#Schema1">
						<SimpleData name="G3E_ID">74</SimpleData>
						<SimpleData name="G3E_FNO">31</SimpleData>
						<SimpleData name="G3E_CNO">3104</SimpleData>
						<SimpleData name="G3E_FID">10189606</SimpleData>
						<SimpleData name="G3E_CID">1</SimpleData>
						<SimpleData name="DP_TYPE">3</SimpleData>
						<SimpleData name="DP_NAME">Имя</SimpleData>
						<SimpleData name="ID1">1</SimpleData>
					</SchemaData>
				</ExtendedData>
				<Polygon>
					<outerBoundaryIs>
						<LinearRing>
							<coordinates>
								****
							</coordinates>
						</LinearRing>
					</outerBoundaryIs>
				</Polygon>
			</Placemark>
		</Folder>
	</Document>
</kml>

На карту это добавляется вот таким кодом:
 

ymaps.geoXml.load('http://site.ru/map/areas.kml').then(onGeoXmlLoad);
// Обработчик загрузки XML-файлов.
function onGeoXmlLoad (res) { 
   if (res.mapState) {
      res.mapState.applyToMap(ContactRemontMap);
   }
   ContactRemontMap.geoObjects.add(res.geoObjects);
   ContactRemontMap.setBounds(res.geoObjects.getBounds());
} 

Подскажите, каким образом, при клике на каждую из областей получить вот эти данные?
 

<SimpleData name="G3E_ID">74</SimpleData>
<SimpleData name="G3E_FNO">31</SimpleData>
<SimpleData name="G3E_CNO">3104</SimpleData>
<SimpleData name="G3E_FID">10189606</SimpleData>
<SimpleData name="G3E_CID">1</SimpleData>
<SimpleData name="DP_TYPE">3</SimpleData>
<SimpleData name="DP_NAME">Имя</SimpleData>
<SimpleData name="ID1">1</SimpleData>

8 комментариев
Подписаться на комментарии к посту
if (res.mapState) {
res.mapState.applyToMap(ContactRemontMap);
}
Это не работает для KML, можно убрать.





Получить данные можно через поле properties геообъекта на котором произошло событие.
Тарасов Александр
12 августа 2016, 19:34
dimik,
Спасибо за уточнение, но там возвращается коллекция. 
Я не силен в АПИ карт.
Но в  properties коллекции нет этих данных. 
Нагуглил как перебрать объекты внутри коллекции, но там пусто. Видно, что свойства объявлены, а значений нет: https://yadi.sk/i/6qDX06EJuAseF
Тарасов Александр,
дайте ссылку на ваш kml
Тарасов Александр
12 августа 2016, 20:23
dimik,
https://yadi.sk/d/u4jITR0euAzDE
Тарасов Александр,
Нужна публичная ссылка. Мне прямо сейчас его некуда выложить. Можете прислать на email
dimik,
К сожалению вывод значений SimpleData сейчас не работает. 
Я создал тикет для разработчиков.
Пока его не починят можно использовать Data вместо SchemaData/SimpleData


https://developers.google.com/kml/documentation/kmlreference#elements-specific-to-extendeddata
Либо попробовать обернуть текстовую ноду в тег value:
<SimpleData name="G3E_ID"><value>74</value></SimpleData>
Тарасов Александр
12 августа 2016, 23:50
dimik,
Спасибо большое. Буду пробовать.