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

21 KiB
Raw Blame History

title author date url wordtwit_post_info categories
最寄りのルノアールを検索するためのスクリプト kazu634 1969-12-31 /1970/01/01/_65/
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";}}
Perl

2点間の緯度と経度がわかれば距離が計算できるので、それを用いて最寄りのルアールを検索するスクリプトを作成してみましたすでにルアールの緯度と経度のデータを取得済みであることが前提になっています

Perlスクリプト

# === Libraries ===
use strict;
use warnings;
# 警告用のモジュール
use Data::Dumper;
# sayを使う
use Perl6::Say;
# ラジアンに変換するためのモジュール
use Math::Trig;
# ウェブサービスにアクセスするためのモジュール
use WebService::Simple;
use XML::Simple;
use YAML::Syck;
# DBモジュール
use DBI;
# If you make a CGI,
use CGI::Carp;
# === Main part ===
# 引数の取得
my $address = shift() || "戸塚駅";
# ウェブサービスにアクセスする
my $geocode = WebService::Simple->new(
base_url => "http://maps.google.com/maps/geo",
param    => {
output => 'xml',
hl     => 'ja',
ie     => 'UTF8',
oe     => 'UTF8',
}
);
# レスポンスの取得
my $response = $geocode->get( { q => $address, } );
# 緯度と経度の取得
my ( $lng, $lat ) = split( /,/,
XMLin( $response->content )->{Response}->{Placemark}->{Point}
->{coordinates} );
# データベースへの接続
my $dbh =
DBI->connect( 'dbi:mysql:dbname=sample', 'root', 'musashi',
{ RaiseError => 1, AutoCommit => } );
# ステートメントハンドラの作成
my $sth = $dbh->prepare("SELECT shopname, lat, lng FROM renoir;");
# ステートメントハンドラの実行
# もしプレースホルダを用いていれば、引数を指定する
# 例: $sth->execute("$query%");
$sth->execute();
# データを格納するハッシュを宣言
my %distance;
# do something
while ( my @row = $sth->fetchrow_array ) {
#    say "$row[0]: processing...";
$distance{$row[]} = calc_distance($lat, $lng, $row[1], $row[2]);
}
# ステートメントハンドラの解放
$sth->finish;
# データベースハンドラの解放
$dbh->disconnect;
foreach my $x (sort { $distance{$a} <=> $distance{$b} } keys %distance) {
say "$x: $distance{$x}";
}
# === Sub routines ===
sub calc_distance {
my ( $src_lng, $src_lat, $target_lng, $target_lat ) = @_;
$src_lng    = deg2rad($src_lng);
$src_lat    = deg2rad($src_lat);
$target_lng = deg2rad($target_lng);
$target_lat = deg2rad($target_lat);
my $lat = abs($src_lat - $target_lat);
my $lng = abs($src_lng - $target_lng);
my $disp_lng = 6378137 * $lng * cos($src_lat);
my $disp_lat = 6378137 * $lat;
return (sqrt(($disp_lng ** 2) + ($disp_lat ** 2))) / 1000;
}

実行結果

