2012-03-24 13 views
1

Ich arbeite an einer Anwendung, die eine KML-Datei mit PHP erstellen wird. Normalerweise habe ich das mit einzelnen Punkten gemacht und hatte kein oder nur ein kleines Problem, aber für Polygone habe ich es schwer, sie zu stilisieren.Stil-Syntax für Polygon in KML mit PHP-DOM-Objekt

Was ich versuche zu tun ist, eine Polygonform basierend auf einem dynamischen Stil aus PHP zu färben; Ich kann jedoch nicht einmal einen hart codierten Stil als Erstes verwenden. Die Struktur der KML wird nach dem Codebeispiel angezeigt, mit dem ich Probleme habe.

Wie sollte die richtige Dom-Syntax aussehen, wenn ich nur einen Polygon-Farbstil und eine bestimmte Breite einrichten möchte.

Danke für Ihre Hilfe

Hier ist der Anfangscode:

// Creates the Document. 
$dom  = new DOMDocument('1.0', 'UTF-8'); 
$kmlfile = $dom->createElementNS('http://earth.google.com/kml/2.1', 'kml'); 
$parentnode = $dom->appendChild($kmlfile); 
$dfnode  = $dom->createElement('Document'); 
$documentnode = $parentnode->appendChild($dfnode); 

$gpsStyleNode = $dom->createElement('Style'); 
$gpsStyleNode->setAttribute('id', 'style_gps'); 
$gpsIconstyleNode = $dom->createElement('IconStyle'); 
$gpsIconstyleNode->setAttribute('id', 'icon_gps'); 
$gpsIconstyleNode->setAttribute('scale', '0.6'); 
$gpsIconstyleNode->setAttribute('color', 'ff0000ff'); 
$gpsIconNode = $dom->createElement('Icon'); 
$gpsHref = $dom->createElement('href', 'http://maps.google.com/mapfiles/kml/shapes/cross-hairs.png'); 
$gpsIconNode->appendChild($gpsHref); 

$gpsIconstyleNode->appendChild($gpsIconNode); 
$gpsStyleNode->appendChild($gpsIconstyleNode); 

$gpslinetyleNode = $dom->createElement('PolyStyle'); 
$gpsStyleNode->appendChild($gpslinetyleNode); 
$gpslinetyleNode->setAttribute('id', 'Icon_gps2');   
$gpslinetyleNode->setAttribute('color', 'ff0000ff'); 
$gpslinetyleNode->setAttribute('width', '20'); 

$documentnode->appendChild($gpsStyleNode); 

KML Ausgabe

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom"> 
<Placemark id="12"> 
<name>PolygonName</name> 
<description>test</description> 
<styleUrl>Icon_gps2</styleUrl> 
<Polygon> 
<extrude>1</extrude> 
<altitudeMode>relativeToGround</altitudeMode> 
<outerBoundaryIs> 
<LinearRing> 
<coordinates> 
(Dynamic Coords pulled from DB in proper format) 
</coordinates> 
</LinearRing> 
</outerBoundaryIs> 
</Polygon> 
</Placemark> 
</kml> 

EDIT

$placeobject = $dom->createElement('Placemark'); 
$placeNode = $nDoc->appendChild($placeobject);   
$placeobject->setAttribute('id',$tmpid); 

$placename = $dom->createElement('name','PolygonName'); 
$placeNode->appendChild($placename);     

$placedesc = $dom->createElement('description', 'test'); 
$placeNode->appendChild($placedesc); 

$stylenode =$dom->createElement('styleUrl','line_gps'); 
$placeNode->appendChild($stylenode); 

$linenode = $dom->createElement('Polygon'); 
$placeNode->appendChild($linenode); 

$lineextrude = $dom->createElement('extrude', '1'); 
$linenode->appendChild($lineextrude); 

$linealtitude = $dom->createElement('altitudeMode', 'relativeToGround'); 
$linenode->appendChild($linealtitude);     

