Bagaimana untuk menyahkod geoJson dengan betul yang mengandungi kedua-dua tatasusunan dan rentetan dalam php.ini? Masalah yang saya hadapi ialah membacanya dari pangkalan data dan menukarnya kembali kepada json, tatasusunan koordinat hilang.
Saya sedang membacanya daripada fail geoJson.json (sah) dan menyimpannya dalam pangkalan data mysql menggunakan: $jsondata = json_decode($srcfile, true); masih mempunyai tatasusunan koordinat yang lengkap.
Data asal kelihatan seperti ini: (kecuali terdapat 1000 koordinat)
{ "type": "Feature", "geometry": { "coordinates": [ [ [ [ -64.59727115377405, 60.30061384178721 ], [ -64.52477086139639, 60.29980770242815 ] ] ], [ [ [ -64.59727115377405, 60.30061384178721 ], [ -64.52477086139639, 60.29980770242815 ] ] ] ], "type": "MultiPolygon" }, "properties": { "prov_type": "province", "prov_code": "24", "prov_name_fr": "Qu\u00e9bec", "geo_point_2d": [ 53.3945173679, -71.7823138976 ], "prov_name_en": "Quebec", "year": "2019", "prov_area_code": "CAN" }
}
Apabila saya menariknya daripada pangkalan data dan menjalankan json_encode($data) padanya, output kelihatan seperti ini - semua koordinat tiada.
{ "type":"Feature", "geometry":{ "coordinates":, "type":"MultiPolygon" }, "properties":{ "prov_type":"province", "prov_code":"35", "prov_name_fr":"Ontario", "geo_point_2d":[50.4486575765,-86.0470011166], "prov_name_en":"Ontario", "year":"2019", "prov_area_code":"CAN" } }
atau
Kemas kini - Kaedah import ditambah
public function importGeodata() { // $srcfile = file_get_contents('/var/www/vhosts/mcgill.local/src/core/components/mcgill/data/provinces.json'); $srcfile = file_get_contents('/var/www/vhosts/mcgill.local/src/core/components/mcgill/data/us-states.json'); $jsondata = json_decode($srcfile, true); // echo '<pre>';print_r($jsondata); echo '</pre>'; foreach($jsondata['features'] as $feature) { // $search = $feature['properties']['prov_name_en']; // FOR CANADA $search = $feature['properties']['NAME']; // FOR USA if(!$updateObj = $this->modx->getObject('CatalogStates', array('name' => $search))) { echo '<br>Could not find object: ' . $search; }else{ echo '<br>Found object: '.$search; $updateObj->set('feature', json_encode(array($feature))); if(!$updateObj->save()) { echo '<br>Error saving object: ' . $search; } } } return; }
Dapatkan semula data:
public function getGeoJson() { $criteria = $this->modx->newQuery('CatalogStates'); $criteria->where([ 'id:IN' => array(1,2), ]); if($states = $this->modx->getCollection('CatalogStates',$criteria)) // returns an array of objects { foreach($states as $state) { $feature = $state->get('feature'); $coordinates = $feature['geometry']['coordinates']; print_r($coordinates); // this returns the coordinates array echo json_encode($coordinates); // this returns nothing!? } } }
Nah, peliknya, MODX mengacaukan saya... MODX menggunakan kurungan segi empat sama dua untuk menunjukkan kod yang perlu diproses atau disertakan - iaitu
[[nama coretan kod]] [[*serta_nama_ketulan]]
Tunggu
Apabila ia melihat struktur koordinat:
Ia pada asasnya menerangkannya sebagai:
Jadi penyelesaian sebenar ialah: