[Script] WMEOpenData v1.33 (20130522)

Moderators: Unholy, krankyd, dmcconachie, The Fej

Re: OS Open Data mistakes

Postby Twister_UK » Sun Jun 24, 2012 9:51 am

How weird, all this time I've been looking at that bit of the screen, and I never noticed there was already a vertical seperator between the permalink and Bing attribution...

HTC One X - Android 4.1.1 - Waze 3.6.0.0 - International Server
AM for NW London and the M4-A404-M40 loop - Editing Expert
WME enhancement scripts (WMEOD:URO:LMUR:SRS) @ userscripts.org
Twister_UK
 
Posts: 484
Joined: Sat Jan 07, 2012 3:56 pm
Location: NW London
Has thanked: 19 times
Been thanked: 88 times

Re: OS Open Data mistakes

Postby Twister_UK » Sun Jun 24, 2012 11:03 pm

A minor update to the OS OpenData FullHeight script, removing the hardcoded 6-digit length for eastings/northings...
Code: Select all
// ==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);



...in order for it to support all the possible grid refs passed to it by the full version of WME to OS.
Code: Select all
// ==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);


Yes, this means we now have two new links at the bottom of WME, allowing the current WME position and zoom level to be passed to OS OpenData or OS Musical Chairs.

Includes Dave2084's edits so that the links automatically open in new tabs (I'm so used to centre-clicking links to open in a new tab I hadn't given a second thought to letting the script do it for me...) and the seperators are visually consistent.

Enjoy!

HTC One X - Android 4.1.1 - Waze 3.6.0.0 - International Server
AM for NW London and the M4-A404-M40 loop - Editing Expert
WME enhancement scripts (WMEOD:URO:LMUR:SRS) @ userscripts.org
Twister_UK
 
Posts: 484
Joined: Sat Jan 07, 2012 3:56 pm
Location: NW London
Has thanked: 19 times
Been thanked: 88 times

Re: OS Open Data mistakes

Postby Dave2084 » Mon Jun 25, 2012 6:34 pm

You're a legend ... love it A LOT!

Just as awesome as Tim's livemap nav add-on!
iPhone 4S 32GB (Jailed) • iOS 6.1.2 • Waze 3.6.99.15 Beta
Lincolnshire Area Manager • UK Country Administrator • iOS Beta Tester • iPhone Expert
UK WikiUK ForumWaze UK on FacebookBecome a UK Area ManagerWaze Status
Dave2084
Waze Champs
 
Posts: 1547
Joined: Tue Feb 09, 2010 12:58 am
Location: Lincoln, UK
Has thanked: 22 times
Been thanked: 32 times

Re: OS Open Data mistakes

Postby Dave2084 » Mon Jun 25, 2012 9:05 pm

You could also add a live map link as the live map is linked to Cartouche rather than WME:

Here's an extract of code I've tested:
Code: Select all
// 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';
iPhone 4S 32GB (Jailed) • iOS 6.1.2 • Waze 3.6.99.15 Beta
Lincolnshire Area Manager • UK Country Administrator • iOS Beta Tester • iPhone Expert
UK WikiUK ForumWaze UK on FacebookBecome a UK Area ManagerWaze Status
Dave2084
Waze Champs
 
Posts: 1547
Joined: Tue Feb 09, 2010 12:58 am
Location: Lincoln, UK
Has thanked: 22 times
Been thanked: 32 times

Re: OS Open Data mistakes

Postby Dave2084 » Tue Jun 26, 2012 10:04 am

Had a thought this morning, rather than add a link to the bottom with a fixed livemap URL why not override the one that doesn't link to WME at the top.

So if you insert the this code it will take care of it for you. Note that I'm manually setting style attributes as I'm not sure how I get greasemonkey to use the assigned style for the menu. DO you think it should open in new tab or not?

Code: Select all
         // 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>';


On a similar theme, I also updated the style colour for the OS links to match the Permalink/OS:

Code: Select all
         // "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';


Can someone explain how I can do this without hard coding it?



The other thing is that the URL "https://descartesw.waze.com/beta/*" could be included for those that have access to the beta editor program.


Lastly, how about adding a link to Cartouche as well?
iPhone 4S 32GB (Jailed) • iOS 6.1.2 • Waze 3.6.99.15 Beta
Lincolnshire Area Manager • UK Country Administrator • iOS Beta Tester • iPhone Expert
UK WikiUK ForumWaze UK on FacebookBecome a UK Area ManagerWaze Status
Dave2084
Waze Champs
 
