blog/content/post/1970/01/01/1970-01-01-00000056.md

210 lines
21 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: 1969-12-31
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:4747;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}'
categories:
- Perl
---
<div class="section">
<p>
2点間の緯度と経度がわかれば距離が計算できるので、それを用いて最寄りのルアールを検索するスクリプトを作成してみましたすでにルアールの緯度と経度のデータを取得済みであることが前提になっています
</p>
<h4>
Perlスクリプト
</h4>
<pre class="syntax-highlight">
<span class="synComment"># === Libraries ===</span>
<span class="synStatement">use strict</span>;
<span class="synStatement">use warnings</span>;
<span class="synComment"># 警告用のモジュール</span>
<span class="synStatement">use </span>Data::Dumper;
<span class="synComment"># sayを使う</span>
<span class="synStatement">use </span>Perl6::Say;
<span class="synComment"># ラジアンに変換するためのモジュール</span>
<span class="synStatement">use </span>Math::Trig;
<span class="synComment"># ウェブサービスにアクセスするためのモジュール</span>
<span class="synStatement">use </span>WebService::Simple;
<span class="synStatement">use </span>XML::Simple;
<span class="synStatement">use </span>YAML::Syck;
<span class="synComment"># DBモジュール</span>
<span class="synStatement">use </span>DBI;
<span class="synComment"># If you make a CGI,</span>
<span class="synStatement">use </span>CGI::Carp;
<span class="synComment"># === Main part ===</span>
<span class="synComment"># 引数の取得</span>
<span class="synStatement">my</span> <span class="synIdentifier">$address</span> = <span class="synStatement">shift</span>() || <span class="synConstant">&#34;戸塚駅&#34;</span>;
<span class="synComment"># ウェブサービスにアクセスする</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="synComment"># レスポンスの取得</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">$address</span>, } );
<span class="synComment"># 緯度と経度の取得</span>
<span class="synStatement">my</span> ( <span class="synIdentifier">$lng</span>, <span class="synIdentifier">$lat</span> ) = <span class="synStatement">split</span>( <span class="synStatement">/</span><span class="synConstant">,</span><span class="synStatement">/</span>,
XMLin( <span class="synIdentifier">$response</span>-&#62;content )-&#62;{Response}-&#62;{Placemark}-&#62;{Point}
-&#62;{coordinates} );
<span class="synComment"># データベースへの接続</span>
<span class="synStatement">my</span> <span class="synIdentifier">$dbh</span> =
DBI-&#62;<span class="synStatement">connect</span>( <span class="synConstant">'dbi:mysql:dbname=sample'</span>, <span class="synConstant">'root'</span>, <span class="synConstant">'musashi'</span>,
{ <span class="synConstant">RaiseError </span>=&#62; <span class="synConstant">1</span>, <span class="synConstant">AutoCommit </span>=&#62; <span class="synConstant"></span>} );
<span class="synComment"># ステートメントハンドラの作成</span>
<span class="synStatement">my</span> <span class="synIdentifier">$sth</span> = <span class="synIdentifier">$dbh</span>-&#62;prepare(<span class="synConstant">&#34;SELECT shopname, lat, lng FROM renoir;&#34;</span>);
<span class="synComment"># ステートメントハンドラの実行</span>
<span class="synComment"># もしプレースホルダを用いていれば、引数を指定する</span>
<span class="synComment"># 例: $sth-&#62;execute(&#34;$query%&#34;);</span>
<span class="synIdentifier">$sth</span>-&#62;execute();
<span class="synComment"># データを格納するハッシュを宣言</span>
<span class="synStatement">my</span> <span class="synIdentifier">%distance</span>;
<span class="synComment"># do something</span>
<span class="synStatement">while</span> ( <span class="synStatement">my</span> <span class="synIdentifier">@row</span> = <span class="synIdentifier">$sth</span>-&#62;fetchrow_array ) {
<span class="synComment"># say &#34;$row[0]: processing...&#34;;</span>
<span class="synIdentifier">$distance</span>{<span class="synIdentifier">$row</span>[<span class="synConstant"></span>]} = calc_distance(<span class="synIdentifier">$lat</span>, <span class="synIdentifier">$lng</span>, <span class="synIdentifier">$row</span>[<span class="synConstant">1</span>], <span class="synIdentifier">$row</span>[<span class="synConstant">2</span>]);
}
<span class="synComment"># ステートメントハンドラの解放</span>
<span class="synIdentifier">$sth</span>-&#62;finish;
<span class="synComment"># データベースハンドラの解放</span>
<span class="synIdentifier">$dbh</span>-&#62;disconnect;
<span class="synStatement">foreach</span> <span class="synStatement">my</span> <span class="synIdentifier">$x</span> (<span class="synStatement">sort</span> { <span class="synIdentifier">$distance</span>{<span class="synIdentifier">$a</span>} &#60;=&#62; <span class="synIdentifier">$distance</span>{<span class="synIdentifier">$b</span>} } <span class="synStatement">keys</span> <span class="synIdentifier">%distance</span>) {
say <span class="synConstant">&#34;</span><span class="synIdentifier">$x</span><span class="synConstant">: </span><span class="synIdentifier">$distance</span><span class="synConstant">{</span><span class="synIdentifier">$x</span><span class="synConstant">}&#34;</span>;
}
<span class="synComment"># === Sub routines ===</span>
<span class="synStatement">sub</span><span class="synIdentifier"> calc_distance </span>{
<span class="synStatement">my</span> ( <span class="synIdentifier">$src_lng</span>, <span class="synIdentifier">$src_lat</span>, <span class="synIdentifier">$target_lng</span>, <span class="synIdentifier">$target_lat</span> ) = <span class="synIdentifier">@_</span>;
<span class="synIdentifier">$src_lng</span> = deg2rad(<span class="synIdentifier">$src_lng</span>);
<span class="synIdentifier">$src_lat</span> = deg2rad(<span class="synIdentifier">$src_lat</span>);
<span class="synIdentifier">$target_lng</span> = deg2rad(<span class="synIdentifier">$target_lng</span>);
<span class="synIdentifier">$target_lat</span> = deg2rad(<span class="synIdentifier">$target_lat</span>);
<span class="synStatement">my</span> <span class="synIdentifier">$lat</span> = <span class="synStatement">abs</span>(<span class="synIdentifier">$src_lat</span> - <span class="synIdentifier">$target_lat</span>);
<span class="synStatement">my</span> <span class="synIdentifier">$lng</span> = <span class="synStatement">abs</span>(<span class="synIdentifier">$src_lng</span> - <span class="synIdentifier">$target_lng</span>);
<span class="synStatement">my</span> <span class="synIdentifier">$disp_lng</span> = <span class="synConstant">6378137</span> * <span class="synIdentifier">$lng</span> * <span class="synStatement">cos</span>(<span class="synIdentifier">$src_lat</span>);
<span class="synStatement">my</span> <span class="synIdentifier">$disp_lat</span> = <span class="synConstant">6378137</span> * <span class="synIdentifier">$lat</span>;
<span class="synStatement">return</span> (<span class="synStatement">sqrt</span>((<span class="synIdentifier">$disp_lng</span> ** <span class="synConstant">2</span>) + (<span class="synIdentifier">$disp_lat</span> ** <span class="synConstant">2</span>))) / <span class="synConstant">1000</span>;
}
</pre>
<h4>
実行結果
</h4>
<pre class="syntax-highlight">
kazu634@kazu634-desktop% perl nearby.pl 東京駅 ~/public_html/cgi-bin <span class="synStatement">[</span><span class="synConstant">3685</span><span class="synStatement">]</span>
喫茶室ルノアール東京駅八重洲北口店: <span class="synConstant"></span>.<span class="synConstant">435315984950852</span>
CafeRenoirニュー八重洲北口店: <span class="synConstant"></span>.<span class="synConstant">467543208698977</span>
喫茶室ルノアール西銀座店: <span class="synConstant"></span>.<span class="synConstant">642982000229979</span>
喫茶室ルノアール銀座2丁目店: <span class="synConstant"></span>.<span class="synConstant">702398928767422</span>
喫茶室ルノアール日本橋高島屋前店: <span class="synConstant"></span>.<span class="synConstant">732463961865684</span>
喫茶室ルノアール銀座松屋通り店: <span class="synConstant"></span>.<span class="synConstant">740393397722928</span>
喫茶室ルノアールニュー銀座店: <span class="synConstant"></span>.<span class="synConstant">75542502659804</span>
喫茶室ルノアール銀座昭和通り店: <span class="synConstant"></span>.<span class="synConstant">838414132025791</span>
喫茶室ルノアール神田西口店: <span class="synConstant"></span>.<span class="synConstant">869663761208432</span>
CafeRenoir日比谷店: <span class="synConstant"></span>.<span class="synConstant">897535877486945</span>
喫茶室ルノアール神田南口駅前店: <span class="synConstant">1</span>.<span class="synConstant">01098051357989</span>
喫茶室ルノアール銀座6丁目店: <span class="synConstant">1</span>.<span class="synConstant">08625003221537</span>
喫茶室ルノアール神田北口駅前店: <span class="synConstant">1</span>.<span class="synConstant">09072059057988</span>
喫茶室ルノアール歌舞伎座前店: <span class="synConstant">1</span>.<span class="synConstant">10796217223668</span>
CafeRenoir日本橋三越前店: <span class="synConstant">1</span>.<span class="synConstant">18155794316319</span>
喫茶室ルノアール新橋第一ホテル横店: <span class="synConstant">1</span>.<span class="synConstant">48410756949907</span>
喫茶室ルノアールニュー秋葉原店: <span class="synConstant">1</span>.<span class="synConstant">54212153453434</span>
喫茶室ルノアール秋葉原店: <span class="synConstant">1</span>.<span class="synConstant">63742738214139</span>
CafeRenoir秋葉原昭和通り口店: <span class="synConstant">1</span>.<span class="synConstant">69909449355394</span>
喫茶室ルノアール新橋サンルート店: <span class="synConstant">1</span>.<span class="synConstant">78354029735583</span>
喫茶室ルノアール本郷三丁目店: <span class="synConstant">2</span>.<span class="synConstant">36420940618699</span>
喫茶室ルノアール水道橋西口店: <span class="synConstant">2</span>.<span class="synConstant">36967239112471</span>
喫茶室ルノアール芝大門店: <span class="synConstant">2</span>.<span class="synConstant">4978765111691</span>
CafeRenoir御徒町春日通り店: <span class="synConstant">2</span>.<span class="synConstant">51018524532367</span>
CafeRenoir上野公園前店: <span class="synConstant">2</span>.<span class="synConstant">55816645974866</span>
喫茶室ルノアール上野しのばず口店: <span class="synConstant">2</span>.<span class="synConstant">67644546004129</span>
喫茶室ルノアール飯田橋西口店: <span class="synConstant">2</span>.<span class="synConstant">77507641963975</span>
喫茶室ルノアール赤坂見附店: <span class="synConstant">3</span>.<span class="synConstant">30276167166024</span>
喫茶室ルノアール市ヶ谷駅前店: <span class="synConstant">3</span>.<span class="synConstant">42102550732542</span>
喫茶室ルノアール市ヶ谷外堀通り店: <span class="synConstant">3</span>.<span class="synConstant">53709343480954</span>
喫茶室ルノアール田町三田口駅前店: <span class="synConstant">3</span>.<span class="synConstant">66202973989548</span>
喫茶室ルノアール日暮里谷中店: <span class="synConstant">3</span>.<span class="synConstant">94246072598764</span>
喫茶室ルノアール日暮里東口店: <span class="synConstant">4</span>.<span class="synConstant">03695060915453</span>
喫茶室ルノアール四谷店: <span class="synConstant">4</span>.<span class="synConstant">12610587079289</span>
喫茶室ルノアール西日暮里第一店: <span class="synConstant">4</span>.<span class="synConstant">31473177312909</span>
喫茶室ルノアール品川港南口店: <span class="synConstant">5</span>.<span class="synConstant">13907013778664</span>
喫茶室ルノアール巣鴨駅前店: <span class="synConstant">5</span>.<span class="synConstant">27893044081758</span>
喫茶室ルノアール品川高輪口店: <span class="synConstant">5</span>.<span class="synConstant">35139941874248</span>
喫茶室ルノアール千駄ヶ谷駅前店: <span class="synConstant">6</span>.<span class="synConstant">23538684551861</span>
喫茶室ルノアール新宿<span class="synConstant">3</span>丁目ビッグスビル店: <span class="synConstant">6</span>.<span class="synConstant">5453489357914</span>
喫茶室ルノアール大崎ニューシティ店: <span class="synConstant">6</span>.<span class="synConstant">63945918250293</span>
喫茶室ルノアール亀戸駅前店: <span class="synConstant">6</span>.<span class="synConstant">74062841206796</span>
喫茶室ルノアールニュー新宿<span class="synConstant">3</span>丁目店: <span class="synConstant">6</span>.<span class="synConstant">77697915649173</span>
喫茶室ルノアール新宿区役所横店: <span class="synConstant">7</span>.<span class="synConstant">05072429513845</span>
喫茶室ルノアール高田馬場早稲田通り店: <span class="synConstant">7</span>.<span class="synConstant">06968951136699</span>
喫茶室ルノアール渋谷シオノギビル店: <span class="synConstant">7</span>.<span class="synConstant">1240838306852</span>
喫茶室ルノアール代々木西口駅前店: <span class="synConstant">7</span>.<span class="synConstant">13909675554724</span>
喫茶室ルノアール新宿歌舞伎町店: <span class="synConstant">7</span>.<span class="synConstant">22403783727057</span>
喫茶室ルノアール池袋東口店: <span class="synConstant">7</span>.<span class="synConstant">23780226955619</span>
喫茶室ルノアール渋谷宮下公園店: <span class="synConstant">7</span>.<span class="synConstant">26931877899747</span>
喫茶室ルノアール池袋パルコ横店: <span class="synConstant">7</span>.<span class="synConstant">3270604674247</span>
喫茶室ルノアールニュー高田馬場店: <span class="synConstant">7</span>.<span class="synConstant">34290026009566</span>
喫茶室ルノアール高田馬場第一店: <span class="synConstant">7</span>.<span class="synConstant">36479141976654</span>
喫茶室ルノアール高田馬場ビッグボックス横店: <span class="synConstant">7</span>.<span class="synConstant">36904123056024</span>
喫茶室ルノアール西武新宿駅前店: <span class="synConstant">7</span>.<span class="synConstant">40005424996067</span>
喫茶室ルノアール渋谷南口店: <span class="synConstant">7</span>.<span class="synConstant">49746178714419</span>
喫茶室ルノアール新宿大ガード店: <span class="synConstant">7</span>.<span class="synConstant">51323188722339</span>
喫茶室ルノアール新宿西口駅前店: <span class="synConstant">7</span>.<span class="synConstant">58150054032627</span>
喫茶室ルノアール新宿ハルク横店: <span class="synConstant">7</span>.<span class="synConstant">62020272070804</span>
喫茶室ルノアール新宿小滝橋通り店: <span class="synConstant">7</span>.<span class="synConstant">64519920897494</span>
喫茶室ルノアール新大久保駅前店: <span class="synConstant">7</span>.<span class="synConstant">65229083944699</span>
喫茶室ルノアール渋谷東急ハンズ前店: <span class="synConstant">7</span>.<span class="synConstant">84131966635012</span>
喫茶室ルノアール新宿西口エステックビル店: <span class="synConstant">7</span>.<span class="synConstant">85758639750782</span>
喫茶室ルノアール大久保店: <span class="synConstant">8</span>.<span class="synConstant">04062475943237</span>
喫茶室ルノアール西新宿西鉄イン店: <span class="synConstant">8</span>.<span class="synConstant">05412323485957</span>
喫茶室ルノアール大森駅前店: <span class="synConstant">8</span>.<span class="synConstant">85907949468314</span>
喫茶室ルノアール中野北口店: <span class="synConstant">11</span>.<span class="synConstant">3137961270589</span>
喫茶室ルノアール中野サンプラザ前店: <span class="synConstant">11</span>.<span class="synConstant">4439040084503</span>
喫茶室ルノアール蒲田西口店: <span class="synConstant">11</span>.<span class="synConstant">6915802640973</span>
喫茶室ルノアール高円寺北口駅前店: <span class="synConstant">13</span>.<span class="synConstant">0266500378475</span>
喫茶室ルノアール金町店: <span class="synConstant">13</span>.<span class="synConstant">9275885380925</span>
喫茶室ルノアール京急川崎駅前店: <span class="synConstant">14</span>.<span class="synConstant">6570012552232</span>
喫茶室ルノアール川崎銀柳街店: <span class="synConstant">14</span>.<span class="synConstant">8850590342952</span>
喫茶室ルノアール鶴見駅前店: <span class="synConstant">17</span>.<span class="synConstant">7002234767128</span>
喫茶室ルノアール本八幡店: <span class="synConstant">18</span>.<span class="synConstant">3395170961463</span>
喫茶室ルノアール三鷹北口駅前店: <span class="synConstant">22</span>.<span class="synConstant">9806502621709</span>
喫茶室ルノアール横浜元町店: <span class="synConstant">24</span>.<span class="synConstant">1345490376862</span>
喫茶室ルノアール横浜関内駅前店: <span class="synConstant">24</span>.<span class="synConstant">7777407408182</span>
喫茶室ルノアール横浜伊勢佐木町店: <span class="synConstant">25</span>.<span class="synConstant">1164169878391</span>
喫茶室ルノアール川越店: <span class="synConstant">36</span>.<span class="synConstant">7869920377336</span>
喫茶室ルノアール大船店: <span class="synConstant">38</span>.<span class="synConstant">0985342051618</span>
喫茶室ルノアール鎌倉駅前店: <span class="synConstant">38</span>.<span class="synConstant">9676916856126</span>
喫茶室ルノアール立川店: <span class="synConstant">39</span>.<span class="synConstant">0582655451701</span>
喫茶室ルノアール立川駅前店: <span class="synConstant">39</span>.<span class="synConstant">0967111720432</span>
喫茶室ルノアール立川南口店: <span class="synConstant">39</span>.<span class="synConstant">1415652734928</span>
喫茶室ルノアール箱根湯本駅前店: <span class="synConstant">83</span>.<span class="synConstant">2994705463744</span>
喫茶室ルノアール阿佐ヶ谷駅前店: <span class="synConstant">15851</span>.<span class="synConstant">4253911619</span>
</pre>
<h4>
「ルノアール」に関連する最近のエントリ
</h4>
<ul>
<li>
<a href="http://d.hatena.ne.jp/sirocco634/20090804/1249395277" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/sirocco634/20090804/1249395277', ' 2地点間の緯度と経度から直線距離を計算する &#8211; 武蔵の日記');" target="_blank"> 2地点間の緯度と経度から直線距離を計算する &#8211; 武蔵の日記</a>
</li>
<li>
<a href="http://d.hatena.ne.jp/sirocco634/20090711/1247321788" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/sirocco634/20090711/1247321788', ' CSVファイルからDBにデータを登録する &#8211; 武蔵の日記');" target="_blank"> CSVファイルからDBにデータを登録する &#8211; 武蔵の日記</a>
</li>
<li>
<a href="http://d.hatena.ne.jp/sirocco634/20090708/1247061024" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/sirocco634/20090708/1247061024', ' このように書くときれいにスクレイピングできた &#8211; 武蔵の日記');" target="_blank"> このように書くときれいにスクレイピングできた &#8211; 武蔵の日記</a>
</li>
<li>
<a href="http://d.hatena.ne.jp/sirocco634/20090705/1246756265" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/sirocco634/20090705/1246756265', ' 住所から経度と緯度を取得する &#8211; 武蔵の日記');" target="_blank"> 住所から経度と緯度を取得する &#8211; 武蔵の日記</a>
</li>
</ul>
</div>