2012-08-01 89 views
0

我用Yii框架與GeoExt開發基於地圖的網絡application.In這個程序,我有一個功能,用戶可以繪製多邊形,當點擊它,我送與阿賈克斯到控制器動作多邊形信息以節省database.For節約多邊形這個多邊形上的數據庫,我需要polygon.For的座標獲得多邊形的座標我在控制器使用下面的代碼action.But我不知道我能得到的多邊形座標或不爲理解這件事我送座標到我的行動代碼$ .ajax成功功能,但我在我的瀏覽器控制檯中出現錯誤!
操作代碼:獲取多邊形從GeoJSON的座標Yii框架

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)); 
} 

$阿賈克斯代碼:

POST http://localhost/FleetManagement/index.php/site/test 500 (PHP Error) jquery.js:8102 jQuery.ajaxTransport.send jquery.js:8102 jQuery.extend.ajax jquery.js:7580 modify.mode/FleetManagement/:254(anonymous function) 

但是當我使用下面的代碼的行動我可以:

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"}}}} 

,爲什麼我不能得到的座標,我怎麼能做到這一點?
我看到下面的代碼在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> 

我不知道爲什麼座標不出現在控制檯顯示...代替主題!

+0

我想測試我可以得到在瀏覽器控制檯多邊形的座標,並測試其保存多邊形數據庫之後。 – user1344766 2012-08-01 16:30:43

回答

1

我不知道爲什麼你試圖通過多邊形座標退了出來;這聽起來好像你應該將它保存到actionTest的數據庫中,並且不需要將它發送回客戶端?

在任何情況下,我覺得你的代碼應該在此行中拋出一個PHP錯誤:

$coordinates = $polygon->polygon->geometry->coordinates[0]; 

你確定$多邊形對象?我認爲它是一個數組,所以你需要使用數組引用,如:

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

在任何情況下,做一些後續代碼var_dump()'在你actionTest以確保值是你期望他們什麼在將它傳遞迴你的JS之前。

+0

我改變了我的代碼'$座標= $多邊形[「面」] [「幾何」] [「座標」] [0];'但我得到同樣的錯誤,它.var_dump不工作,因爲我發送的數據!通過ajax到服務器如何在ajax中使用var_dump動作?動作不會渲染任何視圖來使用var_dump!。我使用這個網站來檢查我的$ polygon結構來獲得coordinates.http://jsonviewer.stack.hu/你可以在這個網站上看到我的字符串結構!我對這個問題很困惑 – user1344766 2012-08-01 18:22:24

+0

我如何在動作中使用var_dump,因爲當我在我的動作代碼中使用時,我只能看到$ polygon的html格式,而我看不到座標進去! – user1344766 2012-08-01 18:39:33

+0

您的操作中的var_dump()輸出應該可以在Firebug或Chrome Developer Tools的調試控制檯中查看 – ernie 2012-08-01 19:53:10