0

我有一个 php 代码,它运行一个查询以将数据库中的 Multilinestring geom 字段转换为 geojson 数据。此代码适用于多面体和点几何数据,但在解析多线字符串几何字段时会出现一些错误。

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

我猜这个错误主要是因为几何值之前的双引号。不知道怎么解决。

有没有其他方法可以将多线串几何数据作为geojson?

4

2 回答 2

1

你的问题是

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

正在返回一个字符串而不是字典(或 PHP 用语中的“有序映射”或“数组”)。字符串是 PostgreSQL 可以将 JSON 传递给 PHP 代码的唯一方式。

通过执行以下操作,您将获得更好的结果:

$feature->geometry = json_decode($row[0]);
于 2017-05-09T08:28:04.293 回答
0

错误是额外的引号。

通过替换行将其删除

echo (json_encode($collection,JSON_NUMERIC_CHECK));

与以下

$trial=stripslashes(json_encode($collection,JSON_NUMERIC_CHECK));
          $trial= str_replace('"{"type"','{"type"',$trial);
          $trial= str_replace('}","properties"','},"properties"',$trial);
echo $trial;
于 2017-05-09T07:02:09.337 回答