Posts: 1547
Joined: Tue Feb 09, 2010 12:58 am
Location: Lincoln, UK
Has thanked: 22 times
Been thanked: 32 times

Re: OS Open Data mistakes

Postby xteejx » Tue Jun 26, 2012 11:33 am

Is this the gm script for osmc? I'm crap with scripting, etc.

Sent from my GT-I9100P using Tapatalk 2
Area Manager for Kent. Localisation expert and translator for UK English.
Image
UK specific editing: http://www.waze.com/wiki/index.php/United_Kingdom
xteejx
 
Posts: 2340
Joined: Wed Jan 19, 2011 3:17 pm
Location: Sheerness, Kent, UK
Has thanked: 11 times
Been thanked: 15 times

Re: OS Open Data mistakes

Postby Dave2084 » Tue Jun 26, 2012 12:26 pm

xteejx wrote:Is this the gm script for osmc? I'm crap with scripting, etc.

Sent from my GT-I9100P using Tapatalk 2


Yes, OSMC and regular OS Open Data, it works really well!

Just waiting for Twister_UK to respond to the suggestions I've made (As it is his script).
iPhone 4S 32GB (Jailed) • iOS 6.1.2 • Waze 3.6.99.15 Beta
Lincolnshire Area Manager • UK Country Administrator • iOS Beta Tester • iPhone Expert
UK WikiUK ForumWaze UK on FacebookBecome a UK Area ManagerWaze Status
Dave2084
Waze Champs
 
Posts: 1547
Joined: Tue Feb 09, 2010 12:58 am
Location: Lincoln, UK
Has thanked: 22 times
Been thanked: 32 times

Re: OS Open Data User Scripts

Postby Timbones » Tue Jun 26, 2012 8:42 pm

I've split this thread from the other one, as it serves a different purpose now.

Twister_UK - great work by the way. You might want to merge these two into a single script, which should be easy to do if you test the document.location in the body of the script. Also, have you considered uploading it to userscripts.org? I did this with the Livemap Navigation script, and it's easier to maintain and distribute to users. I can help with either of these if you like...

PS: Or, you could host the script(s) on your own server if you prefer.
Timbones • UK Country Admin • Forum Moderator • Beta Editor and Routing Expert
Scripts: WME Colour Highlights v1.6 « NEW (Feb 2013)Livemap Navigation v0.72 (Jan 2013)
Timbones
Waze Champs
 
Posts: 2854
Joined: Wed Feb 09, 2011 10:33 am
Location: York, UK
Has thanked: 17 times
Been thanked: 190 times

Re: OS Open Data User Scripts

Postby xteejx » Tue Jun 26, 2012 9:08 pm

Yeah definitely get it on userscripts.org. Also, could we get some kind of versioning into it, or svn/github it in some way to keep track of changes. Helpful tools to collaborate :)
Area Manager for Kent. Localisation expert and translator for UK English.
Image
UK specific editing: http://www.waze.com/wiki/index.php/United_Kingdom
xteejx
 
Posts: 2340
Joined: Wed Jan 19, 2011 3:17 pm
Location: Sheerness, Kent, UK
Has thanked: 11 times
Been thanked: 15 times

Re: OS Open Data User Scripts

Postby xteejx » Tue Jun 26, 2012 9:14 pm

Bug report (lol):

Even if a previously opened link is open from the same site, the script will still open another tab. Any way to <test> the opened tabs to see if one is already open and refresh it?

Feature request (cheeky):

Once one (or several different) tabs are open, would it be possible to continuously poll for changes in lat/long and change it automatically according to WME? i.e. have another window open in a side-by-side Windows 7 click-to-side thing and drag WME in Window 1 and Window 2 moves too?
Might be hard to implement though.

I can see Waze themselves hating this, but if they see this, I'd like to remind them that this data is under a FOSS type license and not to worry. We can add something on the wiki something like "some UK data manually extracted from OS OpenData" with a link to their site. This is enough legally to be fine to use the data, just a note saying where it was obtained (read the license, it's fine):

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.

Source: http://www.ordnancesurvey.co.uk/oswebsi ... icence.pdf
Area Manager for Kent. Localisation expert and translator for UK English.
Image
UK specific editing: http://www.waze.com/wiki/index.php/United_Kingdom
xteejx
 
Posts: 2340
Joined: Wed Jan 19, 2011 3:17 pm
Location: Sheerness, Kent, UK
Has thanked: 11 times
Been thanked: 15 times

PreviousNext

Return to United Kingdom

Who is online

Users browsing this forum: yeramihi