php - 在 PHP 中接收 geoJSON 多边形作为 POST 在 foreach 中不起作用
问题描述
我有一个谷歌地图页面,用户将使用它来勾勒一个区域。这将创建一个 geoJSON 多边形,该多边形被发送到一个 PHP 页面,该页面接收信息并将其与用户 ID 一起保存。
我似乎正在使用 jQuery AJAX 帖子将信息发送到 php 页面。在服务器页面上,我使用以下 PHP 来接收 jQuery 帖子:
$PlayerID=$_REQUEST['id'];
$user_id=$_REQUEST['i'];
$polygon=$_REQUEST['polygon'];
$tempData = html_entity_decode($polygon);
$json=json_decode($tempData, true);
echo "<pre>";
print_r($json);
echo "</pre>";
echo "ARRAY Stuff:<pre>";
print_r($json->features);
echo "</pre>";
$set = 1;
foreach($json->features[0]->geometry->coordinates[0] as $coordinates)
{
echo 'Set '.$set.': ';$set++;
echo $coordinates[0].','.$coordinates[1]."<br>\n";
}
结果是:
<pre>{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
-79.5388860291992,
43.97521723544242
],
[
-79.6542424745117,
43.853534949336265
],
[
-79.4345159120117,
43.854525239394725
],
[
-79.5388860291992,
43.97521723544242
]
]
]
},
"properties": {}
}
]
}</pre>ARRAY Stuff:<pre></pre><br />
<b>Warning</b>: Invalid argument supplied for foreach() in <b>savePolygon_ajax.php</b> on line <b>21</b><br />
我尝试调用特定的数组元素(例如 $json['features'] 或 $json->features)并收到错误消息。
这是一个转折点:如果我从 Chrome 的控制台中复制 geoJSON 并用它替换 $tempData(IOW,文本 geojson)一切正常。
任何想法我做错了什么?
编辑:
这是输出print_r($_POST)
:
<pre>Array
(
[polygon] => "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n [\n [\n -79.87384029097899,\n 43.95742561339064\n ],\n [\n -80.05236812301024,\n 43.59649620245567\n ],\n [\n -79.43988033004149,\n 43.64819092196166\n ],\n [\n -79.87384029097899,\n 43.95742561339064\n ]\n ]\n ]\n },\n \"properties\": {}\n }\n ]\n}"
[u] => 339255ed-4a7e-XXXXXXXXXXX
[i] => ###
)
</pre>
解决方案
与我在使用 jQuery ajax 提交 geoJSON 时阅读的所有内容相反,将其更改JSON.stringify(geoJsonInput.value)
为刚刚geoJsonInput.value
工作,输出现在如下所示:
ARRAY Stuff:
Array
(
[0] => Array
(
[0] => -79.652869183496
[1] => 44.020660503319
)
[1] => Array
(
[0] => -79.777838665918
[1] => 43.820846152094
)
[2] => Array
(
[0] => -79.37546439834
[1] => 43.83372569482
)
[3] => Array
(
[0] => -79.652869183496
[1] => 44.020660503319
)
)
Set 1: -79.652869183496,44.020660503319
Set 2: -79.777838665918,43.820846152094
Set 3: -79.37546439834,43.83372569482
Set 4: -79.652869183496,44.020660503319
感谢大家的想法和时间。
推荐阅读
- git - 是否可以将 git filter-branch 与脏工作目录一起使用?
- mysql - 可以在 MySQL 中使用“For Each”循环来生成带有变量的临时表吗?
- php - 从内部(第二级)页面提交表格
- bash - 如何计算属于集群的序列?(来自 cd-hit 输出)
- arduino - 我正在尝试使用电报机器人库配置电报机器人,但出现错误
- angular - 将字符串转换为类打字稿/角度
- java - 在 IntelliJ IDEA 中运行单个 Junit 测试
- python - 在 Python 中解析 XML 文件:检查标签或项目时没有结果
- sql - 运行联合查询时,')' 附近的语法不正确
- css - 如何移动(中心)一个 svg 图标?