2

この素晴らしい投稿https://opensas.wordpress.com/2013/06/30/using-openrefine-to-geocode-your-data-using-で提案されているように、Nominatim API へのリクエストで住所をジオコーディングするために Google Refine を使用しています。 google-and-openstreetmap-api/ .

すべて正常に動作します: ここに 2 つのサンプルがあります ...

http://open.mapquestapi.com/nominatim/v1/search.php?format=json&q=Via%20Pietro%20Paleocapa%2073,Alzano%20Lombardo,Italia

生産する

[{"place_id":"55017260","licence":"Data \u00a9 OpenStreetMap contributors, ODbL 1.0. http:\/\/www.openstreetmap.org\/copyright","osm_type":"way","osm_id":"22565087","boundingbox":["45.7324335","45.736092","9.7222512","9.7235157"],"lat":"45.7343899","lon":"9.7231855","display_name":"Via Pietro Paleocapa, Alzano Lombardo, BG, Lombardy, 24027, Italy","class":"highway","type":"unclassified","importance":0.6}]

http://open.mapquestapi.com/nominatim/v1/search.php?format=json&q=Via%20Cernaia%2020,%20Torino%20,%20Italia

生産する

[{"place_id":"24085209","licence":"Data \u00a9 OpenStreetMap contributors, ODbL 1.0. http:\/\/www.openstreetmap.org\/copyright","osm_type":"node","osm_id":"2334729647","boundingbox":["45.0715728","45.0715728","7.6742348","7.6742348"],"lat":"45.0715728","lon":"7.6742348","display_name":"20, Via Cernaia, Quadrilatero Romano, Circoscrizione 1, Turin, TO, Piemont, 10122, Italy","class":"place","type":"house","importance":0.201}]

違いは、最初の応答が "osm_type":"way" タイプで、2 番目の応答が "osm_type":"node" タイプであることです。

"osm_type":"node" に関する応答のみに関心があります。これらの応答については、緯度と経度の値を抽出したいと考えています。

Google RefineでGRELを使用してそれらを抽出する方法がわかりません.....何か提案はありますか?

役立つ場合は、XML で応答を取得することもできます...ここでは、要求です

http://open.mapquestapi.com/nominatim/v1/search.php?format=json&q=Via%20Pietro%20Paleocapa%2073,Alzano%20Lombardo,Italia&format=xml

http://open.mapquestapi.com/nominatim/v1/search.php?format=json&q=Via%20Cernaia%2020,%20Torino%20,%20Italia&format=xml
4

2 に答える 2

1

Owen の式を少し調整すると、冗長性の一部を取り除くことができます。

with(value.parseJson()[0], place, if(place.osm_type=='node',place.lat,''))

ここでは大きな節約にはなりませんが、式が長くなり、複雑になる時期を知るには良いテクニックです。制御関数はwith、後で使用できる変数に値を割り当てます。

于 2015-05-19T18:54:10.533 に答える