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

205 lines
17 KiB
Markdown
Raw Normal View History

2019-03-31 11:00:21 +00:00
---
title: 住所から経度と緯度を取得する
author: kazu634
date: 2009-07-05
url: /2009/07/05/_1288/
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>