blog/content/post/2009/07/05/2009-07-05-00001190.md

205 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 住所から経度と緯度を取得する
author: kazu634
date: 2009-07-05
wordtwit_post_info:
- 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:4691;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}'
categories:
- Perl
---
<div class="section">
<p>
<a href="http://d.hatena.ne.jp/sirocco634/20090627/1246114139" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/sirocco634/20090627/1246114139', '前回');" target="_blank">前回</a>からの続きです。前回はHTMLの中でジオコーディングをしていましたが、今回は事前に経度と緯度を求めてHTMLを生成するように変更しようと考えました。これならHTMLを読み込んだときに、一気にアクセスが集中しないはずだから大丈夫…だと思う。
</p>
<h4>
作成してみたコード
</h4>
<pre class="syntax-highlight">
<span class="synComment"># === Libraries ===</span>
<span class="synStatement">use strict</span>;
<span class="synStatement">use warnings</span>;
<span class="synStatement">use </span>Data::Dumper;
<span class="synStatement">use </span>Encode;
<span class="synStatement">use utf8</span>;
<span class="synStatement">use </span>WebService::Simple;
<span class="synComment"># === Main part ===</span>
<span class="synPreProc">#!/usr/local/bin/perl</span>
<span class="synStatement">use strict</span>;
<span class="synStatement">use </span>Geography::AddressExtract::Japan;
<span class="synStatement">use </span>encoding <span class="synConstant">&#34;utf8&#34;</span>, <span class="synConstant">STDOUT </span>=&#62; <span class="synConstant">&#34;utf8&#34;</span>;
<span class="synComment"># binmode STDOUT, ':utf8';</span>
<span class="synStatement">foreach</span> <span class="synStatement">my</span> <span class="synIdentifier">$addr</span> (<span class="synIdentifier">&#60;DATA&#62;</span>) {
<span class="synStatement">my</span> <span class="synIdentifier">$t</span> = Geography::AddressExtract::Japan-&#62;extract(<span class="synIdentifier">$addr</span>);
<span class="synStatement">my</span> <span class="synIdentifier">$work</span> = <span class="synIdentifier">$t</span>-&#62;[<span class="synConstant"></span>]-&#62;{<span class="synConstant">&#34;city&#34;</span>} . <span class="synIdentifier">$t</span>-&#62;[<span class="synConstant"></span>]-&#62;{<span class="synConstant">&#34;aza&#34;</span>} . <span class="synIdentifier">$t</span>-&#62;[<span class="synConstant"></span>]-&#62;{<span class="synConstant">&#34;number&#34;</span>};
<span class="synStatement">print</span>(encode(<span class="synConstant">'utf8'</span>, <span class="synIdentifier">$work</span>), <span class="synConstant">&#34;</span><span class="synSpecial">\n</span><span class="synConstant">&#34;</span>);
<span class="synStatement">my</span> <span class="synIdentifier">$latlng</span> = <span class="synIdentifier">&#38;getLatLng</span>(<span class="synIdentifier">$work</span>);
<span class="synStatement">my</span> (<span class="synIdentifier">$lat</span>, <span class="synIdentifier">$lng</span>) = <span class="synStatement">split</span>(<span class="synStatement">/</span><span class="synConstant">,</span><span class="synStatement">/</span>, <span class="synIdentifier">$latlng</span>);
<span class="synStatement">print</span>(<span class="synConstant">&#34;Lat: </span><span class="synIdentifier">$lat</span><span class="synSpecial">\n</span><span class="synConstant">Lng: </span><span class="synIdentifier">$lng</span><span class="synSpecial">\n</span><span class="synConstant">&#34;</span>);
}
<span class="synStatement">sub</span><span class="synIdentifier"> getLatLng() </span>{
<span class="synStatement">my</span> <span class="synIdentifier">$arg</span> = <span class="synStatement">shift</span>();
<span class="synStatement">my</span> <span class="synIdentifier">$geocode</span> = WebService::Simple-&#62;<span class="synStatement">new</span>(
<span class="synConstant">base_url </span>=&#62; <span class="synConstant">&#34;http://maps.google.com/maps/geo&#34;</span>,
<span class="synConstant">param </span>=&#62; {
<span class="synConstant">output </span>=&#62; <span class="synConstant">'xml'</span>,
<span class="synConstant">hl </span>=&#62; <span class="synConstant">'ja'</span>,
<span class="synConstant">ie </span>=&#62; <span class="synConstant">'UTF8'</span>,
<span class="synConstant">oe </span>=&#62; <span class="synConstant">'UTF8'</span>,
}
);
<span class="synStatement">my</span> <span class="synIdentifier">$response</span> = <span class="synIdentifier">$geocode</span>-&#62;get( { <span class="synConstant">q </span>=&#62; <span class="synIdentifier">$arg</span>, } );
<span class="synStatement">if</span> (<span class="synIdentifier">$response</span>-&#62;parse_response()-&#62;{Response}-&#62;{Status}-&#62;{code} == <span class="synConstant">200</span>) {
<span class="synStatement">return</span> <span class="synIdentifier">$response</span>-&#62;parse_response()-&#62;{Response}-&#62;{Placemark}-&#62;{Point}-&#62;{coordinates};
} <span class="synStatement">else</span> {
<span class="synStatement">return</span> <span class="synConstant">'Not Found, Not Found'</span>;
}
}
<span class="synComment">__DATA__</span>
<span class="synComment">東京都豊島区巣鴨1-15-1宮田ビル2階</span>
<span class="synComment">東京都文京区本郷4-37-13文京センタ-地下1階</span>
<span class="synComment">東京都品川区大崎1-6-4新大崎勧業ビル1階</span>
<span class="synComment">東京都中野区中野5-61-2立見ビル2階</span>
<span class="synComment">東京都中野区中野5-67-5長谷部ビル2階</span>
<span class="synComment">東京都中央区銀座2-7-18藤田ビル地下1階</span>
<span class="synComment">東京都中央区銀座2-5-5共同ビル西銀座1階</span>
<span class="synComment">東京都中央区銀座2-8-15共同ビル銀座通り2階</span>
<span class="synComment">東京都中央区銀座2-11-6竹田ビル1階</span>
<span class="synComment">東京都中央区銀座3-3-11稲垣ビル2階</span>
<span class="synComment">東京都中央区銀座6-12-10旭ビル1階</span>
<span class="synComment">東京都中央区銀座5-15-1南海東京ビル2階</span>
<span class="synComment">東京都中央区日本橋2-3-6日本土地ビル地下1階</span>
<span class="synComment">東京都中央区日本橋本町1-1立石ビル1階</span>
<span class="synComment">東京都中央区八重洲1-6-17八重洲勧業ビル1階</span>
<span class="synComment">東京都中央区八重洲1-7-4矢満登ビル1階</span>
<span class="synComment">東京都大田区大森北1-1-10朝日生命ビル地下1階</span>
<span class="synComment">東京都大田区西蒲田8-1-7グランタウンビル2階</span>
<span class="synComment">東京都台東区上野6-1-1小西本店ビル2階</span>
<span class="synComment">東京都台東区上野4-10-7タツミビル地下1階</span>
<span class="synComment">東京都台東区上野2-13-13キクヤビル地下1階</span>
<span class="synComment">東京都台東区谷中7-20-6谷中ホ-ムズ1階</span>
<span class="synComment">東京都千代田区五番町4番地2東プレビル1階</span>
<span class="synComment">東京都千代田区富士見2-2-6今井ビル2階</span>
<span class="synComment">東京都千代田区三崎町3-6-13寺本ビル1階</span>
<span class="synComment">東京都千代田区内神田2-9-9神田ビル1階</span>
<span class="synComment">東京都千代田区内神田3-21-8神田駅北口合同ビル2階</span>
<span class="synComment">東京都千代田区鍛冶町2-1-4東和ビル2階</span>
<span class="synComment">東京都千代田区有楽町1-6-1第2日比谷ビル2階</span>
<span class="synComment">東京都千代田区外神田1-16-10ニュー秋葉原センタービル地下1階</span>
<span class="synComment">東京都千代田区外神田1-11-6小暮ビル2階</span>
<span class="synComment">東京都千代田区神田佐久間町1-18信交ビル2階</span>
<span class="synComment">東京都杉並区阿佐ヶ谷南2-14-10倉橋ビル地下1階</span>
<span class="synComment">東京都杉並区高円寺北2-4-4一栄ビル2階</span>
<span class="synComment">東京都新宿区西新宿1-24-1エステック情報ビル地下1階</span>
<span class="synComment">東京都新宿区西新宿1-17-1日本生命西新宿ビル2階</span>
<span class="synComment">東京都新宿区西新宿1-5-11三葉ビル地下1階</span>
<span class="synComment">東京都新宿区西新宿7-23-2西鉄イン1階</span>
<span class="synComment">東京都新宿区新宿2-19-1ビッグスビル地下2階</span>
<span class="synComment">東京都新宿区新宿3-4-1東新宿ビル地下2階</span>
<span class="synComment">東京都新宿区市谷田町1-3片倉ビル2階</span>
<span class="synComment">東京都新宿区四谷1-3-22</span>
<span class="synComment">東京都新宿区歌舞伎町1-3-5相模ビル1階</span>
<span class="synComment">東京都新宿区歌舞伎町1-14-4川新ビル2階</span>
<span class="synComment">東京都新宿区歌舞伎町1-26-6灯ビル2階</span>
<span class="synComment">東京都新宿区西新宿7-1-1みやこビル2階</span>
<span class="synComment">東京都新宿区西新宿7-9-7新宿ニッカビル1階</span>
<span class="synComment">東京都新宿区百人町1-18-8大久保角ビル2階</span>
<span class="synComment">東京都新宿区百人町2-11-25新戸山ビル2階</span>
<span class="synComment">東京都新宿区高田馬場2-18-6柳屋ビル1階</span>
<span class="synComment">東京都新宿区高田馬場2-14-2原田ビル地下1階</span>
<span class="synComment">東京都新宿区高田馬場1-34-8大輝ビル地下1階</span>
<span class="synComment">東京都新宿区高田馬場1-34-12竹内ビル1階</span>
<span class="synComment">東京都渋谷区代々木1-30-6第一U・Iビル1階</span>
<span class="synComment">東京都渋谷区千駄ヶ谷1-30-8ダヴィンチ千駄ヶ谷1階</span>
<span class="synComment">東京都渋谷区桜丘町15-15東京第二ビル2階</span>
<span class="synComment">東京都渋谷区渋谷2-17-5シオギ渋谷ビル2階</span>
<span class="synComment">東京都渋谷区宇田川町36-2アビル2階</span>
<span class="synComment">東京都渋谷区渋谷1-16-14渋谷地下鉄ビル2階</span>
<span class="synComment">東京都荒川区西日暮里5-23-6ホワイトハウス2階</span>
<span class="synComment">東京都荒川区東日暮里5-51-11静屋ビル2階</span>
<span class="synComment">東京都港区赤坂3-10-2赤坂コマースビル2階</span>
<span class="synComment">東京都港区新橋4-10-2ホテルサンルート新橋2階</span>
<span class="synComment">東京都港区新橋1-17-2光和ビル地下1階</span>
<span class="synComment">東京都港区芝5-34-7田町センタービル1階</span>
<span class="synComment">東京都港区芝大門2-3-1常泉ビル2階</span>
<span class="synComment">東京都港区港南2-3-29シ-ゲンビル1階</span>
<span class="synComment">東京都港区高輪3-25-22カネオビル1階</span>
<span class="synComment">東京都江東区亀戸2-20-7百万両ビル2階</span>
<span class="synComment">東京都葛飾区東金町1-42金子ビル1階</span>
<span class="synComment">東京都立川市柴崎町3-4-14ベルトリーサビル2階</span>
<span class="synComment">東京都立川市曙町2-13-10賀屋登ビル2階</span>
<span class="synComment">東京都立川市曙町2-9-1菊屋川口ビル2階</span>
<span class="synComment">東京都武蔵野市中町1-6-7朝日生命ビル1階及び2階</span>
<span class="synComment">神奈川県横浜市中区元町1-18石川ビル1階</span>
<span class="synComment">神奈川県横浜市中区港町2-6横浜関内ビル2階</span>
<span class="synComment">神奈川県横浜市中区伊勢佐木町2-66伊勢佐木町満利屋ビル2階</span>
<span class="synComment">神奈川県横浜市鶴見区鶴見中央1-3-3クレインビル2階</span>
<span class="synComment">神奈川県鎌倉市小町1-6-19アラビル2階</span>
<span class="synComment">神奈川県鎌倉市大船1-7-1サザンウインズ大船ビル2階</span>
<span class="synComment">神奈川県川崎市川崎区駅前本町3-3ムラタビル2階</span>
<span class="synComment">神奈川県川崎市川崎区砂子1-1-10夏原ビル2階</span>
<span class="synComment">神奈川県足柄下郡箱根町湯本白石下706-35箱根登山鉄道湯本駅前ビル2階</span>
<span class="synComment">埼玉県川越市脇田町103川越マイン3階</span>
<span class="synComment">千葉県市川市八幡2-6-15川長ビル地下1階</span>
</pre>
<h4>
実行結果
</h4>
<pre class="syntax-highlight">
~/working/tmp_perl/projects/scrape/starbucks on simoom634 <span class="synStatement">[</span><span class="synConstant">599</span><span class="synStatement">]</span> $: perl ./address.pl
東京都豊島区巣鴨<span class="synConstant">1-15-1</span>
Lat: <span class="synConstant">139</span>.<span class="synConstant">7398948</span>
Lng: <span class="synConstant">35</span>.<span class="synConstant">7331675</span>
東京都文京区本郷<span class="synConstant">4-37-13</span>
Lat: <span class="synConstant">139</span>.<span class="synConstant">7599332</span>
Lng: <span class="synConstant">35</span>.<span class="synConstant">7080096</span>
東京都品川区大崎<span class="synConstant">1-6-4</span>
Lat: <span class="synConstant">139</span>.<span class="synConstant">7293858</span>
Lng: <span class="synConstant">35</span>.<span class="synConstant">6197692</span>
東京都中野区中野<span class="synConstant">5-61-2</span>
Lat: <span class="synConstant">139</span>.<span class="synConstant">6663186</span>
Lng: <span class="synConstant">35</span>.<span class="synConstant">7067903</span>
東京都中野区中野<span class="synConstant">5-67-5</span>
Lat: <span class="synConstant">139</span>.<span class="synConstant">6653381</span>
Lng: <span class="synConstant">35</span>.<span class="synConstant">7081818</span>
東京都中央区銀座<span class="synConstant">2-7-18</span>
Lat: <span class="synConstant">139</span>.<span class="synConstant">7675810</span>
Lng: <span class="synConstant">35</span>.<span class="synConstant">6733528</span>
東京都中央区銀座<span class="synConstant">2-5-5</span>
Lat: <span class="synConstant">139</span>.<span class="synConstant">7669699</span>
Lng: <span class="synConstant">35</span>.<span class="synConstant">6739055</span>
東京都中央区銀座<span class="synConstant">2-8-15</span>
Lat: <span class="synConstant">139</span>.<span class="synConstant">7676699</span>
Lng: <span class="synConstant">35</span>.<span class="synConstant">6727390</span>
東京都中央区銀座<span class="synConstant">2-11-6</span>
Lat: <span class="synConstant">139</span>.<span class="synConstant">7690560</span>
Lng: <span class="synConstant">35</span>.<span class="synConstant">6723169</span>
東京都中央区銀座<span class="synConstant">3-3-11</span>
Lat: <span class="synConstant">139</span>.<span class="synConstant">7652145</span>
Lng: <span class="synConstant">35</span>.<span class="synConstant">6727445</span>
東京都中央区銀座<span class="synConstant">6-12-10</span>
Lat: <span class="synConstant">139</span>.<span class="synConstant">7642480</span>
Lng: <span class="synConstant">35</span>.<span class="synConstant">6688283</span>
</pre>
<h4>
「ルノアール」に関連する最近のエントリ
</h4>
<ul>
<li>
<a href="http://d.hatena.ne.jp/sirocco634/20090627/1246114139" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/sirocco634/20090627/1246114139', ' GoogleMapsで喫茶ルアールの店舗をマッピング &#8211; 武蔵の日記');" target="_blank"> GoogleMapsで喫茶ルアールの店舗をマッピング &#8211; 武蔵の日記</a>
</li>
<li>
<a href="http://d.hatena.ne.jp/sirocco634/20090622/1245679241" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/sirocco634/20090622/1245679241', ' YAMLの内容を順番に取得したいな &#8211; 武蔵の日記');" target="_blank"> YAMLの内容を順番に取得したいな &#8211; 武蔵の日記</a>
</li>
<li>
<a href="http://d.hatena.ne.jp/sirocco634/20090621/1245573790" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/sirocco634/20090621/1245573790', ' 銀座ルノアールの店舗情報を取得 &#8211; 武蔵の日記');" target="_blank"> 銀座ルノアールの店舗情報を取得 &#8211; 武蔵の日記</a>
</li>
</ul>
</div>