$outerboundnode = $dom->createElement('outerBoundaryIs'); 
$linenode = $linenode->appendChild($outerboundnode); 

$ringtype =$dom->createElement('LinearRing'); 
$linenode = $linenode->appendChild($ringtype); 

$coordnode = $dom->createElement('coordinates',$locationstring); 
$ringtype->appendChild($coordnode); 

Antwort

0

Sie Einstellung Attri Polygon-Code hinzufügen butes (Farbe, Maßstab, Breite), die als Elemente erwartet werden.

Weiterhin gilt Breite LinienArt und nicht

$dom  = new DOMDocument('1.0', 'UTF-8'); 
$nKml  = $dom->appendChild($dom->createElementNS('http://earth.google.com/kml/2.1', 'kml')); 
$nDoc  = $nKml->appendChild($dom->createElement('Document')); 

$idSuffix='_gps'; 

//Style 
$nStyle  = $nDoc->appendChild($dom->createElement('Style')); 
$nStyle->setAttribute('id', 'style'.$idSuffix); 

    //IconStyle 
    $nIconStyle  = $nStyle->appendChild($dom->createElement('IconStyle')); 
    $nIconStyle->setAttribute('id', 'icon'.$idSuffix); 
    //color 
    $nIconStyleColor=$nIconStyle->appendChild($dom->createElement('color')); 
    $nIconStyleColor->appendChild($dom->createTextNode('ff0000ff')); 
    //Icon 
    $nIconStyleIcon=$nIconStyle->appendChild($dom->createElement('Icon')); 
     //href 
     $nIconStyleHref=$nIconStyleIcon->appendChild($dom->createElement('href')); 
     $nIconStyleHref->appendChild($dom->createTextNode('http://maps.google.com/../cross-hairs.png')); 

    //PolyStyle 
    $nPolyStyle  = $nStyle->appendChild($dom->createElement('PolyStyle')); 
    $nPolyStyle->setAttribute('id', 'poly'.$idSuffix); 
    //color 
    $nPolyStyleColor=$nPolyStyle->appendChild($dom->createElement('color')); 
    $nPolyStyleColor->appendChild($dom->createTextNode('ff0000ff')); 

    //LineStyle 
    $nLineStyle  = $nStyle->appendChild($dom->createElement('LineStyle')); 
    $nLineStyle->setAttribute('id', 'line'.$idSuffix); 
    //width 
    $nLineStyleWidth=$nLineStyle->appendChild($dom->createElement('width')); 
    $nLineStyleWidth->appendChild($dom->createTextNode('20')); 
    $nLineStyleColor=$nLineStyle->appendChild($dom->createElement('color')); 
    $nLineStyleColor->appendChild($dom->createTextNode('ff0000ff')); 

Ergebnis Polystyle:

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://earth.google.com/kml/2.1"> 
    <Document> 
    <Style id="style_gps"> 
     <IconStyle id="icon_gps"> 
     <color>ff0000ff</color> 
     <Icon> 
      <href>http://maps.google.com/../cross-hairs.png</href> 
     </Icon> 
     </IconStyle> 
     <PolyStyle id="poly_gps"> 
     <color>ff0000ff</color> 
     </PolyStyle> 
     <LineStyle id="line_gps"> 
     <width>20</width> 
     <color>ff0000ff</color> 
     </LineStyle> 
    </Style> 
    </Document> 
</kml> 
+0

Das ist wirklich gut aussieht. Das Skript wird validiert, aber die KML-Datei enthält nicht den Stil. Ich baue die Polygonform natürlich nicht richtig auf, obwohl es funktioniert. Ich habe das OP mit dem Code aktualisiert, den ich verwende, um die Polygonknoten zu erstellen. Es funktioniert, aber es wird nicht Stil. - Erick Dahl vor 9 Minuten –

+0

Ahah, Sie verweisen auf die Stil-ID, nicht auf die poly_gps. Ich spiele mit den Einstellungen, um zu sehen, ob ich es funktioniere, wie ich es möchte. –