Moderators: Unholy, krankyd, dmcconachie, The Fej
// ==UserScript==
// @name OS OpenData FullHeight
// @namespace http://greasemonkey.chizzum.com
// @description Increases height of map window on OS OpenData site
// @include http://www.ordnancesurvey.co.uk/oswebsite/opendata/viewer/*
// ==/UserScript==
function resizemap(event)
{
// resizes map viewport whenever browser window changes size
var elmModify = document.getElementById("map");
elmModify.style.height = (window.innerHeight-10)+'px';
elmModify.style.width = (window.innerWidth-10)+'px';
}
function recentreMap(eastings, northings, zoom)
{
/*
Create a proper unsafeWindow object on browsers where it doesn't exist (Chrome, mainly).
Chrome now defines unsafeWindow, but does not give it the same access to a page's
javascript that a properly unsafe, unsafeWindow has. This code remedies that.
From: http://stackoverflow.com/questions/1622145/how-can-i-mimic-greasemonkey-firefoxs-unsafewindow-functionality-in-chrome
*/
var bGreasemonkeyServiceDefined = false;
try
{
if (typeof Components.interfaces.gmIGreasemonkeyService === "object")
{
bGreasemonkeyServiceDefined = true;
}
}
catch (err)
{
//Ignore.
}
if ( typeof unsafeWindow === "undefined" || ! bGreasemonkeyServiceDefined)
{
unsafeWindow = ( function () {
var dummyElem = document.createElement('p');
dummyElem.setAttribute ('onclick', 'return window;');
return dummyElem.onclick ();
} ) ();
}
// end of stackoverflow code
// call the OS provided functions required to point the map at a
// given grid ref and zoom level
mymapCenter = new unsafeWindow.OpenSpace.MapPoint(eastings, northings);
// not sure why, but passing zoom directly into setCenter prevents the
// mouse scrollwheel from zooming in/out of the recentred map... as a
// workaround for now, test the value of zoom and use hardcoded calls
//unsafeWindow.osMap.setCenter(mymapCenter, zoom);
if(zoom==0)unsafeWindow.osMap.setCenter(mymapCenter, 0);
if(zoom==1)unsafeWindow.osMap.setCenter(mymapCenter, 1);
if(zoom==2)unsafeWindow.osMap.setCenter(mymapCenter, 2);
if(zoom==3)unsafeWindow.osMap.setCenter(mymapCenter, 3);
if(zoom==4)unsafeWindow.osMap.setCenter(mymapCenter, 4);
if(zoom==5)unsafeWindow.osMap.setCenter(mymapCenter, 5);
if(zoom==6)unsafeWindow.osMap.setCenter(mymapCenter, 6);
if(zoom==7)unsafeWindow.osMap.setCenter(mymapCenter, 7);
if(zoom==8)unsafeWindow.osMap.setCenter(mymapCenter, 8);
if(zoom==9)unsafeWindow.osMap.setCenter(mymapCenter, 9);
if(zoom==10)unsafeWindow.osMap.setCenter(mymapCenter, 10);
}
function checkMapLoaded()
{
// if the "Powered by OS" logo hasn't loaded in the lower-left corner, we know the original map view
// is still being rendered by the OpenData code, so wait 100ms and then cbeck for its presence again
if(document.getElementById('newpoweredby') == null)
{
setTimeout(checkMapLoaded,100);
}
// once the logo is present, recentre the map view to the desired location and zoom level...
else
{
recentreMap(eastings,northings,zoom);
}
}
// remove the OS logos from the top...
var elmDeleted = document.getElementById("logos");
elmDeleted.parentNode.removeChild(elmDeleted);
// ...and the huge "about help keep in touch" bit from the bottom
var elmDeleted = document.getElementById("sitefooter");
elmDeleted.parentNode.removeChild(elmDeleted);
// reduce the width of the whitespace around the map viewport
var elmModify = document.getElementById("wrapper");
elmModify.style.padding = '4px';
// move the "boundary layers" menu selector into the map viewport
var elmModify = document.getElementById("mapmast");
elmModify.style.height = '0px';
elmModify.style.top = '64px';
elmModify.style.right = '64px';
elmModify.style.zIndex = '2';
// adjust the "boundary layers" border and background colour so it shows up nicely
var elmModify = document.getElementById("mapoptions");
var childModify = elmModify.getElementsByTagName("LI");
childModify[0].style.borderStyle = 'solid';
childModify[0].style.backgroundColor = '#FFFFFF';
childModify[0].style.borderWidth = '1px';
// extract the starting coords/zoom from the url...
var userloc = document.location.href;
epos = userloc.indexOf("?e=");
npos = userloc.indexOf("&n=");
zpos = userloc.indexOf("&z=");
if((epos != -1)&&(npos != -1)&&(zpos != -1))
{
eastings = userloc.substr(epos+3,npos-(epos+3));
northings = userloc.substr(npos+3,zpos-(npos+3));
zoom = userloc.substr(zpos+3,2);
//...then recentre the map 1s after the page has loaded
checkMapLoaded();
}
// re-render the map now we're done removing/adjusting all the original elements...
resizemap();
// and finally add in a hook to the onResize event, to call resizemap() each time the
// browser window changes size
window.addEventListener('resize', resizemap, true);
// ==UserScript==
// @name WME to OS link
// @namespace http://greasemonkey.chizzum.com
// @description Adds link to WME to open up OS Open Data/Musical Chairs sites at same map location
// @include https://world.waze.com/editor/*
// ==/UserScript==
// Modified from the original (c) Chris Veness 2005-2012
// www.movable-type.co.uk/scripts/gridref.js
// www.movable-type.co.uk/scripts/latlon-gridref.html
function toOSGrid(lat, lon)
{
lat = (lat * Math.PI) / 180;
lon = (lon * Math.PI) / 180;
// Airy 1830 major & minor semi-axes
var a = 6377563.396;
var b = 6356256.910;
// NatGrid scale factor on central meridian
var F0 = 0.9996012717;
// NatGrid true origin is 49N,2W
var lat0 = 0.85521;
var lon0 = -0.0349;
// northing & easting of true origin, metres
var N0 = -100000;
var E0 = 400000;
// eccentricity squared
var e2 = 1 - (b*b)/(a*a);
var n = (a-b)/(a+b);
var n2 = n*n;
var n3 = n*n*n;
var cosLat = Math.cos(lat);
var sinLat = Math.sin(lat);
// transverse radius of curvature
var nu = a*F0/Math.sqrt(1-e2*sinLat*sinLat);
// meridional radius of curvature
var rho = a*F0*(1-e2)/Math.pow(1-e2*sinLat*sinLat, 1.5);
var eta2 = nu/rho-1;
var Ma = (1 + n + (5/4)*n2 + (5/4)*n3) * (lat-lat0);
var Mb = (3*n + 3*n*n + (21/8)*n3) * Math.sin(lat-lat0) * Math.cos(lat+lat0);
var Mc = ((15/8)*n2 + (15/8)*n3) * Math.sin(2*(lat-lat0)) * Math.cos(2*(lat+lat0));
var Md = (35/24)*n3 * Math.sin(3*(lat-lat0)) * Math.cos(3*(lat+lat0));
// meridional arc
var M = b * F0 * (Ma - Mb + Mc - Md);
var cos3lat = cosLat*cosLat*cosLat;
var cos5lat = cos3lat*cosLat*cosLat;
var tan2lat = Math.tan(lat)*Math.tan(lat);
var tan4lat = tan2lat*tan2lat;
var I = M + N0;
var II = (nu/2)*sinLat*cosLat;
var III = (nu/24)*sinLat*cos3lat*(5-tan2lat+9*eta2);
var IIIA = (nu/720)*sinLat*cos5lat*(61-58*tan2lat+tan4lat);
var IV = nu*cosLat;
var V = (nu/6)*cos3lat*(nu/rho-tan2lat);
var VI = (nu/120) * cos5lat * (5 - 18*tan2lat + tan4lat + 14*eta2 - 58*tan2lat*eta2);
var dLon = lon-lon0;
var dLon2 = dLon*dLon;
var dLon3 = dLon2*dLon;
var dLon4 = dLon3*dLon;
var dLon5 = dLon4*dLon;
var dLon6 = dLon5*dLon;
var N = Math.round(I + II*dLon2 + III*dLon4 + IIIA*dLon6);
var E = Math.round(E0 + IV*dLon + V*dLon3 + VI*dLon5);
return '?e='+E+'&n='+N;
}
function processPermalink()
{
// extract current lat/lon & zoom level from the permalink URL
var plsrc = document.getElementById("permalink-container").innerHTML;
var zoompos = plsrc.indexOf("?zoom=");
var latpos = plsrc.indexOf("&lat=");
var lonpos = plsrc.indexOf("&lon=");
var layerpos = plsrc.indexOf("&layers=");
// does the URL contain all three parameters?
if((zoompos != -1)&&(latpos != -1)&&(lonpos != -1)&&(layerpos != -1))
{
// yes, so extract them...
var zoom = parseInt(plsrc.substr(zoompos+6,latpos-(zoompos+6)));
var lat = plsrc.substr(latpos+9,lonpos-(latpos+9));
var lon = plsrc.substr(lonpos+9,layerpos-(lonpos+9));
// compare the freshly extracted parameters against the persistent copies, and update the
// links to OSMC & OSOD only if there's a change required - the newly-inserted <a> element
// can't be clicked on until the insertion process is complete, and if we were to re-insert
// it every 250ms then it'd spend a lot of its time giving the appearance of being clickable
// but without actually doing anything...
if((zoom != sessionStorage.zoom)||(lat != sessionStorage.lat)||(lon != sessionStorage.lon))
{
// update the persistent vars with the new position
sessionStorage.zoom = zoom;
sessionStorage.lat = lat;
sessionStorage.lon = lon;
// translate the zoom level between WME and Musical Chairs - this gives a pretty close match
var mczoom = zoom + 12;
if(mczoom > 18) mczoom = 18;
// generate the Musical Chairs URL
var osmc_url = 'http://ris.dev.openstreetmap.org/oslmusicalchairs/map?zoom='+mczoom+'&lat='+lat+'&lon='+lon+'&layers=B0TT&view_mode=pseudorandom';
// translate the zoom level between WME and OpenData - the match here isn't quite so good...
var odzoom = zoom + 5;
if(odzoom < 6) odzoom = 6;
if(odzoom > 10) odzoom = 10;
// generate the OpenData URL - requires the support of os_opendata_fullheight.user.js
var osod_url = 'http://www.ordnancesurvey.co.uk/oswebsite/opendata/viewer/'+toOSGrid(lat,lon)+'&z='+odzoom;
// "borrow" the Bing attribution div to insert the new clicky-links, remembering to maintain the attribution after we're done messing with it!
document.getElementById("bing-attribution").innerHTML = ' <a href="'+osod_url+'" target=_blank>OS OpenData</a> | <a href="'+osmc_url+'" target=_blank>OS Musical Chairs</a> | Imagery by Bing';
}
}
}
// initialise persistent vars
sessionStorage.zoom = 0;
sessionStorage.lat = '';
sessionStorage.lon = '';
// check for new map co-ords every 250ms
setInterval(processPermalink,250);
// translate the zoom level between WME and live map. The only correlation is (WME)=[Live] (0 or 1)=[7], (2 or 3)=[8], (4 or more)=[9]
var livemap_zoom = Math.floor(zoom/2)+7;
if (livemap_zoom > 9 ) livemap_zoom = 9;
var livemap_url = 'https://world.waze.com/livemap/?zoom='+livemap_zoom+'&lat='+lat+'&lon='+lon+'&layers=BTTTT';
// "borrow" the Bing attribution div to insert the new clicky-links, remembering to maintain the attribution after we're done messing with it!
document.getElementById("bing-attribution").innerHTML = ' <a href="'+livemap_url+'" target=_blank>Waze Live Map</a> | <a href="'+osod_url+'" target=_blank>OS OpenData</a> | <a href="'+osmc_url+'" target=_blank>OS Musical Chairs</a> | Imagery by Bing'; // translate the zoom level between WME and live map. The only correlation is (WME)=[Live] (0 or 1)=[7], (2 or 3)=[8], (4 or more)=[9]
var livemap_zoom = Math.floor(zoom/2)+7;
if (livemap_zoom > 9 ) livemap_zoom = 9;
var livemap_url = 'https://world.waze.com/livemap/?zoom='+livemap_zoom+'&lat='+lat+'&lon='+lon+'&layers=BTTTT';
// Update livemap link to reference current position in WME
document.getElementById("livemap").innerHTML = ' <a href="'+livemap_url+'" style="text-decoration: none; color: black" target=_blank>Live Map</a>'; // "borrow" the Bing attribution div to insert the new clicky-links, remembering to maintain the attribution after we're done messing with it!
document.getElementById("bing-attribution").innerHTML = ' <a href="'+osod_url+'" style="color: #9f9f9f" target=_blank>OS OpenData</a> | <a href="'+osmc_url+'" style="color: #9f9f9f" target=_blank>OS Musical Chairs</a> | Imagery by Bing';
xteejx wrote:Is this the gm script for osmc? I'm crap with scripting, etc.
Sent from my GT-I9100P using Tapatalk 2

You are free to:
copy, publish, distribute and transmit the Information;
adapt the Information;
exploit the Information commercially for example, by combining it with other Information, or by
including it in your own product or application.
You must, where you do any of the above:
acknowledge the source of the Information by including any attribution statement specified by the
Information Provider(s) and, where possible, provide a link to this licence;
If the Information Provider does not provide a specific attribution statement, or if you are using
Information from several Information Providers and multiple attributions are not practical in your
product or application, you may consider using the following:
Contains public sector information licensed under the Open Government Licence v1.0.
ensure that you do not use the Information in a way that suggests any official status or that the
Information Provider endorses you or your use of the Information;
ensure that you do not mislead others or misrepresent the Information or its source;
ensure that your use of the Information does not breach the Data Protection Act 1998 or the Privacy
and Electronic Communications (EC Directive) Regulations 2003.

Users browsing this forum: yeramihi