Changeset 190

Show
Ignore:
Timestamp:
03/13/06 08:21:41 (3 years ago)
Author:
ogawa
Message:

Mapper plugin now supports the coordinates as well as the address.
Fix several bugs.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • Mapper/trunk/Mapper.pl

    r189 r190  
    1818 
    1919sub BEGIN { 
    20     $VERSION = '0.03'; 
     20    $VERSION = '0.10.$Rev$'; 
    2121    my $plugin = MT::Plugin::Mapper->new({ 
    2222        name => 'Mapper', 
     
    9090sub generate { 
    9191    my $this = shift; 
    92     my($address) = @_; 
    93     $address =~ s/(^\s+|\s+$)//g; 
    94     my ($lat, $lon) = eval { $this->resolve_address($address) }; 
    95     return "<div class=\"adr\">$address (Sorry, this address cannot be resolved.)</div>" if $@; 
     92    my($s) = @_; 
     93    my($adr, $opt) = split(/:/, $s); 
     94    $adr =~ s/^\s+//; 
     95    $adr =~ s/\s+$//; 
     96    my ($lat, $lon); 
     97    if ($adr =~ m!^x([-.\d]+)y([-.\d]+)$!) {            # map:x<lon>y<lat> 
     98        ($lat, $lon) = ($2, $1); 
     99    } elsif ($adr =~ m!^([-.\d]+),\s*([-.\d]+)$!) {     # map:<lat>,<lon> 
     100        ($lat, $lon) = ($1, $2); 
     101    } else { 
     102        ($lat, $lon) = eval { $this->resolve_address($adr) }; 
     103        return "<div class=\"adr\">$adr (Sorry, this address cannot be resolved.)</div>" if $@; 
     104    } 
    96105    my $res = ''; 
    97106    $res .= $this->preamble unless $this->{count}; 
    98     $res .= $this->body($lat, $lon, $address); 
     107    $res .= $this->body($lat, $lon, $adr); 
    99108    $this->{count}++; 
    100109    $res; 
     
    103112sub resolve_address { 
    104113    my $this = shift; 
    105     my($address) = @_; 
     114    my($adr) = @_; 
    106115    my $geo_url = $this->{language} eq 'ja' ? 
    107116        'http://maps.google.co.jp/maps?q=' : 'http://maps.google.com/maps?q='; 
    108     $geo_url .= encode_url($address) . '&output=kml'; 
     117    $geo_url .= encode_url($adr) . '&output=kml'; 
    109118    $geo_url .= '&ie=' . $this->{charset} . '&oe=' . $this->{charset}; 
    110119    my $res = get($geo_url); 
    111     if ($res && $res =~ /coordinates>([0-9.]+),([0-9.]+),/is) { 
     120    if ($res && $res =~ /coordinates>([-.\d]+),([-.\d]+),/is) { 
    112121        return ($2, $1); 
    113122    } else { 
     
    117126 
    118127my $preamble_tmpl = <<'EOT'; 
    119 <script type="text/javascript" src="http://maps.google.com/maps?<TMPL_IF NAME="language">hl=<TMPL_VAR NAME="language">&</TMPL_IF>file=api&v=2&key=<TMPL_VAR NAME="google_maps_key">" charset="utf-8"></script> 
     128<script type="text/javascript" src="http://maps.google.com/maps?<TMPL_IF NAME="language">hl=<TMPL_VAR NAME="language">&</TMPL_IF>file=api&v=1&key=<TMPL_VAR NAME="google_maps_key">" charset="utf-8"></script> 
    120129<script type="text/javascript"> 
    121130//<![CDATA[ 
     
    178187sub body { 
    179188    my $this = shift; 
    180     my($lat, $lon, $address) = @_; 
    181     ($address) = split(/:/, $address); 
     189    my($lat, $lon, $adr) = @_; 
    182190    my $tmpl = HTML::Template->new(scalarref => \$body_tmpl); 
    183191    $tmpl->param( 
     
    187195                 latitude => $lat, 
    188196                 longitude => $lon, 
    189                  address => $address
     197                 address => $adr
    190198                 maptype => $this->{maptype} || 'G_MAP_TYPE', 
    191199                 zoom => (defined $this->{zoom}) ? $this->{zoom} : 4 
     
    212220sub generate { 
    213221    my $this = shift; 
    214     my($address) = @_; 
    215     $address =~ s/(^\s+|\s+$)//g; 
    216     my($adr, $opt) = split(/:/, $address); 
    217     $adr = MT::I18N::encode_text($adr, '', 'euc-jp') || ''; 
     222    my($s) = @_; 
     223    $s =~ s/^\s+//; 
     224    $s =~ s/\s+$//; 
     225    my($str, $opt) = split(/:/, $s); 
     226 
     227    my $pos = ''; 
     228    if ($str =~ m!^x([-.\d]+)y([-.\d]+)$!) {            # map:x<lon>y<lat> 
     229        $pos = "$2,$1"; 
     230    } elsif ($str =~ m!^([-.\d]+),\s*([-.\d]+)$!) {     # map:<lat>,<lon> 
     231        $pos = $str; 
     232    } 
     233    if ($pos) { 
     234        return qq[<p><a target="_blank" href="http://clip.alpslab.jp/bin/rd?pos=$pos"><img class="alpslab-clip" src="http://clip.alpslab.jp/bin/map?pos=$pos&opt=$opt" alt="$str" title="$str" /></a></p>]; 
     235    } 
     236 
     237    my $adr = MT::I18N::encode_text($str, '', 'euc-jp') || ''; 
    218238    $adr = MT::Util::encode_url($adr); 
    219     qq[<p><a target="_blank" href="http://clip.alpslab.jp/bin/rd?adr=$adr"><img class="alpslab-clip" src="http://clip.alpslab.jp/bin/map?adr=$adr&opt=$opt" alt="$address" title="$address" /></a></p>]; 
    220 } 
     239    qq[<p><a target="_blank" href="http://clip.alpslab.jp/bin/rd?adr=$adr"><img class="alpslab-clip" src="http://clip.alpslab.jp/bin/map?adr=$adr&opt=$opt" alt="$str" title="$str" /></a></p>]; 
     240}