ST_asGeoJson for Multilinestring in php for leaflet

ST_asGeoJson for Multilinestring in php for leaflet

我有一个 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 获取吗?

错误是多余的引号。

通过替换行

将其删除
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;

你的问题是

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

返回的是 字符串 而不是字典(或 "ordered map" 或 PHP 说法中的 "array" 。字符串是 PostgreSQL 可以 JSON 与您的 PHP 代码通信的唯一方式。

您可以通过以下方式获得更好的结果:

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