サイトメニュー
サイト側で何らかのメニュー設定をページに定義しておいて、それをブラウザが読んでメニューとして表示する、みたいのがあれば面白いのにな。TOPページへのリンクとか、複雑な操作なんかも。表示をクライアントが設定できていい。
ロカポを見つけたら地図にリンクするGreasemonkey
http://www.locapoint.com/jp/
LocaPointを見つけたらリンクします。デフォルトではGoogle Maps。Greasemonkeyの「User Script Commands」でリンク先を変更できます。(使うと不具合が出ます → 改善)
// ==UserScript== // @name locapoint link // @namespace http://d.hatena.ne.jp/arikui/ // @include * // @exclude http://maps.google.co.jp/* // ==/UserScript== var mapURL = GM_getValue("url") || "http://maps.google.co.jp/"; var param = GM_getValue("param") || "q=%lat%,%lon%"; var r = /([A-Z][A-Z][0-9]\.[A-Z][A-Z][0-9]\.[A-Z][A-Z][0-9]\.[A-Z][A-Z][0-9])/g; var w = window; w.addEventListener("load", function(){ var text = document.body.innerHTML; document.body.innerHTML = text.replace(r, function($0){ var lonlat = LocaPoint2LatLon($0); var p = param.replace(/%lat%/g, lonlat.latitude).replace(/%lon%/g, lonlat.longitude); return ["<a href='",mapURL,"?",p,"' title='lat,lon=",lonlat.latitude,",",lonlat.longitude,"'>",$0,"</a>"].join(""); }); }, false); GM_registerMenuCommand("locapoint link", function(){ var url = prompt("map service URL", mapURL); var prm = prompt([ "parameters", "latitude : %lat%", "longitude: %lon%" ].join("\n"), param); url = (url)? url : mapURL; prm = (prm)? prm : param; GM_setValue("url", url); GM_setValue("param", prm); mapURL = url; param = prm; location.reload(); }); //Deocde function LocaPoint2LatLon(locapoint){ var location = { latitude: ( (locapoint.charCodeAt(0) - 65) * 1757600 +(locapoint.charCodeAt(1) - 65) * 67600 +(locapoint.charCodeAt(2) - 48) * 6760 +(locapoint.charCodeAt(8) - 65) * 260 +(locapoint.charCodeAt(9) - 65) * 10 +(locapoint.charCodeAt(10)- 48) * 1 ) * 180 / 45697600 - 90, longitude: ( (locapoint.charCodeAt(4) - 65) * 1757600 +(locapoint.charCodeAt(5) - 65) * 67600 +(locapoint.charCodeAt(6) - 48) * 6760 +(locapoint.charCodeAt(12)- 65) * 260 +(locapoint.charCodeAt(13)- 65) * 10 +(locapoint.charCodeAt(14)- 48) * 1 ) * 360 / 45697600 - 180 }; return(location); } //Encode function LatLon2LocaPoint(location){ var latitude_step = (location.latitude + 90) / 180 * 45697600; var longitude_step = (location.longitude + 180) / 360 * 45697600; var locapoint = String.fontCharCode( latitude_step/1757600 % 26 + 65, latitude_step/ 67600 % 26 + 65, latitude_step/ 6760 % 10 + 48, 46, longitude_step/1757600 % 26 + 65, longitude_step/ 67600 % 26 + 65, longitude_step/ 6760 % 10 + 48, 46, latitude_step/260 % 26 + 65, latitude_step/ 10 % 26 + 65, latitude_step/ 1 % 10 + 48, 46, longitude_step/260 % 26 + 65, longitude_step/ 10 % 26 + 65, longitude_step/ 1 % 10 + 48 ); return(locapoint); }
サンプルコードがありますが、Javascriptのは間違ってるので注意。