kazu634@kazu634-desktop% perl nearby.pl 東京駅                         ~/public_html/cgi-bin [3685]
喫茶室ルノアール東京駅八重洲北口店: .435315984950852
CafeRenoirニュー八重洲北口店: .467543208698977
喫茶室ルノアール西銀座店: .642982000229979
喫茶室ルノアール銀座2丁目店: .702398928767422
喫茶室ルノアール日本橋高島屋前店: .732463961865684
喫茶室ルノアール銀座松屋通り店: .740393397722928
喫茶室ルノアールニュー銀座店: .75542502659804
喫茶室ルノアール銀座昭和通り店: .838414132025791
喫茶室ルノアール神田西口店: .869663761208432
CafeRenoir日比谷店: .897535877486945
喫茶室ルノアール神田南口駅前店: 1.01098051357989
喫茶室ルノアール銀座6丁目店: 1.08625003221537
喫茶室ルノアール神田北口駅前店: 1.09072059057988
喫茶室ルノアール歌舞伎座前店: 1.10796217223668
CafeRenoir日本橋三越前店: 1.18155794316319
喫茶室ルノアール新橋第一ホテル横店: 1.48410756949907
喫茶室ルノアールニュー秋葉原店: 1.54212153453434
喫茶室ルノアール秋葉原店: 1.63742738214139
CafeRenoir秋葉原昭和通り口店: 1.69909449355394
喫茶室ルノアール新橋サンルート店: 1.78354029735583
喫茶室ルノアール本郷三丁目店: 2.36420940618699
喫茶室ルノアール水道橋西口店: 2.36967239112471
喫茶室ルノアール芝大門店: 2.4978765111691
CafeRenoir御徒町春日通り店: 2.51018524532367
CafeRenoir上野公園前店: 2.55816645974866
喫茶室ルノアール上野しのばず口店: 2.67644546004129
喫茶室ルノアール飯田橋西口店: 2.77507641963975
喫茶室ルノアール赤坂見附店: 3.30276167166024
喫茶室ルノアール市ヶ谷駅前店: 3.42102550732542
喫茶室ルノアール市ヶ谷外堀通り店: 3.53709343480954
喫茶室ルノアール田町三田口駅前店: 3.66202973989548
喫茶室ルノアール日暮里谷中店: 3.94246072598764
喫茶室ルノアール日暮里東口店: 4.03695060915453
喫茶室ルノアール四谷店: 4.12610587079289
喫茶室ルノアール西日暮里第一店: 4.31473177312909
喫茶室ルノアール品川港南口店: 5.13907013778664
喫茶室ルノアール巣鴨駅前店: 5.27893044081758
喫茶室ルノアール品川高輪口店: 5.35139941874248
喫茶室ルノアール千駄ヶ谷駅前店: 6.23538684551861
喫茶室ルノアール新宿3丁目ビッグスビル店: 6.5453489357914
喫茶室ルノアール大崎ニューシティ店: 6.63945918250293
喫茶室ルノアール亀戸駅前店: 6.74062841206796
喫茶室ルノアールニュー新宿3丁目店: 6.77697915649173
喫茶室ルノアール新宿区役所横店: 7.05072429513845
喫茶室ルノアール高田馬場早稲田通り店: 7.06968951136699
喫茶室ルノアール渋谷シオノギビル店: 7.1240838306852
喫茶室ルノアール代々木西口駅前店: 7.13909675554724
喫茶室ルノアール新宿歌舞伎町店: 7.22403783727057
喫茶室ルノアール池袋東口店: 7.23780226955619
喫茶室ルノアール渋谷宮下公園店: 7.26931877899747
喫茶室ルノアール池袋パルコ横店: 7.3270604674247
喫茶室ルノアールニュー高田馬場店: 7.34290026009566
喫茶室ルノアール高田馬場第一店: 7.36479141976654
喫茶室ルノアール高田馬場ビッグボックス横店: 7.36904123056024
喫茶室ルノアール西武新宿駅前店: 7.40005424996067
喫茶室ルノアール渋谷南口店: 7.49746178714419
喫茶室ルノアール新宿大ガード店: 7.51323188722339
喫茶室ルノアール新宿西口駅前店: 7.58150054032627
喫茶室ルノアール新宿ハルク横店: 7.62020272070804
喫茶室ルノアール新宿小滝橋通り店: 7.64519920897494
喫茶室ルノアール新大久保駅前店: 7.65229083944699
喫茶室ルノアール渋谷東急ハンズ前店: 7.84131966635012
喫茶室ルノアール新宿西口エステックビル店: 7.85758639750782
喫茶室ルノアール大久保店: 8.04062475943237
喫茶室ルノアール西新宿西鉄イン店: 8.05412323485957
喫茶室ルノアール大森駅前店: 8.85907949468314
喫茶室ルノアール中野北口店: 11.3137961270589
喫茶室ルノアール中野サンプラザ前店: 11.4439040084503
喫茶室ルノアール蒲田西口店: 11.6915802640973
喫茶室ルノアール高円寺北口駅前店: 13.0266500378475
喫茶室ルノアール金町店: 13.9275885380925
喫茶室ルノアール京急川崎駅前店: 14.6570012552232
喫茶室ルノアール川崎銀柳街店: 14.8850590342952
喫茶室ルノアール鶴見駅前店: 17.7002234767128
喫茶室ルノアール本八幡店: 18.3395170961463
喫茶室ルノアール三鷹北口駅前店: 22.9806502621709
喫茶室ルノアール横浜元町店: 24.1345490376862
喫茶室ルノアール横浜関内駅前店: 24.7777407408182
喫茶室ルノアール横浜伊勢佐木町店: 25.1164169878391
喫茶室ルノアール川越店: 36.7869920377336
喫茶室ルノアール大船店: 38.0985342051618
喫茶室ルノアール鎌倉駅前店: 38.9676916856126
喫茶室ルノアール立川店: 39.0582655451701
喫茶室ルノアール立川駅前店: 39.0967111720432
喫茶室ルノアール立川南口店: 39.1415652734928
喫茶室ルノアール箱根湯本駅前店: 83.2994705463744
喫茶室ルノアール阿佐ヶ谷駅前店: 15851.4253911619

「ルノアール」に関連する最近のエントリ