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]);
我有一个 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]);