f8g

ロカポを見つけたら地図にリンクするGreasemonkey

http://www.locapoint.com/jp/
LocaPointを見つけたらリンクします。デフォルトではGoogle MapsGreasemonkeyの「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のは間違ってるので注意。