2017-05-09 2 views
0

Ich habe einen PHP-Code, der eine Abfrage ausführt, um das Multilinestring-Geom-Feld aus der Datenbank in Geojson-Daten zu konvertieren. Dieser Code funktioniert gut für Multipolygon- und Geom-Punkt-Daten, aber es gibt einen Fehler beim Parsen eines Multilinien-Geom-Felds.ST_asGeoJson für Multilinestring in PHP für Flugblatt

<?php 
include('../config.php'); // the db config file 
function createFeature() { 
    $feature = new stdClass(); 
    $feature->type = 'Feature'; 
    $feature->geometry = new stdClass(); 
    $feature->geometry->type = 'Multilinestring'; 
    $feature->properties = new stdClass(); 
    return $feature; 
} 

function createCollection() { 
    $collection = new stdClass(); 
    $collection->type = 'FeatureCollection'; 
    $collection->features = array(); 
    return $collection; 
} 


$query = 'SELECT ST_AsGeoJson(geom) as geom,name FROM table_name'; 
if($result = pg_query($query)) { 
      $collection = createCollection(); 
      while($row = pg_fetch_row($result)) 
      { 
      $feature = createFeature(); 
     $feature->geometry = $row[0]; 
     $feature->properties->name=$row[1]; 
     $collection->features[] = $feature; 
      } 

      echo (json_encode($collection,JSON_NUMERIC_CHECK)); 

     } 

Die Antwort, die ich auf Ausführung des Codes erhalten, ist

{"type":"FeatureCollection", 
    "features": 
    [ 
    { 
    "type":"Feature", 
    "geometry": 
    "{\"type\":\"MultiLineString\", 
     \"coordinates\":[[[73.9750168196755,15.2410462374959], 
         [73.974612433675,15.2415698937723], 
         [73.9733813019535,15.2431183375569], 
         [73.9727337832775,15.2439091075613]]] 
     }", 
    "properties":{"name":"NH - 17"} 
    } 
    ] 
} 

Wenn ich versuche, die \ entfernen schlitzt die Funktion mit stripslashes

echo stripslashes(json_encode($collection,JSON_NUMERIC_CHECK)); 

ich immer noch den Fehler

SyntaxError: Unexpected token t in JSON at position 72 

Ich denke, die Der Fehler liegt hauptsächlich an den Anführungszeichen vor den Werten der Geometrie. Ich weiß nicht, wie ich es lösen soll.

Gibt es eine andere Möglichkeit, Multilinestring Geom-Daten als Geojson zu erhalten?

Antwort

1

Ihr Problem ist, dass

$feature->geometry = $row[0]; 

ist eine Zeichenfolge und kein Wörterbuch Rückkehr (oder eine "geordnete Karte" oder "Array" im PHP-Sprachgebrauch. Zeichenfolgen sind die einzige Möglichkeit, mit der PostgreSQL JSON mit Ihrem PHP-Code kommunizieren kann.

Sie werden viel bessere Ergebnisse, indem Sie so etwas wie:

$feature->geometry = json_decode($row[0]); 
0

Der Fehler war die zusätzlichen Anführungszeichen.

entfernt es durch die Linie ersetzt

echo (json_encode($collection,JSON_NUMERIC_CHECK)); 

mit folgendem

$trial=stripslashes(json_encode($collection,JSON_NUMERIC_CHECK)); 
      $trial= str_replace('"{"type"','{"type"',$trial); 
      $trial= str_replace('}","properties"','},"properties"',$trial); 
echo $trial;