2016-03-19 15 views
0

Dinamik olarak PHP ile bir KML dosyası (temelde yalnızca XML) oluşturmaya çalışırken garip bir problemle karşılaşıyorum. Ben laravel çerçevesini kullanıyorum ve burada KML dosyasını oluşturan görünüm.Bir KML dosyasını PHP'den dışa aktarma

<?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 haritalarından tek bir katman dışa aktardım ve istediğim gibi değiştirdim. Ve bu gayet iyi çalışıyor. Ancak tek sorun, ilk indirgeme <styleUrl> kodunda, dosya indirildiğinde, sadece Url>.

Diğer birkaç tane daha <styleUrl> etiketi vardır ancak bunlar gayet iyi çalışır. Tüm PHP şeylerini kaldırmayı ve sadece durağan KML koymayı denedim ama yine de Url> çıktı. Sorunun ne olduğu hakkında bir fikrin var mı?

Düzenleme 1:

Değişkenler şablona geçirilen $paths ve $points bulunmaktadır. Burada herhangi bir yardım olması durumunda bunlar.

// $points 
array(1) { 
    [0]=> 
    array(2) { 
    ["name"]=> 
    string(9) "Nijraj Gelani" 
    ["coords"]=> 
    string(29) "-79.58523260,43.73280100,0.0 " 
    } 
} 
// $paths 
array(0) { 
} 

Düzenleme 2:

Ben biraz yukarı <styleUrl> etiketi taşımak için çalıştı (yani sözdizimi yanlış olmasına rağmen ama sadece fikir edinmek için) ve ince sürece çocuk değil gibi çalışır <kml> etiketinin herhangi bir şekilde. Yani, <?xml?> etiketinin düzgün çalışmasından sonra koyulması.

+0

Düşünebildiğim tek şey, buna neden olan blade yorumlayıcısında bir hatayı tetiklemenizdir. Şablonunuzda sadece bir bıçak yapısı kullandığınızı görüyorum. Bunu php olarak değiştirmeyi ve şablonunuzu bir blade.php dosyası yerine bir php dosyası olarak kaydetmeyi ve yardımcı olup olmadığını görmeyi deneyin. – delatbabel

+0

Teşekkürler @delatbabel Ama işe yaramadı. Dosyada hala 'Url>' yazıyor. –

+0

Tamam, garip ve harika yeni bir böcek keşfettiniz. Bazen yeniden üretip üretemeyeceğimi görmek isterim. Aşağıdaki "çözümünüz", sadece mevcut hatayı gizleyen yeni bir hata ortaya çıkarır, ancak yapmanız gereken şey buysa, sanırım bunu yaparsınız. – delatbabel

cevap

0

İdeal bir çözüm olmasa da, <styleUrl> etiketinden echo '<style'; etiketi ekleyerek bir geçici çözüm buldum. Bunun neden olduğunu bilmek isterdim ve gerçekten de herkesin aynı problemle karşılaşacağından şüpheliyim. : D

İlgili konular