Я сталкиваюсь со странной проблемой при попытке динамически создать файл KML (который в основном представляет собой просто XML) с помощью PHP. Я использую фреймворк laravel, и вот представление, которое генерирует файл KML.
<?php
header('Content-type: text/plain');
header('Content-Disposition: attachment; filename="location.kml"');
?>
<?xml version='1.0' encoding='UTF-8'?>
<kml xmlns='http://www.opengis.net/kml/2.2'>
<Document>
<name>Towers</name>
<?php for ($i = 0; $i < count($points); $i++){ ?>
<Placemark>
<name>{{ $points[$i]['name'] }}</name>
<!--HERE'S THE PROBLEM-->
<styleUrl>#icon-503-DB4436-nodesc</styleUrl>
<Point>
<coordinates>{{ $points[$i]['coords'] }}</coordinates>
</Point>
</Placemark>
<?php } ?>
<?php for ($i = 0; $i < count($paths); $i++){ ?>
<Placemark>
<name>{{ $paths[$i]['name'] }}</name>
<styleUrl>#line-000000-1-nodesc</styleUrl>
<LineString>
<tessellate>1</tessellate>
<coordinates>{{ $paths[$i]['coords'] }}</coordinates>
</LineString>
</Placemark>
<?php } ?>
<Style id='icon-503-DB4436-nodesc-normal'>
<IconStyle>
<color>ff3644DB</color>
<scale>1.1</scale>
<Icon>
<href>http://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png</href>
</Icon>
<hotSpot x='16' y='31' xunits='pixels' yunits='insetPixels'>
</hotSpot>
</IconStyle>
<LabelStyle>
<scale>0.0</scale>
</LabelStyle>
<BalloonStyle>
<text><![CDATA[<h3>$[name]</h3>]]></text>
</BalloonStyle>
</Style>
<Style id='icon-503-DB4436-nodesc-highlight'>
<IconStyle>
<color>ff3644DB</color>
<scale>1.1</scale>
<Icon>
<href>http://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png</href>
</Icon>
<hotSpot x='16' y='31' xunits='pixels' yunits='insetPixels'>
</hotSpot>
</IconStyle>
<LabelStyle>
<scale>1.1</scale>
</LabelStyle>
<BalloonStyle>
<text><![CDATA[<h3>$[name]</h3>]]></text>
</BalloonStyle>
</Style>
<StyleMap id='icon-503-DB4436-nodesc'>
<Pair>
<key>normal</key>
<styleUrl>#icon-503-DB4436-nodesc-normal</styleUrl>
</Pair>
<Pair>
<key>highlight</key>
<styleUrl>#icon-503-DB4436-nodesc-highlight</styleUrl>
</Pair>
</StyleMap>
<Style id='line-000000-1-nodesc-normal'>
<LineStyle>
<color>ff000000</color>
<width>1</width>
</LineStyle>
<BalloonStyle>
<text><![CDATA[<h3>$[name]</h3>]]></text>
</BalloonStyle>
</Style>
<Style id='line-000000-1-nodesc-highlight'>
<LineStyle>
<color>ff000000</color>
<width>2.0</width>
</LineStyle>
<BalloonStyle>
<text><![CDATA[<h3>$[name]</h3>]]></text>
</BalloonStyle>
</Style>
<StyleMap id='line-000000-1-nodesc'>
<Pair>
<key>normal</key>
<styleUrl>#line-000000-1-nodesc-normal</styleUrl>
</Pair>
<Pair>
<key>highlight</key>
<styleUrl>#line-000000-1-nodesc-highlight</styleUrl>
</Pair>
</StyleMap>
</Document>
</kml>
Я экспортировал один слой из карт Google и изменил его так, как я хотел. И это работает просто отлично. Но единственная проблема в том, что первое появление <styleUrl>
тег в коде, когда файл загружен, просто Url>
,
Есть также несколько других <styleUrl>
теги, но они работают просто отлично. Я попытался удалить все вещи PHP и положить только статический KML, но все равно он выводит Url>
, Есть идеи, что может быть не так?
Изменить 1:
Переменные, передаваемые в шаблон $paths
а также $points
, Вот они на случай, если это поможет.
// $points
array(1) {
[0]=>
array(2) {
["name"]=>
string(9) "Nijraj Gelani"["coords"]=>
string(29) "-79.58523260,43.73280100,0.0 "}
}
// $paths
array(0) {
}
Изменить 2:
Я пытался переместить <styleUrl>
немного пометить (хотя это синтаксически неверно, но только для того, чтобы понять), и это работает хорошо, если это не потомок <kml>
пометить любым способом. т.е. ставить его после <?xml?>
тег работает нормально.
Хотя это и не идеальное решение, я нашел обходной путь, поставив дополнительный echo '<style';
перед <styleUrl>
тег. Я хотел бы знать, почему это произошло, и я действительно сомневаюсь, что кто-то столкнется с той же проблемой. : D
Других решений пока нет …