Google Maps Show Coords

By JRI Last update Dec 11, 2011 — Installed 2,346 times.

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);