map2earth.py
Yahoo!地図情報等から Google Earth に場所を表示させるための kml を出力する Python Script のソース
サイズ 3.4 kB - File type text/python-sourceファイルのコンテンツ
# Yahoo!地図情報 から住所の情報を取得する
# この関数を使用するためには、httplib, re が使用できる必要があります
from httplib import HTTPConnection
import re
def get_name(nl, el):
path = "/pl?nl=%s&el=%s&la=1&fi=1&sc=2" % (nl, el)
name = ""
try:
conn = HTTPConnection("map.yahoo.co.jp")
conn.request("GET", path)
res = conn.getresponse()
map_html = unicode(res.read(), 'japanese.euc_jp').encode('utf8')
pattern = re.compile("<title>Yahoo!地図情報 - (.*)の周辺地図</title>")
m = pattern.search(map_html)
if m:
name = m.group(1)
except:
pass
return name
# 緯度経度の表記を度分秒から10進に変換する
def min2dec(org):
(deg, min, sec) = org.split(".", 2)
dec = (float(deg) + float(min) / 60.0 + float(sec) / 3600.0)
return dec
def error(url):
string = """<html>
<head><title>URL が正しくありません</title></head>
<body>
<p>
入力した URL が正しくないため、地図情報の取得に失敗しました。<br />
入力された URL は以下のとおりです。<br />
<a href="%s">%s</a>
</p>
以下のいずれかの地図サイトから Bookmarklet を実行してください。
<ul>
<li><a href="http://map.yahoo.co.jp/">Yahoo!地図情報</a>
<li><a href="http://www.mapfan.com/">MapFan Web</a>
<li><a href="http://map.goo.ne.jp/">goo 地図</a>
<li><a href="http://map.livedoor.com/">livedoor 地図</a>
</ul>
</body>
</html>""" % (url, url)
return string
# Import a standard function, and get the HTML request and response objects.
from Products.PythonScripts.standard import html_quote
request = container.REQUEST
RESPONSE = request.RESPONSE
# parse url string
urlpattern = re.compile("http://(map.yahoo.co.jp|map.msn.co.jp|map.goo.ne.jp|map.livedoor.com||www.mapfan.com)/.*\?")
if urlpattern.search(request.url) == None:
print error(request.url)
return printed
(path, query_string) = request.url.split('?')
query = {}
for str in query_string.split('&'):
(key, value) = str.split('=')
query[key] =value
name = ""
el = ""
nl = ""
if path.startswith("http://map.yahoo.co.jp"):
el = query['el']
nl = query['nl']
elif path.startswith("http://map.msn.co.jp"):
el = query['la']
nl = query['lg']
elif path.startswith("http://map.goo.ne.jp") or path.startswith("http://map.livedoor.com") or path.startswith("http://www.mapfan.com/"):
map = query['MAP']
pos_e = map.find("E")
pos_n = map.find("N")
el = map[pos_e + 1:pos_n]
nl = map[pos_n + 1:]
else:
print error(request.url)
return printed
if len(nl) > 0 and len(el) > 0:
name = get_name(nl, el)
b_tokyo = min2dec(nl)
l_tokyo = min2dec(el)
# 日本測地系から WGS 84 に変換する
b_wgs84 = b_tokyo - 0.00010695 * b_tokyo + 0.000017464 * l_tokyo + 0.0046017
l_wgs84 = l_tokyo - 0.000046038 * b_tokyo - 0.000083043 * l_tokyo + 0.010040
RESPONSE.setHeader("Content-Type", "application/vnd.google-earth.kml+xml")
print '''<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.0">
<Placemark>
<name>%s</name>
<View>
<longitude>%s</longitude>
<latitude>%s</latitude>
<range>1000</range>
</View>
</Placemark>
</kml>
''' % (name, l_wgs84, b_wgs84)
return printed
Click here to get the file