Googleマップジオコーダが正しいジオロケーションを返していない

私はジオコーダーを使用して正しいlat/lang座標を返すのに問題があります。

controller アドレスは正しい地理的位置を返していますが、アドレスにøという文字を使用しているときは、私は奇妙な座標を得ています。

ここに私のコードです:

$controller = "Skovveien+7+0257+oslo+norway";
// base = Strømmen Storsenter, Støperiveien 5, 2010 Strømmen, Norway
$t1 = htmlentities("Strømmen+Storsenter+2010+strømmen+norway", ENT_QUOTES, 'UTF-8');
$t2 = htmlentities("Støperiveien+5+2010+strømmen+norway", ENT_QUOTES, 'UTF-8');


$adr = htmlentities($controller, ENT_QUOTES, 'UTF-8');
$res = getGeoLocation($adr);
echo '

Controll
Lat: '.$res['lat'].' Lng: '.$res['lng']. '

'; $adr = htmlentities($t1, ENT_QUOTES, 'UTF-8'); $res = getGeoLocation($adr); echo '

Shopping mall
Lat: '.$res['lat'].' Lng: '.$res['lng']. '

'; $adr = htmlentities($t2, ENT_QUOTES, 'UTF-8'); $res = getGeoLocation($adr); echo '

Adresse + post code
Lat: '.$res['lat'].' Lng: '.$res['lng']. '

'; public function getGeoLocation($adr) { //Decode special chars $adr = html_entity_decode($adr, ENT_QUOTES, 'UTF-8'); $url = "http://maps.google.com/maps/api/geocode/json?address=$adr&sensor=false"; $jsonData = file_get_contents($url); $geocode = json_decode($jsonData); if($geocode->status == 'OK') { $geocode = $geocode->results[0]; $res['lat'] = $geocode->geometry->location->lat; $res['lng'] = $geocode->geometry->location->lng; return $res; } else { return false; } }

関数内で htmlentity を使用して最初に htmlentity_decode を使用するのはちょっと無意味なようです。しかし、そうでなければ、Googleは ZERO_RESULT を返します。

誰も国際的な文字で通り名の緯度/緯度のアドレスを取得するための正しいコードで私を助けることができますか?

0
1.完了。 vhangeはありません。私も html_entity_decode を削除しました。変更はありません。 2.それはUTF-8です。しかし、 "実生活の中で"アドレスはDBから取得され、テーブルは DEFAULT CHARSET = utf8 COLLATE = utf8_danish_ci にあります。
追加された 著者 Steven,
1.すべての htmlentities()を取り除く。 2.あなたのPHPファイルはどのような文字エンコーディングですか?それがUTF-8なら、それはうまくいくはずです - 私は最初にそれを試みます
追加された 著者 Pekka 웃,

1 答え

あなたのPHPファイルがUTF-8でエンコードされている場合、この要約された例はうまくいくはずです:

$adr = urlencode("Strømmen Storsenter, Støperiveien 5, 2010 Strømmen, Norway");
$url = "http://maps.google.com/maps/api/geocode/json?address=$adr&sensor=false";
$jsonData   = file_get_contents($url);

Edit: Weirdly, I get an APPROXIMATE address when I use

StrømmenStorsenter、Støperiveien5、2010Strømmen、ノルウェー

住所を使用する場合は ROOFTOP を使用します:

Støperiveien5、2010ノルウェーStrømmen

地図上に表示されているように、Googleでは「StrømmenStorsenter」という名前の場所が特定の住所に存在することを完全に認識しています。

結局のところキャラクターセットのようには見えませんが、Googleが場所の名前でリクエストをどのように解析するかは奇妙です。

1
追加された
はい、そうでした。私はこれをさらに調査しなければならないでしょう。ありがとう。
追加された 著者 Steven,
ただ1つの "キャッチ"。 ø のようなすべてのæ、ø、å文字をデータベースに保存しています。文字エンコーディングは***の痛みだったので、私はこれを行いました。だから、 urlencode( "Strø mmen ... はうまくいかないので、逆にø をデコードする必要があると思います。
追加された 著者 Steven,
それは第2段階になります。それが壊れていない場合、それを修正しないでください:p
追加された 著者 Steven,
PS。これは私が現在テストしていることです。住所にショッピングモール名を使用するときに地理的位置に違いがあるかどうかを確認することです。
追加された 著者 Steven,
@スティーブンええ、問題ありません。しかし、あなたがそれを見なかった場合に私のアップデートをチェックしてください
追加された 著者 Pekka 웃,
@スティーブンええ、あなたはそれらを解読する必要があります。または、HTMLエンコードを行わずにエンコードの問題を修正してください - 厄介なことに、私は知っていますが、これは理想的な方法です:)
追加された 著者 Pekka 웃,
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com