首页 > 解决方案 > 在 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>

标签: phpjqueryajaxgeojson

解决方案


与我在使用 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

感谢大家的想法和时间。


推荐阅读