Php 在yii框架中从geojson获取多边形坐标

Php 在yii框架中从geojson获取多边形坐标,php,postgresql,yii,geojson,Php,Postgresql,Yii,Geojson,我使用Yii框架和GeoExt开发基于地图的web应用程序。在这个应用程序中,我有一个功能,用户可以绘制多边形,当单击它时,我会使用ajax将多边形信息发送到控制器操作,以将此多边形保存到数据库中。要在数据库中保存多边形,我需要多边形的坐标。要获取多边形坐标,我使用以下代码我的控制器动作。但我不知道我能不能得到多边形坐标。为了了解它,我在动作代码中将坐标发送到$.ajax success函数,但我的浏览器控制台出错了 操作代码: public function actionTest() {

我使用Yii框架和GeoExt开发基于地图的web应用程序。在这个应用程序中,我有一个功能,用户可以绘制多边形,当单击它时,我会使用ajax将多边形信息发送到控制器操作,以将此多边形保存到数据库中。要在数据库中保存多边形,我需要多边形的坐标。要获取多边形坐标,我使用以下代码我的控制器动作。但我不知道我能不能得到多边形坐标。为了了解它,我在动作代码中将坐标发送到$.ajax success函数,但我的浏览器控制台出错了
操作代码:

public function actionTest()
{
   if(isset($_POST['polygon']) && isset($_POST['name'])){
            $str = $_POST['polygon'];
            $polygon = CJSON::decode($str);
            $coordinates = $polygon->polygon->geometry->coordinates[0];
   }
   echo CJSON::encode(array('polygon'=> $coordinates));
}
$。ajax代码:

function save(feature) {
        var geojson_format = new OpenLayers.Format.GeoJSON();
        var str = geojson_format.write(feature);
        str = str.replace(/,/g, ', ');
        Ext.MessageBox.prompt('Name', 'Please enter district name:', function(btn, text){
                if (btn == 'ok' && text.length > 0){
                    <?php 
                        echo CHtml::ajax(array(
                            'url'=>array('site/test'),
                            'data'=>array('polygon'=>'js:str',
                                'name'=>'js:text'),
                            'type'=>'POST',

                            'success'=>"function(data){
                                    console.log(data);
                                }"
                        ));
                    ?>
                    $("#output").val(str);
                }
                else if(btn == 'ok' && text.length == 0)
                    Ext.MessageBox.alert('Error', 'Please Enter Name For Polygon To Save');
            });
}
但当我使用下面的代码进行操作时,我可以在控制台中获得字符串:

public function actionTest()
{
   if(isset($_POST['polygon']) && isset($_POST['name'])){
            $str = $_POST['polygon'];
            $polygon = CJSON::decode($str);
   }
   echo CJSON::encode(array('polygon'=> $polygon ));
}
{"polygon":{"type":"Feature","properties":[],"geometry":{"type":"Polygon","coordinates":[[[-7302732.4720101,6527844.6333235],[-3193477.8319711,6606116.1502766],[-5111129.9973226,5001550.0527375],[-6637424.5779086,4884142.7773079],[-7772361.5737289,5158093.0866438],[-7302732.4720101,6527844.6333235]]]},"crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:OGC:1.3:CRS84"}}}}
使用上述代码后,我可以在浏览器控制台中获得以下字符串:

public function actionTest()
{
   if(isset($_POST['polygon']) && isset($_POST['name'])){
            $str = $_POST['polygon'];
            $polygon = CJSON::decode($str);
   }
   echo CJSON::encode(array('polygon'=> $polygon ));
}
{"polygon":{"type":"Feature","properties":[],"geometry":{"type":"Polygon","coordinates":[[[-7302732.4720101,6527844.6333235],[-3193477.8319711,6606116.1502766],[-5111129.9973226,5001550.0527375],[-6637424.5779086,4884142.7773079],[-7772361.5737289,5158093.0866438],[-7302732.4720101,6527844.6333235]]]},"crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:OGC:1.3:CRS84"}}}}
为什么我无法获取坐标?我如何才能获取坐标?
我在chrome控制台中看到了下面的var_dump输出代码

<pre class='xdebug-var-dump' dir='ltr'>
<b>array</b>
'type' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'Feature'</font> <i>(length=7)</i>
'properties' <font color='#888a85'>=&gt;</font> 
<b>array</b>
<i><font color='#888a85'>empty</font></i>
'geometry' <font color='#888a85'>=&gt;</font> 
<b>array</b>
'type' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'Polygon'</font> <i>(length=7)</i>
'coordinates' <font color='#888a85'>=&gt;</font> 
<b>array</b>
0 <font color='#888a85'>=&gt;</font> 
<b>array</b>
 ...
'crs' <font color='#888a85'>=&gt;</font> 
<b>array</b>
'type' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'name'</font> <i>(length=4)</i>
'properties' <font color='#888a85'>=&gt;</font> 
<b>array</b>

排列
“类型”=字符串”特征(长度=7)
“属性”=
排列
空的
“几何体”=
排列
“类型”=字符串“多边形”(长度=7)
“坐标”=
排列
0 = 
排列
...
“crs”=
排列
“类型”=字符串“名称”(长度=4)
“属性”=
排列

我不知道为什么坐标不出现在一个节目中。。。而不是主题

我不知道你为什么要把多边形坐标传回去;听起来好像您应该在actionTest中将其保存到数据库中,而不需要将其发送回客户端

无论如何,我认为您的代码应该在这一行抛出一个PHP错误:

$coordinates = $polygon->polygon->geometry->coordinates[0];
您确定$polygon是一个对象吗?我认为这是一个数组,因此您需要使用数组引用,例如:

$coordinates = $polygon['polygon']['geometry']['coordinates'][0];

在任何情况下,请在actionTest中执行一些var_dump(),以确保在将值传递回JS之前,这些值是您期望的值。

我想测试一下,我可以在浏览器控制台中获取多边形的坐标,并在测试后将其保存到数据库中。我将代码更改为
$coordinates=$polygon['polygon']['geometry']['坐标'][0];
但我得到了同样的错误。var\u dump不起作用,因为我通过ajax向服务器发送数据。如何在ajax中使用var\u dump?action不会呈现任何视图以使用var\u dump!。我使用此站点检查我的$polygon结构以获取坐标。您可以在此站点中看到我的字符串结构。我对这个问题感到非常困惑。如何使用var_dump在实际操作中,因为当我在操作代码中使用时,我只看到$polygon的html格式,而看不到其中的坐标!var_dump()您的操作中的输出应该可以在Firebug或Chrome Developer Tools的调试控制台中查看。我编辑我的问题并在控制台中添加var_dump输出,但我不知道为什么代码不起作用,并在控制台中显示php错误。当我发送$polygon而不是$coordinates时,我在问题中看到字符串,但坐标出现错误。您能帮助我吗?您的问题不断表明,我对PHP和Javascript缺乏基本的理解,即一个是服务器端,另一个是客户端,您需要在它们之间传递数据,通常使用JSON。对不起,在您理解之前,我将不得不停止回答您的问题,然后学习一些基本的调试步骤(例如,如何使用调试控制台、检查变量值等)。