There are 13 previous versions of this script.
// ==UserScript==
// @name Google Maps Show Coords Link
// @namespace http://inge.org.uk/userscripts
// @description Creates a link on Google Maps to show the map centre lat/lon coordinates.
// @include http://maps.google.tld/*
// @include http://www.google.tld/local*
// @include http://www.google.tld/maps*
// @license MIT License; http://www.opensource.org/licenses/mit-license.php
// @copyright 2011, James Inge (http://geo.inge.org.uk/)
// @version 0.9.2
// ==/UserScript==
// v0.9.2 - Fixed for another new Google layout.
// v0.9.1 - Fixed for new Google layout. Format change now using script variable.
// v0.9 - Added copy to clipboard function.
// v0.8.1 - Bugfixes
// v0.8 - Ability to display in DD.ddd and DD MM.mmm formats.
// v0.7 - Now works with any top-level domain version of Google Maps
// v0.2 to 0.6 - Updates to match various minor changes in Google Maps' page structure; No changes in functionality.
// Set the variable below to true for DD.ddd or false for DD MM.mmm
var decDegrees = false;
function addGeoLink() {
var targets = document.evaluate("//div[@id='topbar-startcol']/div[@class='start-edge-links']", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
var showScript = ['function dmm(deg) {var s=(deg<0)?"-":"";var d = Math.abs(deg);var m = ((d - Math.floor(d))*60).toFixed(3);d = Math.floor(d);return s+d+ " " + m;}\
var lat = gApplication.getMap().getCenter().lat();\
var lon = gApplication.getMap().getCenter().lng();',
decDegrees ? 'document.getElementById("coordtxt").innerHTML=lat.toFixed(6) + "<br/>" + lon.toFixed(6);' : 'document.getElementById("coordtxt").innerHTML=dmm(+lat) + "<br/>" + dmm(+lon);',
'return false;'
].join('');
if (targets.snapshotLength == 1) {
var targetDiv = targets.snapshotItem(0);
var mySpan = document.createElement("span");
mySpan.innerHTML += "<a title='Click to show coordinates at map centre.' class='kd-button small' style='line-height:13px;width:60px;' id='coordtxt' onclick='"+ showScript +"'>Show coords</a>";
targetDiv.appendChild(mySpan);
GM_addStyle(".kd-button{padding:0 2px;margin-right:3px;vertical-align:middle;}");
}
}
function cmE(event){
if( !event ) var event = window.event;
if( event.target.id == "coordtxt") {
var text = event.target.innerHTML;
if( text == "Show coords" ) return; // Not got coords yet.
text = text.replace(/<br\/?>/,",");
if( window.clipboardData ) {
// IE - not tested
window.clipboardData.setData('Text', text);
} else {
if(unsafeWindow.netscape && unsafeWindow.netscape.security) {
// Firefox etc.
try {
unsafeWindow.netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var comp_classes = Components.classes;
} catch(e) {
// When "signed.applets.codebase_principal_support" is set to false
GM_log("Can't copy to clipboard due to security settings. Set 'signed.applets.codebase_principal_support' to 'true' in about:config");
return;
}
var comp_interf = Components.interfaces;
var clipboard_inst = comp_classes["@mozilla.org/widget/clipboard;1"].createInstance(comp_interf.nsIClipboard);
var transferable_inst = comp_classes["@mozilla.org/widget/transferable;1"].createInstance(comp_interf.nsITransferable);
var supportsstring_inst = comp_classes["@mozilla.org/supports-string;1"].createInstance(comp_interf.nsISupportsString);
if(!clipboard_inst || !transferable_inst || !supportsstring_inst) { GM_log("Can't copy to clipboard. Some problem with Mozilla widgets...");return; }
transferable_inst.addDataFlavor("text/unicode");
supportsstring_inst.data = text;
transferable_inst.setTransferData("text/unicode", supportsstring_inst, text.length*2);
clipboard_inst.setData(transferable_inst, null, comp_interf.nsIClipboard.kGlobalClipboard);
} else {
// Browsers that don't use the Gecko engine
GM_log("I don't know how to access the clipboard in this browser");
return;
}
}
event.cancelBubble = true;
if(event.preventDefault) event.preventDefault();
if(event.stopPropagation) event.stopPropagation();
return false;
}
}
addGeoLink();
document.addEventListener('contextmenu', cmE, false);