2017-05-09 74 views
0

我有一个php代码,它运行查询将Multilinestring geom字段从数据库转换为geojson数据。此代码适用于multipolygon和点geom数据,但在解析多线串geom字段时会出现一些错误。ST_asGeoJson for Multilinestring in php for leaflet

<?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)); 

     } 

我得到上运行的代码的响应

{"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"} 
    } 
    ] 
} 

如果我尝试删除\斜线使用功能的stripslashes

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

我仍然得到错误

SyntaxError: Unexpected token t in JSON at position 72 

我猜错误主要是因为几何体的值之前的双引号。不知道如何解决它。

是否有任何其他方式获得多线串geo数据geojson?

回答

1

您的问题,更换线路

echo (json_encode($collection,JSON_NUMERIC_CHECK)); 

删除它是

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

是返回,而不是一个字典(或一个“有序地图”或PHP中的“数组”)。字符串是PostgreSQL可以将JSON传递给您的PHP代码的唯一方式。

你将不得不做这样的事情更好的结果:

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

错误是多余的引号。

通过以下

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