从 PHP 导出 KML 文件
Exporting a KML file from PHP
我在尝试使用 PHP 动态创建 KML 文件(基本上只是 XML)时遇到了一个奇怪的问题。我正在使用 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?>
标签之后就可以了。
虽然这不是一个理想的解决方案,但我通过在 <styleUrl>
标记之前添加一个额外的 echo '<style';
找到了解决方法。我很想知道为什么会这样,但我真的怀疑是否有人会遇到同样的问题。 :D
我在尝试使用 PHP 动态创建 KML 文件(基本上只是 XML)时遇到了一个奇怪的问题。我正在使用 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?>
标签之后就可以了。
虽然这不是一个理想的解决方案,但我通过在 <styleUrl>
标记之前添加一个额外的 echo '<style';
找到了解决方法。我很想知道为什么会这样,但我真的怀疑是否有人会遇到同样的问题。 :D