WME Open Other Maps

Links for opening external resources at the WME location and WME from external resources

当前为 2018-10-05 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name WME Open Other Maps
  3. // @namespace https://greasyfork.org/users/30701-justins83-waze
  4. // @version 2018.10.05.01
  5. // @description Links for opening external resources at the WME location and WME from external resources
  6. // @author JustinS83
  7. // @include https://www.waze.com/editor*
  8. // @include https://www.waze.com/*/editor*
  9. // @include https://beta.waze.com*
  10. // @exclude https://www.waze.com/user/editor*
  11. // @include https://www.google.com/maps*
  12. // @include *wv511.org/*
  13. // @include http://www.511virginia.org/mobile/?menu_id=incidents
  14. // @include https://mdotjboss.state.mi.us/MiDrive/map*
  15. // @include http://pkk5.rosreestr.ru*
  16. // @include /https?:\/\/www\.511pa\.com\/Traffic\.aspx.*/
  17. // @include http://newengland511.org*
  18. // @include https://www.mdottraffic.com*
  19. // @include http://www.511nj.org/trafficmap*
  20. // @include http://nmroads.com/mapIndex.html*
  21. // @include https://gis.transportation.wv.gov/measures*
  22. // @include https://www.mapwv.gov/flood/map*
  23. // @include https://roadworks.org/*
  24. // @exclude https://www.waze.com/*/user/editor*
  25. // @require https://greasyfork.org/scripts/24851-wazewrap/code/WazeWrap.js
  26. // @require https://greasyfork.org/scripts/13097-proj4js/code/Proj4js.js
  27. // @grant none
  28. // @contributionURL https://github.com/WazeDev/Thank-The-Authors
  29. // ==/UserScript==
  30.  
  31. (function() {
  32. 'use strict';
  33. //var jqUI_CssSrc = GM_getResourceText("jqUI_CSS");
  34. //GM_addStyle(jqUI_CssSrc);
  35.  
  36. var settings = {};
  37. var gmapsIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAHiSURBVDhPY/hPCPx+9eLjtg3vVy/9evr4vz9/IIIEtL1fteSev9NdbzsIepwV/+v5U6A4SNvR59fW3TuGic5uXATXAEePMuOAdjIA9SguScKKtsS5AdXd8bZbbGEw0Uj7mLMFRCfQtQxr7h4FqnDZWLX37tmTD68m7emHazsX5AhUdMbVqkFXHYjmmulBtH3YsBqq7fD9i+6baoxW5VmuLVJemgLRtiPWFajotpfdbDO9TgPNA07mEG1fjh+Garv45Lby0uTp5zfffP4gaFsLRFtRXRBEHTJ6EBv07+dPqLbe02tWXt3fdHzJqYfXNJdnAEW0liUeOe39KM0eTdvnQ3tBIQnRBkRROzvzD0w3WJUL0XP0nPffO87fDrveQYqAJ211oGhB1gZHcD1/brtdOTX7XE8bRM+tMK9bFy9g1wbX8/d+4M9PV06dOnXowIGbMYFAbWcn9d68eROLNrien7fc3r+9CpT+8eMHUOe5vo7bIR6H9+/Dog1ZT9v8udnTzr799BOi89zO7VeKsw8dOoSuDU1PYMtRIELo/P798uL56Nqw6kHXCXYtQtu2+4dx6YEgZJ0PHz6Eavv7+QAePRAE1wkHDP///fr3du7RM1smbbqNB605+vgfVMv/////AwB1kYZCu5TA6gAAAABJRU5ErkJggg==";
  38. var mapillaryIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABGdBTUEAALGPC/xhBQAAAatJREFUOE+tlFtLAkEUx/er9CEyA+sbRM9BH8EuWhL0oC8h9B7dFAIXoqe8RGgP9RDkipoSZkJpeQk1N8swldW108ywa3uZLKKFH7sz/3P+c2Z2Zhj8GPzmEYN3jh31mkvoLSDgBwQplsW5XyaHZl4T+HtwLjZDDVYnSiyGt8CdCVE1DSwjlUgTIViMQafXhekTB1WXwR64IuqaTASs0BQ60O9/wHEhqtM1CNiIJoCNcxGTJJ8DUezD7Nk6NU5GZ2RCldgiLsi8FCHXKIPJb4HHJg/h6o0qTsvACC9ssBBD02mTSrLIZCXiJtpqdA8SfBbGfQuqZCUDI1cmCO2uQEyunu9JZcpAe8wD5+UUjCn6lKimNhWyQyDPQU8UofxeBwdKljVLeJsMIlephbrYM6dOMnqqngdH3ANWbof0x2u38PBWpU6RaiSDE7AhruSydgcXlTT5diYPdLFDjWSWuV30ByvEBPPUasBkYEkVg41+c0hJdWuJfai2XonZZvpIqQtDjwgNvOM3rv1QQnvLKK2VfES+PbTDMPrmlW32/66RwZ2EXKVp/uFiY5hPR2AhGcMUotsAAAAASUVORK5CYII=";
  39. var terraIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAACSUlEQVQ4T6XUzW/SYBwHcLLEg8aTmVdv/gV6EJ6Wlj6FQV0NFhEQeRMGpmgW0BnjxlB8O0iixpdMmS5ZiB58iWMzvmRZFjfRbOyw+HryoIlZYjyRqLvsZwvPRGIHbH6T76F52s/T9tdU10qy2Wx7NBqVyOH/RRCE/YwRLXAdLIiiOOl0OreQpdUlHo9vt9lscwf26eHjOIKjU3fBcrwPDAiVWZZNFgqFDeTUxpFleaPJZDpjxmjpzhUEv95TsPiBgp7XD8A5PQv2eyPAuD1A0/S8JElGcpl2XEqU3b8mDhrgy8sqtNxlsNKpGbBlLwHCGDDGuXA4vIkQtQSDQZfQoYdnw6gO0gRJpacTwHXFQHnPbwlTSyAQCF49q42p1QLVikN5FfxEmFqagYdu9EHnwC2Qxp7XgZ0Dg2sDAx496PXVMi4PiLfzVfD6zdWDP5RJx2QEgpsC6x4ENGOowJbefth5+Vrr4Lc3NIy+MMG5xxj6R/k/TY3wELvAAi+iyt02BX8qnXzFwqmxGqLV1CMedofpxmD5HQXDE5wmoNXQSWZl8OJpBLnx1jG1K4J+v3+XzY6WErnWwWN5DIILgcPhmCFMfbxer8Vs5j/vPUzDifv1g/i76lACKUaZNlpECHUXi8X1hNBMm9VqzdB4R7nrPPsPlhjkwGJXPiFBmM1kMtvINc2j/Em28jw/rT7SkSEOeh9icHcbgaKp75FIpCedTreRU1tPqVRa5/P5ZCNDL7BmAyibPAmFQpvJ8tqTTCbblfeLyWGD6HS/AREwNmot2NXWAAAAAElFTkSuQmCC";
  40. var wikimapiaIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAACeklEQVQ4T5VUTWgTQRRebf2v9Te0m5nNJjuzaRuxl4LoQUMPCnoRKcWjUD14K+LFm+LFS6ngD57Eo6AXEdGDQsSDilQP2oOK6EHSmN2djaFYawrZfm+yYlpCbB88mJ33vW++997sGM0WDQ2tUzyzN2DynOJOwWeiGnL5OA6vzD5LuUFxcSVgohhwWQfZHL5fY30xhvzf6pxvUklxHyQ1xcQfkNzw2IAbSNkd2fbGGNbeYiWT8FrAxdfAkkciw1gbOs62kGUHg153IIa2txJ394HAC5gzD5LDRFJhYhj9eQplPxSTD2Joe1OWe5l6goTrROJx9xDKm1FcRuQgexJD2xuAb6mxZUuKes/gFqh7pIlXTyTmAZ6inlSZ4+L7y1+SVRHpBCae+7v6tipL7EHTvzcTIaagsNDsZStNA1kTsMxIY885QYpCnPrpZyq1Y6Y3bWP9YQnRMkd8zmPOURIRWnJC7yezJw3dEyYXAhMT0zdbXMXewnKCfy6mvFS/GeXznRjQRyierfT0pUEkx+BRyMUrmlrRzO4G+EUrEhz4m66GLivpnkIepi0elhO5LqOUymZQ3nsNZuJS0TQ3R7nc+pDJCwC+RPI0FL7Dvbrt29l+kHRgPYw9HwfOhpY4TsQGqQB4xGdOlQKKOdcC7jJ96k7ZTWtSeQ8E0ehoBzBncOA3UgMBN0u4MnpqZAUj30nMANCPWvOTooxbPhFa7kH8g1bjRXDGEX9DzW6UKe6WE4mumGKpAbQfgGeQ7en6m/rTcPFLt8GSZ6dRfpzW2iq2vR0qDoDoNBInMZk7IL6F9XmUfSw0nZTuyUqNelfHy0BPDD0lVH4camGGsQj+znJFw2F9rQAAAABJRU5ErkJggg==";
  41. var bingIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAAB70lEQVQ4T62TOUtDURCFn/uuiCIIojYWKhZi7y+w8S9obS1iYmJcUQIuQSsRQWy10SJErFxQ0UKwECxMXELAECMhhMQc51xzJS/kaaEXJu/lzcx3z70zYwD4F1M/1dPTqJqaAp8lTieKHA7UyHv295/MBKKVTU6id20NfevrKBZgZQZSlfFbmQlUK2aMj8N1dIREKoWt62s0zs2hwuXKm5xtJlDdzAwMmw02n48OROJxtLvdSiWP+dMRyTAryoDS6TQCkQhaFhfVfXGTWjGdmAs1gbQi++EhHQi8vaFzZQVN8/MosNthiFXKMRmXq5AMS5BfFPV4PDi4u8Pm1RUGtrfRIHfGGFaWORpGhiUo+P6O+tlZuI+P1X+um2AQy6en6F5dRanAdIvIsga9RKNoXlhAlySd+P2IJRLqO9eExLDCzPkV9CygNqmaMTqKjqUlXD49qbZIfnyoFlGgfIpyq/Ygd8TyD+/t4TYUQkoAaolvaHdXxTInvyLZhbKZ9BqL4TwQYND3unh8xODODsqlepZV04rGvF46TOs+HMbI/v7XZtIG1RlI3qrROA68YJuoCouieDIJz9kZWnlXsgn7SDempSLtKJeRYBIHt39jQyngmOgKMS4bQjOBdBCfTOL0F8p4UIHu5FyAtm/Q3w3GJ+jeRjZzKMG3AAAAAElFTkSuQmCC";
  42. var osmIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAAEAUlEQVQ4T32Ue0xTVwDGL1vYw7kty+YykJAtY2FuIYASgyzBGTNn1Lm4ZE83idPJssUZ1i0ukT8U2YZBNGGMAUJb2tIHUAqUR73lJX15y20F2gJFkL54tLS08hLd49tpQaPZ40u+nD/O+X73O+eee6m+kORldlZmMfqkDYxHnMWy5eus3u4X7MGeA9qpBq50+MKQyFZQr/cKs/qnBU9c8ys3WgOqT2yBDvlwsKuUul/GWWkvAcE4Wo0+b+3KUIgG42uG2iWBYqwMSmsp5L0S0IxmpdvUBxXThTptNWx+tQ9A1BqGgHySE4xXAsbKg8EhgNmnADMjR5uDB4GhBDqrBd6l25hdvoPpxRW452/BOhOErFMBs1v5yhqGimpiS9OZGQn0k0LoBypxdUoMk68eV8ZroDYZI+GwJxdW7bp5C8P+RZinQ/iprOLkGoeiWJfy4EioE9bAZQxOtcDkrkWXswpc9a+RYIA08RMHV34nrW5jIrSMfu98xA0ao3sNQ1GWuTaxNajCoL8Vg7MtMAxXQ2j7mYAkcJBQuEF4dNxcxo3gMgZ9C/dA2jEPUlMzYimAihoINHuII2dzzS5Dnb0Ichsfks4W2AOLkXDYo3NLBLIKuGvd+CSSk9M3Urxu3mOGyZpl44wMrEsKZkyILlcV6AkxqhrrMUCCQ/4FWO5rcdcj5CEqAzudkJDwaHhn0fRIBW2YroHeTt7amACmmWbQTikq6ppQLKz9B2CAeDy4BDfZ6qlzRXnx8UnPREB8+myefkoE/XU+dKN8GJw0cS+qlT3YtWc/uI3tD0DCZ+WYW4CovfGPdz98+8XY2FefDYOiCkWc93QeATQuPrpZEQwWGU4XfIuiH49h74G9+Or7wxC0i9FqNEBlNpGxE0KVFHIND+crc/cnJiY+GQZR3TbZp+wUaeFug8ZZh29ys/HWzl3Yt2c7fhOVkrtUhdreYojpQkhVhbioOoXyjrNQmiV/fnxs3zaCeDgC6vP0CLvccjCTCnx98gu8mbkD6ekZ+JJzCJfJp6EbUqP/uhysvQ5X+rmoYM/gkvkMyrR5dhJ/LgIhekg1XuPQORTIzvkcGelvIC1tK45zskBrfkHvjWZoJzpw1UVgPiUUoyWo7M8D15KP8/R3fJJfbXPw+O6nmmy80JETn/21ZXMaklNSwcnPhtp+CS10iVPSU8honTWLOmc7GE8r5MMXwbXmo9x0ev4H/pHDEciaooleF5YcZTenbLqTtm1rHyf/qPCdj3Z8QOZeIn5+w4anU3IvZOdUKouk5wQ5xe9zdmetX//Ia2RuXRhwT3FxcY9nZm45tHN7SsGmpKTMmJiYBxesKvy7iCZe3cp/KQyLT4pcrP9f+K+iqL8B4XkGClAVarkAAAAASUVORK5CYII=";
  43. var yandexIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAABa0lEQVQ4T62TPc8BQRSF/SdfER8FFZH4ASoSnYpCIkGCjoRGpaHS04iWUqHS+0hQoxPHnR12dnauxvtu8uTOPfecm9lN1gPgX2HFv8CKGpsNMJkAg4Gs6zXJjO8NK1qcz0CzCaTTQCQC+P2yJpNS5zIEK1rUakAgAHi9JkLvdMhm5gzBYrmUtxFhcbNMBshmZQ0GpR6LwfK5slpjUyqp24jX2++BxwM4HIB2W82Ez5XVGptEQoUuF5Icz+mkZsLnymqNTTSqQvc7SY7ndlMzgSurNTaFggqMx3LJ8wlcr8BopGa5HNn1rNbYzGZAKCRDolYqQLcLlMtAOKwWDodk17Nao1EsqiCH+H7bLVn1nNYY5POAz8cvbLXIYmYMwWCxAOp1IJVSy+JxYLWisek3hK/0empho0ES4yFYkeWzUPxBxyNJjIdgRZbPwumUWmb+hhVZ+n2gWqUjM3PAiizzObDb0ZGZOWDF34HnBbQcm5EIFazJAAAAAElFTkSuQmCC";
  44. var hereIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAAB0klEQVQ4T62RSy9DURSF+69U79XWq9p6NDEgMRAxEI1XQjqQGBATP8AjaElJKxGPlqLCmDAyEI8IpYKqViJ+wLLPuXo5vSclavDl7L3W2evs5JgA/CtSsRikYjFIxWIwCGvrG1iLbFIp6oyd+B4dRv07QrOyGkFpWQ3hQHRjiyRNj25uw+FuhFmt5l5f/6Du5SM03X0+KHYXVIKd8d19kmFivZmCzIoWqNhc8HYPcC8fg+Dt6ofF6oTF5kSFw4NO6tlmJUoVGhpbeG2x1vA7zMufF5oc7HU2wLYxq9pGg0MjSKfTCIWXea/a6VG609Xro5GvWSHoOzyUtrRV1vGA4dExkjUvEo19hrp4aGu7V/eEkHy00K/B9UiMZM1jn5b7wPGpWV0XAmR0UKhSXouycjffNrYVJ1nzVlajmA+G9J6hF4UY6PFBpVDV7ubnwuISyfK7erH4lIQ/dY/Awy38j3cIMO4TmMs+IZy4wow/iIkpP2dyOkAjxjCGXsSeH+C6O4fn7RF1qRviGp73FOpvTnH0mqErxmEZQnOcSaMpecFDaom25CUuXrNkiUOFMAgHLyk03J6hOXGG0+zvN8shFQ8p9CTzQqXR+wmpWAxS8e/A9AGMrnKfuSpKAAAAAABJRU5ErkJggg==";
  45. var midriveIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAASCAYAAABfJS4tAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4QsdDy4g/1qyDQAAA1JJREFUOMt1lH9oVnUUxj/n+saS/lhSkBNKKJL+yCAiaQNtP2KBLgyMChuIe0P/qEgsMymzbNnmyKgIjLUpLDShpKJgQriEBhKD0IxCAyMhoyhyi7Xe+z3n6Y/37nU/6gvn3vu9nOe55/uc5x5rebSvif9fGRFnRwa3/9rS1QOIkcEdtJR7F4HdCgTw18jAM6daynu7gIcAAT+UQKM1Gs2gNEAC0zctXT0dI4PP/gTQ0rVnMdJRjMYi8xywDMVyzNqrGJaWiJhTpKoXYRKYsVziQHP51TUCJ9gv1Giq4f4AkGIS4QXFeEkKTEIGJhA2CjoPdGJGFa9WkvYaXJTZWiRUPVJxNGBqaidmL05XVyKcwGTimGBY8qNm1g38I1FXqOKCTUAdClBBahQywxeHd0dtA5QkATEmRfnE0Es/N2/sziLysikbBjYCh2T2iaS7gcdBqwQlapzVxqzs3PUAqKPgPV8KOcCdwIWVnS8Me6WyW8bpL9/bdRg43LT++frM7Fqhr0x0mWWHMOY5SYpGYEOx/baky83LgNXAakKDTet3bDGyVzDaJd0IXBFwAPl1VJs6y0QKpemuA3nJw+e7V2wA+13oEUwDkrYZ9hRm/ZZpYbheAzpnQrzKWzNWofE85gUSW0BNiOOGvS40cPL9nglgYsWD23+zOYiI2TyZh+PuuCfcE8kTyQMPfy653+wRYyeP9Gz92338jnVPFyR+IoUzHQApEikKjkiU3H2OCgIY//rDfX23r9vab7I9AKc+6KuVlIe/a9gvwOKaFB7UrA1kKYL/iI8AkseVleRjMz+8/P4tL0eod3Li0vXJ/VxeNN8lkl/mKKWiYrPqaCjW6SqxfwdWD/x5U8dmFl11NWNHendOJ91y3xNnkJYUuczs1yxXzHg/VeyHUuRDQHNlEqYWTM2SLfdkVmDy5DN/PLLcndydSnEvnpcAfP/pWxc8dHDpvZu7Lxx/hzMfv0HDPWUAbmjf9HCefG2lsEMlEhWPWmR5cvIU5MnJowhPrQDL1jzG+eH9Bz38UkNbeVtDW7nu4ucDXLNqo6WIJ1OEJU8G4Mnrqu5ykvvCUpo3NgFY0dBWbj372dvHq6DYR2a3Af0NbeU3gXpJd80ZtqNAfTHufvwXtm8nDnLoEBMAAAAASUVORK5CYII=";
  46. var NYFCIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAADL0lEQVQ4T2VUSUtjQRDObRzw7kSdgyKiiCIo7stBPMw4MyB4M4mDB8E/oF48eBJUPImIDqIgiOKCJ3HfsrgkuB4EBb0paojGLC8Jz5rva19EZxrqdb+q+r6upbtN/w4R+QKxQIZ1XXdrmuaDPGLtgW4EYn15eUk23P8fMH6C0/doNDp9c3Nzd3x87He73ZrdbtcpBwcHGnW0hcPhOfj/gH+CAX8dV1dXCVBaYLT7fL7gxcWFnJycCIBydHSkhP+np6dCG3xC8HUAY/tAhp9vANknJiai/f390tPT8ya9vb3S19enhGvquB4dHY3t7+87ga2LkyR7vd7ptra2SHFxseTk5EhBQYEUFhZKSUmJVFVVSXV1tZSVlSldfn6+ZGdnS2Njo2xubkaBn0V0KSSyoAZ39fX1kpeXp8ClpaUKSMKMjAxJS0uTrKwsKSoqUmQVFRXS0dGhUkeaDyCymtCN4fn5ef/g4KAMDAzI0NAQw1Zr7pqZmanImpqa3uxjY2OyvLwsaADJArFYbMQUDAbdq6ur2u7urng8HlVY7jQ5OalSSk9Pl5qaGsFmynZ4eCiojSALRba0tKSFQiG36enpybeysqJDZGNjQ/b29mRmZkYaGhokKSlJpdXd3a2A29vbgk1lbW1N+XJeX1/X/X6/z4TPI5Q6FGqnra0t6ezsVCnl5uZKc3OzIiARbSiwEuqIIRGCeWRqHkSj0ciwWQcW3Gw2q4IzJZfLpYD0iZPx34hKIweLPQJWP0kIslgskpqaqtrc1dWl6razs/MmJIjPJMLMYv/h1bBeX1/fcZfW1lZ1RtglpuRwOATXRJxOp4qKM3WcScYGXV5eesFhI9FXnKU5FDhSWVkpiYmJUltbK+Pj43J2dqZqQ/B74aZsCq5LNBAILJAjfrrrAHC0tLTEysvLpb29XTkyfNaEM8HxTpHs/Pw89vz87AL2pyLhwA8vrQ2hOqempkKLi4sqJXaFYJLEC8wUEUkY3SbJb0Tz2aB5HcYLwKdh9v7+/oEnFic3gnroiEAHcYS629vbBzw1C/D7Bfn4jLwf2MEMBytEPWx4e3yQ9w+bDT4phrsxTKa/NeZmq7YI4fAAAAAASUVORK5CYII=";
  47. var rosreestrIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAABy0lEQVQ4T2PABdbvPy+w//R1h+v3nzvsP3/d4fz1+w7r9592gEoTD05evLG/b+rc/8Xldf93HDjxv6656//ClZv+3338sgGqhDC4dOvetcTU7P/Wdq7/za0c/2/ZdeC/pY3zfztHj/8tnf2/rtx+6AdVihvsO3lhVUpm4X8zSwc4BhkEYzs4e/2fv3z9//X7zwRAtWAHdU0dq2zs3XAaBMJpWYX/dxy78B+qBRPcfvLSqrii7gfIO8gat+5GNcjBxev/6cu3cBt0/PJth92HT4E1IuNDZ6+h8LfsOvj/4LkbuA26//y1Q15xJYrtIAzSjMz3C4r8f/zCTXIMOojCb2zr/r/lwHFNqDZMgMugbXsQBgWFxfxv6ZoQCtWCHYAMyi+uQjEEhHfsPfzf2y/0f2Vty/+d+49cvfX4sQxUC3ZwGBjY567f+3/55n0UfOLK3f8nL936v+Xwhf/3778XgCrHDbC5yMs35P/p6w/fz15/mPh8hs2gvkkzgAY9Ji2zohsUFpXwv6OjH3fs4AIggwpKq8H5KTYx439Ley/+2MEFjgPLnC17Dv9fvXnX/43b94Y+fvMGf+zgAmfO/Ge9deuZ6DkghgoRCRgYAAGFe4VDwIAnAAAAAElFTkSuQmCC";
  48. var PA511Icon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACClBMVEX//vz//vv8+/r4+Pj7+vn9/Pr///709vfn6u7U2+Td4ei/ydmotc/r7fBziLHHz92+x9qsuc/y9Pf////29/fX2+b9/f7+/v79/v18j7Q9WZPO1eH//v7n6u3+///AydpbcaG5xNfO1eS2wdiyvtavu9TFzt7m6e6/x9j///3p7fDDzdu+yNkML3kaPIDk6PD5+fktSokWOYBMZpxBXZeDlLbd4us6V5EkRYTY3uhFYJUYPH/7/PtziLMzUpKRo8Pi5u0QNYA1VJOTo8Wgrsjv8/aRpMEAH25je6mltc0CKXU4V5O4w9Zddqdrgq3R1uQaPIE8WpROap8AJXJofqzGzt0AJnOFmb73+foWO4BIZJnd4u1Rap9cdKbK0d6Aj7Xr7vH8/vwZPYRHYZuotc0AJHWntM8CJ3NyiLDM1OJacqNfeKiTpMEAHnC0v9avutIAI3N6jrKYqMcAHm7Aydumss0AG22frsqKnb5feKZxhbDl6e5FYJYpSYgnSIlAXJjl6fCClLgdP4Lh5OqOn8AbPYLV3ebs7/NlfKpOaJy9x9r+/vzr7fPt7/Tz9Pbx8/b09/b29/h9kLRMZ5p/k7jZ3+l6j7ZOZ5uNn775+/v//v35+vrJ0d/t8PPu8fXd4uqvu9OMnb1Sa6F5j7XCzN78/fzQ1+K9x9m1wNaksc6aqMart8/X3ef+//0JSeH9AAAAAWJLR0QTDLtclgAAAAd0SU1FB+IDCA8HAr9f8sAAAAD7SURBVBjTY2BgYGBkZGJmZGFlgAA2dg5OLm4eXj5+AUEhYWFhBhFRTjFxYWEJYTZJKWlhYRkGWWEokBMWlldQFGZgU1JWUVUTVtfQ1NLW0dXTZzAwNDI2MTUzt7C0sraxtbNncHB0cnZxdXP38PTyFvbx9WPwDwgMCg4JDQuPiIwSjo6JZYiLT0hMSk5JTeNMzxDOzMpmyMnNyy8oLCouKS0rF66orGKorqmtq29obGpuaW1r7+jsYmDr7ullE+7rl5gQMXHS5CnCDJowhwlPnTZ9xkxhhlnCs+eYzZ03f8HCRYuXgPwyi23psuUrVq5aLb9mLRsQAP2OCgBLzD+TNb5HDAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxOC0wMy0wOFQxNTowNzowMi0wNTowMAebKzMAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTgtMDMtMDhUMTU6MDc6MDItMDU6MDB2xpOPAAAAAElFTkSuQmCC";
  49. var Miss511Icon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAABjUlEQVQ4T2MYWsClYXM+Q/CcEoZAVGxfvakkpHWbKFQZflA272iXXOqyXwxBs/+jY8eaTf+jenfpQpXiBpuP356uV7j6B1PwHAxDQNivdfv/7BkHCBtkULTmElvYXKyGgHDipL3/21eexm/Q2iM3luHyEgwXzz3yf96u6/gNOnLlwQ6zsnX/JRKX4MT9G8/9P3DxEX6Dbj58saNvw7n/dUtP4sRHrzz8/+jFW/wGXbr7bEf+nMP/I3v34MY9u9yhynGDG0AX1S498T91yv7/KVhwzsxD/4vmHcRv0K2HL90qFx2/IZm05D9H+DysWClj+X+jojX4DVp96MZMy4oN/3GlHxCWSVn6Xy+fgEEJk/bOlAYqxGYADIvEL/qvkLEUv0Hz91yd2bP+7P+GZSf/1y87AcfiwCiHGcQdOf+/YOxC/AbtPnOXf9mus1JzNqBihfTlcIOYQ+b8Zw6bh98gXGD2jkv/PZu2/m9ddfp/84pT/6sWHiXPoFWrVjGHhq5iBtEgzPD/PyNUCgoYGACx+Fztt2VvAQAAAABJRU5ErkJggg==";
  50. var LAFCIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAARCAYAAADQWvz5AAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKM+Vkc8rRFEUxz/MiBhRLCiLScPKyI8SG2WkoSZNY5TBZuZ5b0bNjNd7T5Ktsp2ixMavBX8BW2WtFJGShZU1sUHPeZ6aSc3Cvd1zPvd77zndcy5UxrNKzvT2QC5vGbFwyD+TmPVXP+HBRzNeWpOKqY9EoxHKjvdbKhx/HXRy8b9Rt6CaClTUCA8rumEJjwtHVizd4S3hZiWTXBA+Ee4y5IHCN46ecvnZ4bTLnw4b8dio1NYo7E+XcKqElYyRE5bKCeSyy8rve5xKfGp+ekp8u6w2TGKECeFngjFGGaCXIbEDBOmjW3aUie/5iZ9kSWIVsTqrGCySJoNFl6jLkl0Vr4muysyy6vT/b19Nrb/Pze4LQdWjbb92QPUmfBVs++PAtr8OwfMA5/li/NI+DL6JXihqgT1oWIfTi6KW2oazDWi515NG8kfyyKrUNHg5hvoENF1B7Zzbs99zju4gviZfdQk7u9Ap9xvmvwH7o2e1G6/3lQAAAAlwSFlzAAALEgAACxIB0t1+/AAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAAJJSURBVDhPlZRPSBRRHMfX3Zm34+JCFFoKHqIuHTxnoVSUUJAX0xWL3Cz6Y6ZphZm5TMm6amnrzJt/C3rpWl4K6iDU0Q5CaAYRdQhvarf+0AZO3zd/lhl3GegLX2YO3+9n3r73exviCLkHf208cnReVrUVWdXf3R2+/0ZS1AXm0fTYa04Q5iLR6PFQkBB4AtC3vv6BTarqJvPk42nrySxR1dxVVfWRi0ZvOJXSihBi7K6uXsxKtFDuvdlfeGduOnnqE0DziIftVglhRTNn2to/eIsp8YEPdL23bxMf1BHn7FYJCRUVjSnxYd5bzEw88oHGxifz8Xj8oFMpLdM0y6iqffEWL1256gPBEqJldiNACE55i8mui4V3WdH+SIaxz4kGi1KjDqW/bnng9h0PSF8SRbGwN2bQyrLZ7A6UfrllnxVtDasampGVoZ2VlRfY3OGARuFMKBbb4yBsUU07jdKWWx7Zdmqu6w83rGIM8rAJ4DqqxCY4wldfuGE2Ty1tiSIIc8f5zh9YyWcLxICC0OAgbCH0yg2zqW5NtBdBmDEmJsrvHRDzS9QjNgXCHVt1w+nMhJnoOFsEYWbXpaa2dtmB/AwLQpLn+ToLoijKfsyRgeAUTuj58Ejq97nOJCt+lzV9ml1kL+zYiaYN7M8Gg+FnLnPl5fUWaLuam1v3dvf03MK/wGAul4tROltDVeMZTs46jMvXurcAWsCVWcRzDhX/hgfJmn6qdgG2lM6Mz2I1TwkhBwAahN+GeT7hRP9bAsyzF2z+oQghLf8AAjyYhRxw+xIAAAAASUVORK5CYII=";
  51. var RoadworksIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMjHxIGmVAAACFElEQVQ4T7VTzYtpcRieLOxY2tiIzZQFykJkIkRGoixEkjSlCFkoSzv+AhulLKxmp2wpKWY7avYsuMpH+dio+9zzvhzjXuY2d3Gfejq/834853nfc87DfwGAGxJ+CqDrYrHYrdfrHxz8G+4J7fd7zGYz9Pt9zOdzDAYDHA4HIfX5oBuISZGbzYZFGo0GhsMhptMpWq2WkPqsucF1krjb7TAej1GtVtFutzGZTPD6+opKpSKkvym0XC7x/v6OYrHIjSTU6/X4XC6XsVqthLJvCBEjkQgKhQKP8vb2hmQyiVKpxGNe192AgtRACIVCyOVySKVS3ExOstkswuEwut0ubfq+COGcRL1eRyAQwMvLC2q1Go+RSCSQz+fh8/moRKw9d/6B0WhERXh6emI3NArto9lsIh6PI5PJwOVyUcl9ITFIC6ZvxWKx8EjpdJqdOZ1OPpNDk8kklH7hRkwcj0d24Pf72YHBYOBv6OPjAzqdDtFoFGazmd+g2EO84CrI1skFLVuj0bAQUa1WIxgMwuPxcP6Mr4VUKhW8Xi+en5/5SmO53W4miRDlcjmEX4/KL72/CVGSiux2OxwOB7uzWq3QarW8NxKj+OPjI2KxmNDCuBWiHUmlUt4DCRDpTM20LzFGD5JIJCRCOIkQ6IZIjmQyGWw224UKhQLb7RadTgdKpfLiVq/Xw2g0spKAkyvx8K8UcbrHwy9Ba5ZwWKd5ZwAAAABJRU5ErkJggg==";
  52. //var NJ511Icon = "";
  53. var NM511Icon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAACg0lEQVQ4T6WTX0iTURjGF10k3QVO56CLQPKmDBUMUbEyDYUwXSOFlQqCf6AIIyhRWtIwRBGCJPVCqzUyNrzKNGem3yRJpvvC5qbml6bln/VtTTedzvdp06+CZGDrB4fznvc87wPnPeeI9gIg3y+EwUPzjck0WdAgLIMDXEoIfa1XkPXKMzDHDwnpfwNAKFlzMmn6qo4m8nVkjGoRtvbGB40mvFcuVzIymXKmuWiQ7yoy/xjIN6+8STSaKio1/nxvWVmpIA+MsbY2eioiAjZJOFZLJPCOFGHLfBPe/mzwcaFYCgvDYFbWW0EeGL8RJ5VivToGWJv1nRDY9G6ByDe4J+CTxOhNO6cU5H8gonD/DK41hNjEDMfr9NKFi2IQz8Lp8mCBd2N81g7rDA+Hcw2eV9dga481kim+hSzZZ/y1vyG+I5mW2xX0+ZbOM35D71LLoHrO4tFLC0obh1D1dBTlLe8x882B9SkGdl1KOxlEMnonyiHGN+bqDu8YWfMqyHJJTZZcrddcqHe35uGuhkV9x0dcrmNQ2GDYNhyfsoE3MXB0Ksw0fV1Hs1WVxN3OIffkjpEfzN85SOzJBxsjSTpXUzoswywu3OvDC4bDxBc7+kbn0GmYhrvtPha0ijYyHDhNXHmMUL6b7WZHSOGUncX64iJca5uwOXy98Wxio78Hy5FS9KSl7W723/y6NbtEAvuxKLgfVsP9uAmrykIsRR7BnFiM7tTUvRlN+N7RWELC/HBsNOvsPu+wd2WMrRjkDpNK1cAUFyuZmppTgjwwAyqVeCA3l/mk18f71zR6QkvWAjWxcdptQbDQ985M36dV01LzUSEVPDRZohbC/wMQ7RPCAIhEPwGmF45ZgI9RNAAAAABJRU5ErkJggg==";
  54. var WVFloodIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMjHxIGmVAAACvElEQVQ4T42T3W/SUBTA+88oDCjQUr636OY+oGtH+Sg4YLBNmPsQaEtpESWbiQ/G/8DsxT27aNziXLI5xxKzrYx9RxPjHoxPJkYTE2OicvEy0Omi0eT3dHN+59xz7rmI1sXp3LyW5LXujM6VQd0cSnL6XkFP1THQ2QZGWsRo4SdNDe3lUZJHXRm9mzOQvIEWrX6pLSzjXtlURyL8sonJmb0ShGByiI7k6g5M6cnhjGRiZMKbt7Ly3Ky8W+I7orIjlC/enpq8VRCmblgY0XIsIzAaa6ZsYgvKCw8EsGMFW9jB6khgNPflRT/YsR2uTZjotMUrQhDoNGjcxxHMP5nnwLYFKCpItWJ4Xer7WiFqivpwOWZwjRB+iQjkm1q9jg86culRurptrimqmnK2yaa6jqI+WB7QdV8ifDlzQG5oEuzKGcw9e5wC22ZY5MQ5QX2wFNG0x7E+3sSICErxeoq3s+L64jiowDqnon+wqXq7TncGhzCKM1I8Ah1nUCwvjVYrpuOIP5aC2llQ1r/ZiFODPEbzCO4RpmduvlM8f7nbb3za6rw3W3R4U4gBbgOZXrk/DMr/1FSvnobOOFm0O4kYaNgbt/pwBJThuE7FnUJ1tBZWn49gvRNQg4vHl+YuV5X/0SIt7VGcSiPGPhHz5ErzY0BpgeP6dSSgTuOkgRpqmo4BjE4h0IGPtrJY/LgbAHvnQFlXd8oasGP/vEdV97trW3jDARX8aGNc2zVI+HioiTgjtrE84YolM8nNheS3lwPPV4eLkwk7GWFiQzPTo+/3Yh/243fvJMlQVN+TIHwCQvgkSyBvYSWzTzB7OZwaM3bF0M640Z0gPFesfp7wpIyuYbQjrLkQRXsSJk/a7BcQW7BgZfO2YN4eKthDV+E3sbEixBmSW/uvtYavt4YLjouy1Z+1BrIWVjQHsoRf+A79jNM0D/QKqgAAAABJRU5ErkJggg==";
  55. var GMDMIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAINSURBVDhPnZPfS1NhGMcf6A8QgpIVpczN82vKCCyoLvpxWdRutMn5uTGhvJEoiIl0kxeDLOqiKBqSsKCrrIyCJhGlIl14IavAMFs4IU3BmIUz9+054w3GcKF94L047/t8v+f7Puc5VBVZ95Bih0ixukhxoiQ7+8TJJtCcTvLpX8lrgBrcZYJ2t6+SbKZI7vCIqipoVjf5LHiOX8SlW4MYHn+P/icjOBS7CpKjIMmaoGZjp6iuQLWDVNe+5j8Rx0xuHuX8LhYRS6RAfhukmNeFogLF6CPJwY1HI3g9vYJnk9+R/rCIpZVCySRfKMB/qgdU3zZHgXCtUJXREE5vP3oBw5lZJMe+4Vo6i97nMxiaXCgZ/FoDTncnQXtD66TpLUJVhi/8quZwF95+nMXSz3VkcnlcfjqNHl73x+fwYuoHQvF7oLpqBrJ50+347cE3pTe6vPuyjP6xHB5OLCC7mId0Ms4JwvMkRXcJVRmqtZ/8erH2yHmMZj4Li78UEe0dAPm4iaqVFIoN0OyE2+mag504m3iAgaFR9KVeosW4wmKeh0b7E8/JHlG9Aa2t29jkMckRvmsbd/yM23WQVwfvL/OXOiAq/0EwsoM0c4qaYm5cFjqgAA+RauuiYhOozjFq1AsU4CTNHWxi3BEnW0Ax71LwnJsgW0q1ZSS7nqOv8jXiYuc/0Ph3bop4xVMFRH8AgigQaceEwpQAAAAASUVORK5CYII=";
  56. var PennDOTIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAQXRFWHREZXNjcmlwdGlvbgBjaHJvbWUKNi8xMy8yMDE4ICwgOTowMTo1NCBBTQpPbmUgTWFwIC0gR29vZ2xlIENocm9tZYnkUN8AAANFSURBVDhPpZPfb5NVGMd74YXxTh3grf+CXbuhkHUrqXZZMWgEg8lUYFXSICPbiEw0c0F0vwoUN+THZlZr0ETmiIYpdOuK7WCsQFiHrLRAu7qBLf2xMsYce/14+p4u0Wsvnve85znP8/l+z/Pm1eRyOf5vaPKPIrODolcccq2wU7Sug6LKQzJXeZiV5oOsqmjlGdMhnjD1oCl3saryKJtsO+k/aZCQFTXf8Ow2JytrXDz51gmequ5mhdWl5p6zOnl6qwvN6yfRbPqZ599zUmPfjvuSjnj8Bb78caOEVHWMYLGPYG6/gP6TYUqbvFS2+7Ec8GNsuYa2aQLTvn7sfbsJ3TbAYz3hmBnrVy5e/HhAQtY7rqlhOnCVdW0BEZcpa5ukwh7F2v0r33tsxOJr1Oa5bCldZ/aztiXMtqPfEYwYJcTs+J2XHdfZcOQGrx6JYu76g3e6/biG6rj/52q1OR8TEQtbenxov0jSOdAsgCXwl05CNvfG2Nh7l6oTs9R8G6J3uI3pGWF7Uac2P8rq6R9txHIsw4bjdxm8ugUWxNnDYpjVSsiO04vs/GmBLs8PhO5UycN80SMdmeRaOgdPUX58idpTQW7G1ktnc6Imq1XrVEi7J8zoZB2P50pVe2qBiPi0hcPeMd7tU9h3dpTpeyYJyGklQIjlMmsk5H7SKJUfFMsQhzdjb9N6PsoHvyj0XPSSShmlwDJAiCgP9fRdOSYhy3dTAfM6AhEbzd4EDUMKzoCPdKpciuRrlkPsL4et1A48kJC/swWImMFYpJ4P3Wm2nlHoujgmAEY1/x+A2CcSRlq8IerOKhKylJVz8IXq2Ts0yw5xhc88EaIz5oKDwhDza66YpTk9rjEXtQLQNFyAKAJyJbKL+nM53hcO9rqTTESrVcW8gJLRqTVKRg58/I6NBvc8u9wKewYLkEB4D+3+NB95FOrOLTB8o1FVXEiXMJ9eLddUiepmNllG96Ugn3oVGsXM8m5UiH0kSfN5hf2+JU6PO0knysgkDKTuVYh3A+mkgVzyJRYzJbivd9IkAK1+8dl/+5eTz31iBiLxdSDI+K3tTMY2c2uqmujUm+KfeYOp+GvMTJsI3rZxUAjmmztG5DwaBOQfz4NsOxz77pAAAAAASUVORK5CYII=";
  57. var BogotaIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMjHxIGmVAAADAUlEQVQ4T7WTW0hTcRzHz/8w6CUKISiioIhKikCbzpk3VApvky6ardK2uU3nZc7NzbnUxGvO27zmLUPEa5luriP24AnqIXywAjOhHpTwpad6jfLb/xwHIpOe6gc/DvzP+X7O7/f9/37MPw+p2lMn07ob5LoXt8Oy55LC9V69XOful2o8qyHZnpUQjbtVluNVRufORUXkcZFheo86Mp9z+uQ7kWga5EubrZDrplDblYfGR3pUdRQiu6oeiUWDsDjtqHCZYGwoh1Qzg6wKJ2Q6z6pPvhOV7Ua+hgLiC4ZxufAJYgyjMDeW4V5Fo/i0NdlwxTiEtNIOFNRVimdKR48/6Jq1mxf+aKq3Yu2VBN9WDonJDbN4/YzFj7UD2PxwBMvz+zA+lYLWATUicqb9QeG6Sd7RakGJ04qwIIL0ZIK3syw0GQQPTARvplkkxRHcUhCMTSlQ121AqHaP1oJUbl6qeQ7Bp2oLQcBBBoGnGBgyCZSpBMHnGRzYz8CoJhidVIB+T0Fz/qCbdhd/v82MMlrVMsfiwlkG9HhXHj3MYGFku6I0W+feFVmbbXzH4yyUtxXj+woLrZJAItkNyrxOsLnEYnEhHEX09vLq6v1BqeYe0SOhNWywWFtkYcslOH2CwcnjDO5cJXhHK8UXVjT7IR2P2PxJf1CwapbPqa4WQVvdVNDJormcgPiqEQzfaqPZwoqttfRr6K3N+IMu6Sf4YPXsNqiHRVMCwbCNRVQoQbycYLySoC+Rgvq3QaHZ03ubbW8pESdbGMDf6xJ86qNVUXG9jaDZQQEqgo1xekbbFrwUJjvBNOIPynC0v3T26nC3vEn86OlYIj5yZ7A0J8H7eRbr3DFw7hg4Ws3i2ghmKyxDyz75TtAlTZfrJn419WnFFaGeIcPuQk1XvlilMDdCKsy96B1WIqW4/2eIxnPDJ98dsQavVKbzChv/+SL1S9gn14AKrkEVDLVVIijaMPGVzk9nXCF3zif7eyTbvQERBk5BRSOhWjcn13tyU8x8oO/1/wqG+QNiJs5Og1W2+gAAAABJRU5ErkJggg==";
  58. var ZoomEarthIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMjHxIGmVAAADhElEQVQ4T32TXWgUVxTHB0F8FTO7Mzs7mcl+RY3GBk1VTPwINcGvULFqQPoira1t1RC1+CTxQaTUtulO8SEPbUBsaUFpQrKmrK0sWY3ZZTfRzc4StjHFRNeNawyJlkBY8/fcu5NW0fYPl7kz957fnHv+5wpvUktLy+Lh4eFKM2Ua09PTxtT0lDFwZ8DIZDJlbM3a9v9KJBMHR++Pjl1pv4yPjhzCrr07seu9Hfik8TA6utoxMnJ3LJ1O11vb36zB5GDw2vVrz8vXlUNy2SC77ZBddth1kQ+HS8K6TZXoi97Kx+LRoBX2qkwzGfzh4vdweGWIJSJsNOwlBGMgNicQmztK7NCXqfjpl0swU4Mdfv/RRRZCEKgeBwPdXc8VjwRRLyKIjUMkykiiYIm9ayJ/OticoKpXQncwgHg82sAhbW1ti7PZh2MVdBwGESlALVXh9Cn/QihQ0m0oLnXCtUzj32SXiJrtG/Hg4QOztbV1IcumMtDdCZkWRY2BilC9tQrZ8SzOf3se67eshcMtYdXalXgy+QRb6jYRROIwp09CNB5B1x9dutDfHzNOnmqiP1JdOEjkoHnNzMwg1BNC0+eNmJ2dxebaan48B5mh+mR8891XuB763RBYj+zZX2+BxNdA85qbm+PPmtoNUEqWQNGXwLNcxbETn+FR7pEh5HI5Y0/Du1TMQjZsbCQQC8zn8zz4Ze3etw0Vb5eifLUHZRVuHG06jEw2YwjhcMg4TmkXjkWOMVBtFa/H+x8eQEegHc+ePbUwwDvbq+FbrmDVGi8Hffn1OXR2thsCa/urvwUKR6PBHGIg6m743vLxHmKF9l9owcTEY2yu2wDNbYPus6PYa0M01odIJFLE7b83em9sTdXqf0DFZL+2lNkscYcUt8ybUSP73WUaij02aORYXX0NRv4aKdjPlL6brg/3hvNqqVLoGcpCpr5RCMIcclJjKpSF4hahL3UQRIZ3pY6emz1/307eruaQefVFeoM//nwJikcudDUBVZqrHnYEyooaUKVMGMi7QqML/CsischlK/xVpYZSHaxezH6ZmtBJ945dBY2GTlm46Y7t3F2HnhshJM3EFSvsdfn9/kVDfw415CZy5o3eMJrPnsbHRz7Ap42HcPaLM4hE+zA+njUTZmJHc3PzAivsvxWLxRbG43F94E6/MTU1aUxOThjkjpFKpYrYmrXtJQnCCzP4PmtswqUfAAAAAElFTkSuQmCC";
  59. var WI511Icon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMjHxIGmVAAACoUlEQVQ4T52SXUhTYRzG3yUUCRJS2IWWJEFFRjcRFXXTldRFRBB1UURmTptzQy2dpmuZmoIKlvNGrGnbzjZ3tjPnx+bIY9b82Jluc87NpWtz8yvzYyjzC/vHkVF4lS8//jz/h+d5DxxehDKJvYAy1XsBsVV/s59LnCrufNhIFbU6snBbhWFMbJqMztUeK+z4J4ky8DAnBbp7DQMHuOqww2Dj+zJV+ZqRbvfPxBJD2IeakuZonja2oC287qauZ9w1G0zgd/xZEas5gd/umF6+WkVeqyJdM8HR6WWgTOc8W6wH/259H48YHg4sJb7RzwZDKkuAwYLaM0WXa257e7tIO/JSYwcBM01ijsvXWv2LsDIl5rXNLahBUjnkr+lyny/pRChdbg8sDfoWIjnK96R7yLdQqBle39wS9f0o1zuhcOS5emY5JB7wQrLS4BJ2f79Z2wM1GUZ5VRY/iBZb4AVujeIqg6GNBuNEm31qbDYYX6CFb/LUNggQVr+o13NG0I5QGna/3hja2DrNb6vQja6ub3rmV36trF0q7/QvrsJFSTUk1G7V9Vws00tNXuXgJFQQYmIR6bIv7jn4DderPr9utd94132QrWCkYfE8zeFsPIrTfKKg5UKpTk755JQ3Lo+ACtSkQEw27phaglvhmDzztElznEdwZGatzV+hc8Tmqnd8lCqhOcRRCMmxSv1ohtT0qsVWbXB+NI7jgz5Jv4eNUecErVfe6thSaiePnop3w0gVR3MU8bmqmKzmCKaENkFEsrCdDEr5tBdQShPAEvfnKMwP6r9yMdPl0naYt2tJtmTgUcO3O0Ly8QdjUrWBT1hB0HmEnjQCxJCvqXec2dgr7HLCLFJbsmQmgcbKJyzS/gkQOXIKXo2S8tJ5hJJF/02y6DfOCv0wOzejpgAAAABJRU5ErkJggg==";
  60.  
  61. function initInterface(){
  62. var $section = $("<div>");
  63. $section.html([
  64. '<div>',
  65. "<p>The below maps are legal to use and do not violate Waze's external sources policy</p>",
  66. `<div><input type="checkbox" id="chkMiDrive" class="OOMchk"><label for="chkMiDrive"><img src="${midriveIcon}" height="18" width="18">MiDrive</label></div>`,
  67. `<div><input type="checkbox" id="chkNYFC" class="OOMchk"><img src="${NYFCIcon}" height="18" width="18">NY FC</div>`,
  68. `<div><input type="checkbox" id="chkrosreestr" class="OOMchk"><label for="chkrosreestr"><img src="${rosreestrIcon}" height ="18" width="18">Rosreestr</label></div>`,
  69. `<div><input type="checkbox" id="chkPA511" class="OOMchk"><label for="chkPA511"><img src="${PA511Icon}" height = 18 width="18">511PA</label></div>`,
  70. `<div><input type="checkbox" id="chkMiss511" class="OOMchk"><label for="chkMiss511"><img src="${Miss511Icon}" height=18 width="18">Mississippi 511</label></div>`,
  71. `<div><input type="checkbox" id="chkLAFC" class="OOMchk"><label for="chkLAFC"><img src="${LAFCIcon}" height="18" width="18">Louisiana FC</label></div>`,
  72. //`<div><input type="checkbox" id="chkNJ511" class="OOMchk"><label for="chkNJ511"><img src="${NJ511Icon}" height="18" width="18">New Jersey 511</label></div>`,//NJ does not directly use the map at this time
  73. `<div><input type="checkbox" id="chkNM511" class="OOMchk"><label for="chkNM511"><img src="${NM511Icon}" height="18" width="18">New Mexico 511</label></div>`,
  74. `<div><input type="checkbox" id="chkWVFlood" class="OOMchk"><label for="chkWVFlood"><img src="${WVFloodIcon}" height="18" width="18">WV Flood</label></div>`,
  75. `<div><input type="checkbox" id="chkGMDM" class="OOMchk"><label for="chkGMDM"><img src="${GMDMIcon}" height="18" width="18">Gaia - Mexico</label></div>`,
  76. `<div><input type="checkbox" id="chkPennDOT" class="OOMchk"><label for="chkPennDOT"><img src="${PennDOTIcon}" height="18" width="18">PennDOT One Map</label></div>`,
  77. `<div><input type="checkbox" id="chkBogota" class="OOMchk"><label for="chkBogota"><img src="${BogotaIcon}" height="18" width ="18">Bogota</label></div>`,
  78. `<div><input type="checkbox" id="chkWI511" class="OOMchk"><label for="chkWI511"><img src=${WI511Icon} height="18" width="18">WI 511</label></div>`,
  79. '</br>',
  80. "<p>The below maps are for <span style='color:red; font-weight:bold;'>reference only</span> and <b>no data</b> should be copied from them as it violates Waze's external sources policy.</p>",
  81. `<div><input type="checkbox" id="chkGMaps" class="OOMchk"><label for="chkGMaps"><img src="${gmapsIcon}" height="18" width="18">Google Maps</label></div>`,
  82. `<div><input type="checkbox" id="chkMapillary" class="OOMchk"><label for="chkMapillary"><img src="${mapillaryIcon}" height="18" width="18">Mapillary</label></div>`,
  83. `<div><input type="checkbox" id="chkTerraserver" class="OOMchk"><label for="chkTerraserver"><img src="${terraIcon}" height="18" width="18">Terraserver</label></div>`,
  84. `<div><input type="checkbox" id="chkWikimapia" class="OOMchk"><label for="chkWikimapia"><img src="${wikimapiaIcon}" height="18" width="18">Wikimapia</label></div>`,
  85. `<div><input type="checkbox" id="chkBing" class="OOMchk"><label for="chkBing"><img src="${bingIcon}" height="18" width="18">Bing Maps</label></div>`,
  86. `<div><input type="checkbox" id="chkOSM" class="OOMchk"><label for="chkOSM"><img src="${osmIcon}" height="18" width ="18">Open Street Map</label></div>`,
  87. `<div><input type="checkbox" id="chkYandex" class="OOMchk"><label for="chkYandex"><img src="${yandexIcon}" height="18" width ="18">Yandex</label></div>`,
  88. `<div><input type="checkbox" id="chkHere" class="OOMchk"><label for="chkHere"><img src="${hereIcon}" height="18" width ="18">Here</label></div>`,
  89. `<div><input type="checkbox" id="chkZoomEarth" class="OOMchk"><label for="chkZoomEarth"><img src="${ZoomEarthIcon}" height="18" width ="18">Zoom Earth</label></div>`,
  90. `<div title='Roadworks (https://roadworks.org/)'><input type="checkbox" id="chkRoadworks" class="OOMchk"><label for="chkRoadworks"><img src="${RoadworksIcon}" height="18" width ="18">Roadworks</label></div>`,
  91. '</br><div>',
  92. '<fieldsetstyle="border: 1px solid silver; padding: 8px; border-radius: 4px;">',
  93. '<legend style="margin-bottom:0px; border-bottom-style:none;width:auto;"><h4>Map Language (where applicable)</h4></legend>',
  94. '<input type="radio" name="radOOMLanguage" id="radOOMNoLang">Do not set a language</br>',
  95. '<input type="radio" name="radOOMLanguage" id="radOOMWMELang">Use WME language</br>',
  96. '<input type="radio" name="radOOMLanguage" id="radOOMCustomLang">Custom language <input type="text" name="txtOOMLanguage" id="txtOOMLanguage" style="border: 1px solid #000000;" size="4"/>',
  97. '</fieldset>',
  98. '</div>',
  99. '</div>'
  100. ].join(' '));
  101.  
  102. new WazeWrap.Interface.Tab('OOM', $section.html(), init);
  103. }
  104.  
  105. function getolControlAttributionDivRightValue(){
  106. return parseInt($('.olControlAttribution').css("right").slice(0,-2));;
  107. }
  108.  
  109. function init(){
  110. loadSettings();
  111. setChecked('chkGMaps', settings.GMaps);
  112. setChecked('chkMapillary', settings.Mapillary);
  113. setChecked('chkTerraserver', settings.Terraserver);
  114. setChecked('chkWikimapia', settings.Wikimapia);
  115. setChecked('chkBing', settings.Bing);
  116. setChecked('chkOSM', settings.OSM);
  117. setChecked('chkYandex', settings.Yandex);
  118. setChecked('chkHere', settings.Here);
  119. setChecked('chkMiDrive', settings.MiDrive);
  120. setChecked('chkNYFC', settings.NYFC);
  121. setChecked('chkrosreestr', settings.rosreestr);
  122. setChecked('chkPA511', settings.PA511);
  123. setChecked('chkMiss511', settings.Miss511);
  124. setChecked('chkLAFC', settings.LAFC);
  125. setChecked('chkNM511', settings.NM511);
  126. //setChecked('chkNJ511', settings.NJ511);
  127. setChecked('chkWVFlood', settings.WVFlood);
  128. setChecked('chkGMDM', settings.GMDM);
  129. setChecked('chkBogota', settings.Bogota);
  130. setChecked('chkZoomEarth', settings.ZoomEarth);
  131. setChecked('chkRoadworks', settings.Roadworks);
  132. setChecked('chkWI511', settings.WI511);
  133.  
  134. if(settings.LangSetting == 0)
  135. setChecked("radOOMNoLang", true);
  136. else if(settings.LangSetting == 1)
  137. setChecked("radOOMWMELang", true);
  138. else
  139. setChecked("radOOMCustomLang", true);
  140.  
  141. $('#txtOOMLanguage')[0].value = settings.CustLang;
  142.  
  143. let annoyingDivRight = getolControlAttributionDivRightValue();
  144. $('.olControlAttribution').css("right", `${annoyingDivRight+100}px`);
  145. annoyingDivRight = getolControlAttributionDivRightValue();
  146. let checkedBoxes = $('.OOMchk:Checked');
  147. let totalButtonsWidth = 0;
  148. for(let i=0; i<checkedBoxes.length;i++){
  149. totalButtonsWidth += parseInt($(`label[for='${$(checkedBoxes[i]).attr('id')}'] img`).css('width').slice(0,-2));
  150. }
  151. $('.olControlAttribution').css("right", `${annoyingDivRight+totalButtonsWidth}px`);
  152.  
  153. LoadMapButtons();
  154. $('.OOMchk').change(function() {
  155. var settingName = $(this)[0].id.substr(3);
  156. settings[settingName] = this.checked;
  157. saveSettings();
  158. LoadMapButtons();
  159.  
  160. let btnWidth = parseInt($(`label[for='${$(this).attr('id')}'] img`).css('width').slice(0,-2));
  161. if(this.checked){ //add button width
  162. let annoyingDivRight = getolControlAttributionDivRightValue();
  163. $('.olControlAttribution').css("right", `${annoyingDivRight+btnWidth}px`);
  164. }
  165. else{ //subtract button width
  166. let annoyingDivRight = getolControlAttributionDivRightValue();
  167. $('.olControlAttribution').css("right", `${annoyingDivRight-btnWidth}px`);
  168. }
  169. });
  170. $("[id^='rad']").change(function() {
  171. if(isChecked("radOOMNoLang"))
  172. settings.LangSetting = 0;
  173. else if(isChecked("radOOMWMELang"))
  174. settings.LangSetting = 1;
  175. else
  176. settings.LangSetting = 2;
  177. saveSettings();
  178. });
  179. $('#txtOOMLanguage').focusout(function(){
  180. settings.CustLang = $('#txtOOMLanguage').val();
  181. saveSettings();
  182. });
  183. }
  184.  
  185. function GetLanguage()
  186. {
  187. if(isChecked("radOOMNoLang"))
  188. return "";
  189. else if(isChecked("radOOMWMELang"))
  190. return I18n.currentLocale().replace("en-US", "en");
  191. else //Custom Language
  192. return $('#txtOOMLanguage').val();
  193. }
  194.  
  195. function get4326CenterPoint(){
  196. let projI = new OL.Projection("EPSG:900913");
  197. let projE = new OL.Projection("EPSG:4326");
  198. let center_lonlat = (new OL.LonLat(W.map.center.lon, W.map.center.lat)).transform(projI,projE);
  199. let lat = Math.round(center_lonlat.lat * 1000000) / 1000000;
  200. let lon = Math.round(center_lonlat.lon * 1000000) / 1000000;
  201. return new OL.LonLat(lon, lat);
  202. }
  203.  
  204. function LoadMapButtons()
  205. {
  206. $('#OOMMiDrive').remove();
  207. if(settings.MiDrive)
  208. {
  209. let $section = $("<div>", {style:"padding:8px 16px"});
  210. $section.html([
  211. '<span id="OOMMiDrive">',
  212. `<img src="${midriveIcon}" alt="MiDrive" width="18" height="18" id="OOMMiDriveImg" title="Open in MiDrive" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  213. '</span>'
  214. ].join(' '));
  215.  
  216. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($section.html());
  217.  
  218. $('#OOMMiDriveImg').click(function(){
  219. var center = W.map.getCenter().transform(W.map.projection, W.map.displayProjection);
  220. window.open(`https://mdotjboss.state.mi.us/MiDrive/map?constZone=true&incidents=true&lat=${center.lat}&lon=${center.lon}&zoom=${W.map.zoom + 12}`, 'MiDrive');
  221. });
  222. }
  223.  
  224. $('#OOMGMaps').remove();
  225. if(settings.GMaps)
  226. {
  227. let $section = $("<div>", {style:"padding:8px 16px"});
  228. $section.html([
  229. '<span id="OOMGMaps">',
  230. `<img src="${gmapsIcon}" alt="Google Maps" width="18" height="18" id="OOMGMapsImg" title="Open in Google Maps" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  231. '</span>'
  232. ].join(' '));
  233.  
  234. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($section.html());
  235.  
  236. $('#OOMGMapsImg').click(function(){
  237. let latlon = get4326CenterPoint();
  238. let lang = GetLanguage();
  239.  
  240. window.open('https://www.google.com/maps/@' + latlon.lat + ',' + latlon.lon + ',' + ( W.map.zoom + 12) + 'z' + (lang != "" ? "?hl=" + lang : ""), 'Google Maps');
  241. });
  242. }
  243.  
  244. //************** Mapillary *****************
  245. $('#OOMMapillary').remove();
  246. if(settings.Mapillary){
  247. let $sectionMapillary = $("<div>", {style:"padding:8px 16px"});
  248. $sectionMapillary.html([
  249. '<span id="OOMMapillary">',
  250. `<img src="${mapillaryIcon}" alt="Mapillary" width="18" height="18" id="OOMMapillaryImg" title="Open in Mapillary" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  251. '</span>'
  252. ].join(' '));
  253.  
  254. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionMapillary.html());
  255. $('#OOMMapillaryImg').click(function(){
  256. let latlon = get4326CenterPoint();
  257.  
  258. window.open(`https://www.mapillary.com/app/?lat=${latlon.lat}&lng=${latlon.lon}&z=${( W.map.zoom + 11)}`, 'Mapillary');
  259. });
  260. }
  261.  
  262.  
  263. //****************** Terraserver *********************
  264. $('#OOMTerraserver').remove();
  265. if(settings.Terraserver){
  266. var $sectionTerraserver = $("<div>", {style:"padding:8px 16px"});
  267. $sectionTerraserver.html([
  268. '<span id="OOMTerraserver">',
  269. `<img src="${terraIcon}" alt="Terraserver" width="18" height="18" id="OOMTerraserverImg" title="Open in Terraserver" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  270. '</span>'
  271. ].join(' '));
  272.  
  273. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionTerraserver.html());
  274. $('#OOMTerraserverImg').click(function(){
  275. var center_lonlat=OL.Layer.SphericalMercator.inverseMercator(W.map.getCenter().lon,W.map.getCenter().lat);
  276. window.open(`http://www.terraserver.com/view?utf8=✓&searchLng=${center_lonlat.lon}&searchLat=${center_lonlat.lat}`);
  277. });
  278. }
  279.  
  280.  
  281. //********************* Wikimapia *********************
  282. $('#OOMWikimapia').remove();
  283. if(settings.Wikimapia){
  284. let $sectionWikimapia = $("<div>", {style:"padding:8px 16px"});
  285. $sectionWikimapia.html([
  286. '<span id="OOMWikimapia">',
  287. `<img src="${wikimapiaIcon}" alt="Wikimapia" width="18" height="18" id="OOMWikimapiaImg" title="Open in Wikimapia" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  288. '</span>'
  289. ].join(' '));
  290.  
  291. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionWikimapia.html());
  292. $('#OOMWikimapiaImg').click(function(){
  293. let latlon = get4326CenterPoint();
  294. let lang = GetLanguage();
  295. if(lang === "")
  296. lang = "en";
  297. window.open(`http://wikimapia.org/#${(lang !== "" ? "lang=" + lang : "")}&lat=${latlon.lat}&lon=${latlon.lon}&z=${( W.map.zoom + 12)}&m=b`);
  298. });
  299. }
  300.  
  301. $('#OOMBing').remove();
  302. if(settings.Bing)
  303. {
  304. let $sectionBing = $("<div>", {style:"padding:8px 16px"});
  305. $sectionBing.html([
  306. '<span id="OOMBing">',
  307. `<img src="${bingIcon}" alt="Bing Maps" width="18" height="18" id="OOMBingImg" title="Open in Bing Maps" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  308. '</span>'
  309. ].join(' '));
  310.  
  311. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionBing.html());
  312.  
  313. $('#OOMBingImg').click(function(){
  314. let latlon = get4326CenterPoint();
  315. //let lang = I18n.currentLocale().replace("en-US", "en");
  316.  
  317. window.open(`https://www.bing.com/maps?&cp=${latlon.lat}~${latlon.lon}&lvl=${( W.map.zoom + 12)}`);
  318. });
  319. }
  320.  
  321. $('#OOMOSM').remove();
  322. if(settings.OSM){
  323. //https://www.openstreetmap.org/#map=16/39.5588/-84.2365
  324. let $sectionOSM = $("<div>", {style:"padding:8px 16px"});
  325. $sectionOSM.html([
  326. '<span id="OOMOSM">',
  327. `<img src="${osmIcon}" alt="Open Street Map" width="18" height="18" id="OOMOSMImg" title="Open in Open Street Maps" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  328. '</span>'
  329. ].join(' '));
  330.  
  331. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionOSM.html());
  332.  
  333. $('#OOMOSMImg').click(function(){
  334. let latlon = get4326CenterPoint();
  335. //let lang = I18n.currentLocale().replace("en-US", "en");
  336.  
  337. window.open(`https://www.openstreetmap.org/#map=${(W.map.zoom + 12)}/${latlon.lat}/${latlon.lon}`);
  338. });
  339. }
  340.  
  341. $('#OOMYandex').remove();
  342. if(settings.Yandex){
  343. //https://n.maps.yandex.ru/#!/?z=14&ll=46.019795%2C51.505120&l=nk%23sat
  344. let $sectionYandex = $("<div>", {style:"padding:8px 16px"});
  345. $sectionYandex.html([
  346. '<span id="OOMYandex">',
  347. `<img src="${yandexIcon}" alt="Yandex" width="18" height="18" id="OOMYandexImg" title="Open in Yandex" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  348. '</span>'
  349. ].join(' '));
  350.  
  351. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionYandex.html());
  352.  
  353. $('#OOMYandexImg').click(function(){
  354. let latlon = get4326CenterPoint();
  355. //let lang = I18n.currentLocale().replace("en-US", "en");
  356.  
  357. window.open(`https://n.maps.yandex.ru/#!/?z=${(W.map.zoom + 12)}&ll=${latlon.lon}%2C${latlon.lat}&l=nk%23sat`);
  358. });
  359. }
  360.  
  361. $('#OOMHere').remove();
  362. if(settings.Here){
  363. //https://wego.here.com/?map=39.56508,-84.26224,16,normal&x=ep
  364. let $sectionHere = $("<div>", {style:"padding:8px 16px"});
  365. $sectionHere.html([
  366. '<span id="OOMHere">',
  367. `<img src="${hereIcon}" alt="Here" width="18" height="18" id="OOMHereImg" title="Open in Here" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  368. '</span>'
  369. ].join(' '));
  370.  
  371. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionHere.html());
  372.  
  373. $('#OOMHereImg').click(function(){
  374. let latlon = get4326CenterPoint();
  375.  
  376. window.open(`https://wego.here.com/?map=${latlon.lat},${latlon.lon},${(W.map.zoom + 12)},satellite&x=ep`);
  377. });
  378. }
  379.  
  380. $('#OOMNYFC').remove();
  381. if(settings.NYFC){
  382. let $sectionNYFC = $("<div>", {style:"padding:8px 16px"});
  383. $sectionNYFC.html([
  384. '<span id="OOMNYFC">',
  385. `<img src="${NYFCIcon}" alt="NY FC" width="18" height="18" id="OOMNYFCImg" title="Open in NY FC" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  386. '</span>'
  387. ].join(' '));
  388.  
  389. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionNYFC.html());
  390.  
  391. $('#OOMNYFCImg').click(function(){
  392. let e=W.map.getExtent();
  393. let geoNW=new OL.Geometry.Point(e.left,e.top);
  394. let geoSE=new OL.Geometry.Point(e.right,e.bottom);
  395.  
  396. Proj4js.defs["EPSG:26918"] = "+proj=utm +zone=18 +ellps=GRS80 +datum=NAD83 +units=m +no_defs";
  397.  
  398. let source = new Proj4js.Proj('EPSG:900913');
  399. let dest = new Proj4js.Proj('EPSG:26918');
  400.  
  401. geoNW = new Proj4js.Point(geoNW.x,geoNW.y);
  402. geoSE = new Proj4js.Point(geoSE.x,geoSE.y);
  403.  
  404. Proj4js.transform(source, dest, geoNW);
  405. Proj4js.transform(source, dest, geoSE);
  406.  
  407. let mapScale = 36111.909643;
  408.  
  409. switch (W.map.zoom) {
  410. case 0:
  411. case 1:
  412. mapScale = 72223.819286;
  413. break;
  414. case 2:
  415. mapScale = 36111.909643;
  416. break;
  417. case 3:
  418. mapScale = 18055.954822;
  419. break;
  420. default:
  421. mapScale = 9027.977411;
  422. break;
  423. }
  424.  
  425. let URL='http://gis3.dot.ny.gov/html5viewer/?viewer=FC&scale='+mapScale+'&extent='+geoNW.x+'%2C'+geoNW.y+'%2C'+geoSE.x+'%2C'+geoSE.y;
  426. window.open(URL,"_blank");
  427. });
  428. }
  429.  
  430. $('#OOMrosreestr').remove();
  431. if(settings.rosreestr){
  432. let $sectionRosreestr = $("<div>", {style:"padding:8px 16px"});
  433. $sectionRosreestr.html([
  434. '<span id="OOMrosreestr">',
  435. `<img src="${rosreestrIcon}" alt="Rosreestr" width="18" height="18" id="OOMrosreestrImg" title="Open in Rosreestr" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  436. '</span>'
  437. ].join(' '));
  438.  
  439. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionRosreestr.html());
  440.  
  441. $('#OOMrosreestrImg').click(function(){
  442. window.open(`http://pkk5.rosreestr.ru/#x=${W.map.center.lon}&y=${W.map.center.lat}&z=${(W.map.zoom + 12)}`);
  443. });
  444. }
  445.  
  446. $('#OOMPA511').remove();
  447. if(settings.PA511){
  448. let $sectionPA511 = $("<div>", {style:"padding:8px 16px"});
  449. $sectionPA511.html([
  450. '<span id="OOMPA511">',
  451. `<img src="${PA511Icon}" alt="511PA" width="18" height="18" id="OOMPA511Img" title="Open in 511PA" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  452. '</span>'
  453. ].join(' '));
  454.  
  455. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionPA511.html());
  456.  
  457. $('#OOMPA511Img').click(function(){
  458. let latlon = get4326CenterPoint();
  459. window.open(`http://www.511pa.com/Traffic.aspx?${latlon.lat},${latlon.lon},${(W.map.zoom + 12)}z`);
  460. });
  461. }
  462.  
  463. $('#OOMMiss511').remove();
  464. if(settings.Miss511)
  465. {
  466. let $section = $("<div>", {style:"padding:8px 16px"});
  467. $section.html([
  468. '<span id="OOMMiss511">',
  469. `<img src="${Miss511Icon}" alt="Mississippi 511" width="18" height="18" id="OOMMiss511Img" title="Open in Mississippi 511" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  470. '</span>'
  471. ].join(' '));
  472.  
  473. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($section.html());
  474.  
  475. $('#OOMMiss511Img').click(function(){
  476. let latlon = get4326CenterPoint();
  477. let lang = GetLanguage();
  478.  
  479. window.open(`https://www.mdottraffic.com/default.aspx?lat=${latlon.lat}&lon=${latlon.lon}&zoom=${(W.map.zoom + 12)}`, 'Mississippi 511');
  480. });
  481. }
  482.  
  483. $('#OOMLAFC').remove();
  484. if(settings.LAFC){
  485. let $sectionLAFC = $("<div>");
  486. $sectionLAFC.html([
  487. '<span id="OOMLAFC">',
  488. `<img src="${LAFCIcon}" alt="LAFC" width="18" height="18" id="OOMLAFCImg" title="Open in Louisiana FC Map" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  489. '</span>'
  490. ].join(' '));
  491.  
  492. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionLAFC.html());
  493. $('#OOMLAFCImg').click(function(){
  494. let latlon = get4326CenterPoint();
  495. window.open(`http://www.arcgis.com/home/webmap/viewer.html?webmap=a37461260bec43dea7bcbf6b710a662e&center=${latlon.lon},${latlon.lat}&level=${(W.map.zoom + 12)}`);
  496. });
  497. }
  498.  
  499. /*$('#OOMNJ511').remove();
  500. if(settings.NJ511){
  501. let $sectionNJ511 = $("<div>");
  502. $sectionNJ511.html([
  503. '<span id="OOMNJ511">',
  504. `<img src="${LAFCIcon}" alt="LAFC" width="18" height="18" id="OOMNJ511Img" title="Open in New Jersey 511 Map" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  505. '</span>'
  506. ].join(' '));
  507.  
  508. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionNJ511.html());
  509. $('#OOMNJ511Img').click(function(){
  510. let latlon = get4326CenterPoint();
  511. window.open(`http://www.511nj.org/trafficmap.aspx?X=${latlon.lat}&Y=${latlon.lon}&zoom=${(W.map.zoom + 12)}`);
  512. });
  513. }*/
  514.  
  515. $('#OOMNM511').remove();
  516. if(settings.NM511){
  517. let $sectionNM511 = $("<div>");
  518. $sectionNM511.html([
  519. '<span id="OOMNM511">',
  520. `<img src="${NM511Icon}" alt="New Mexico 511" width="18" height="18" id="OOMNM511Img" title="Open in New Mexico 511 Map" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  521. '</span>'
  522. ].join(' '));
  523.  
  524. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionNM511.html());
  525. $('#OOMNM511Img').click(function(){
  526. let latlon = W.map.center;
  527.  
  528. //http://nmroads.com/mapIndex.html?
  529. window.open(`http://nmroads.com/mapIndex.html?X=${latlon.lon}&Y=${latlon.lat}&zoom=${(W.map.zoom + 12)}`);
  530. });
  531. }
  532.  
  533. $('#OOMWVFlood').remove();
  534. if(settings.WVFlood){
  535. let $sectionWVFlood = $("<div>");
  536. $sectionWVFlood.html([
  537. '<span id="OOMWVFlood">',
  538. `<img src="${WVFloodIcon}" alt="WV Flood" width="18" height="18" id="OOMWVFloodImg" title="Open in WV Flood map" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  539. '</span>'
  540. ].join(' '));
  541.  
  542. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionWVFlood.html());
  543. $('#OOMWVFloodImg').click(function(){
  544. let latlon = W.map.center;
  545.  
  546. //https://www.mapwv.gov/flood/map/?x=-8915274&y=4681300&l=4&v=0
  547. window.open(`https://www.mapwv.gov/flood/map/?x=${latlon.lon}&y=${latlon.lat}&l=${(W.map.zoom+4)}`);
  548. });
  549. }
  550.  
  551. $('#OOMGMDM').remove();
  552. if(settings.GMDM){
  553. let $sectionGMDM = $("<div>");
  554. $sectionGMDM.html([
  555. '<span id="OOMGMDM">',
  556. `<img src="${GMDMIcon}" alt="Gaia Mexico" width="18" height="18" id="OOMGMDMImg" title="Open in Gaia Digital Mapa de Mexico" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  557. '</span>'
  558. ].join(' '));
  559.  
  560. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionGMDM.html());
  561. $('#OOMGMDMImg').click(function(){
  562. let latlon = W.map.center.transform(W.map.projection, W.map.displayProjection);
  563.  
  564. window.open(`http://gaia.inegi.org.mx/mdm6/?v=${btoa("lat:"+latlon.lat+",lon:"+latlon.lon+",z:"+(W.map.zoom+8))}`);
  565. });
  566. }
  567.  
  568. $('#OOMPennDOT').remove();
  569. if(settings.PennDOT){
  570. let $sectionPennDOT = $("<div>");
  571. $sectionPennDOT.html([
  572. '<span id="OOMPennDOT">',
  573. `<img src="${PennDOTIcon}" alt="Pennsylvania OneMap" width="18" height="18" id="OOMPennDOTImg" title="Open in Pennsylvania OneMap" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  574. '</span>'
  575. ].join(' '));
  576.  
  577. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionPennDOT.html());
  578. $('#OOMPennDOTImg').click(function(){
  579. let latlon = W.map.center.transform(W.map.projection, W.map.displayProjection);
  580. window.open(`https://www.dot7.state.pa.us/OneMap?longitude=${latlon.lon}&latitude=${latlon.lat}`);
  581. });
  582. }
  583.  
  584. $('#OOMBogota').remove();
  585. if(settings.Bogota){
  586. let $sectionBogota = $("<div>");
  587. $sectionBogota.html([
  588. '<span id="OOMBogota">',
  589. `<img src="${BogotaIcon}" alt="Bogota" width="18" height="18" id="OOMBogotaImg" title="Open in Mapas Bogota" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  590. '</span>'
  591. ].join(' '));
  592.  
  593. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionBogota.html());
  594. $('#OOMBogotaImg').click(function(){
  595. var topleft= (new OL.LonLat(W.map.getExtent().left,W.map.getExtent().top));
  596. var bottomright= (new OL.LonLat(W.map.getExtent().right,W.map.getExtent().bottom));
  597.  
  598. let source = new Proj4js.Proj('EPSG:900913');
  599. var topleft4686 = new Proj4js.Point(parseFloat(topleft.lon), parseFloat(topleft.lat));
  600. var bottomright4686 = new Proj4js.Point(parseFloat(bottomright.lon), parseFloat(bottomright.lat));
  601. Proj4js.transform(source, Proj4js.WGS84, topleft4686);
  602. Proj4js.transform(source, Proj4js.WGS84, bottomright4686);
  603.  
  604. let latlon = W.map.center.transform(W.map.projection, W.map.displayProjection);
  605. window.open(`http://mapas.bogota.gov.co/?&e=${topleft4686.x},${bottomright4686.y},${bottomright4686.x},${topleft4686.y},4686&b=261`);
  606. });
  607. }
  608.  
  609. $('#OOMZoomEarth').remove();
  610. if(settings.ZoomEarth)
  611. {
  612. let $section = $("<div>", {style:"padding:8px 16px"});
  613. $section.html([
  614. '<span id="OOMZoomEarth">',
  615. `<img src="${ZoomEarthIcon}" alt="Zoom Earth" width="18" height="18" id="OOMZoomEarthImg" title="Open in Zoom Earth" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  616. '</span>'
  617. ].join(' '));
  618.  
  619. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($section.html());
  620.  
  621. $('#OOMZoomEarthImg').click(function(){
  622. let latlon = get4326CenterPoint();
  623. let lang = GetLanguage();
  624. window.open(`https://zoom.earth/#${latlon.lat},${latlon.lon},${( W.map.zoom + 12)}z,map`, 'Zoom Earth');
  625. });
  626. }
  627.  
  628. $('#OOMRoadworks').remove();
  629. if(settings.Roadworks)
  630. {
  631. let $section = $("<div>", {style:"padding:8px 16px"});
  632. $section.html([
  633. '<span id="OOMRoadworks">',
  634. `<img src="${RoadworksIcon}" alt="Roadworks" width="18" height="18" id="OOMRoadworksImg" title="Open in Roadworks" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  635. '</span>'
  636. ].join(' '));
  637.  
  638. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($section.html());
  639.  
  640. $('#OOMRoadworksImg').click(function(){
  641. let latlon = get4326CenterPoint();
  642. window.open(`https://roadworks.org/?lng=${latlon.lon}&lat=${latlon.lat}&zoom=${( W.map.zoom + 12)}`, 'Roadworks');
  643. });
  644. }
  645.  
  646. $('#OOMWI511').remove();
  647. if(settings.WI511){
  648. let $sectionWI511 = $("<div>", {style:"padding:8px 16px"});
  649. $sectionWI511.html([
  650. '<span id="OOMWI511">',
  651. `<img src="${WI511Icon}" alt="511WI" width="18" height="18" id="OOMWI511Img" title="Open in 511WI" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  652. '</span>'
  653. ].join(' '));
  654.  
  655. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionWI511.html());
  656.  
  657. $('#OOMWI511Img').click(function(){
  658. let latlon = get4326CenterPoint();
  659. window.open(`https://511wi.gov/?Latitude=${latlon.lat}&Longitude=${latlon.lon}&Zoom=${(W.map.zoom + 12)}&SelectedLayers=WeatherAlerts,Incidents#:Alerts`);
  660. });
  661. }
  662. }
  663.  
  664. function loadSettings() {
  665. var loadedSettings = $.parseJSON(localStorage.getItem("OOM_Settings"));
  666. var defaultSettings = {
  667. GMaps: true,
  668. Mapillary: true,
  669. Terraserver: true,
  670. Wikimapia: false,
  671. Bing: false,
  672. OSM: false,
  673. LangSetting: 1,
  674. CustLang: "",
  675. Yandex: false,
  676. Here: false,
  677. MiDrive: false,
  678. NYFC: false,
  679. rosreestr: false,
  680. PA511: false,
  681. Miss511: false,
  682. LAFC: false,
  683. NM511: false,
  684. WVFlood: false,
  685. GMDM: false,
  686. PennDOT: false,
  687. Bogota: false,
  688. ZoomEarth: false,
  689. Roadworks: false,
  690. WI511: false
  691. //NJ511: false
  692. };
  693. settings = loadedSettings ? loadedSettings : defaultSettings;
  694. for (var prop in defaultSettings) {
  695. if (!settings.hasOwnProperty(prop))
  696. settings[prop] = defaultSettings[prop];
  697. }
  698. }
  699.  
  700. function saveSettings() {
  701. if (localStorage) {
  702. var localsettings = {
  703. GMaps: settings.GMaps,
  704. Mapillary: settings.Mapillary,
  705. Terraserver: settings.Terraserver,
  706. Wikimapia: settings.Wikimapia,
  707. Bing: settings.Bing,
  708. OSM: settings.OSM,
  709. LangSetting: settings.LangSetting,
  710. CustLang: settings.CustLang,
  711. Yandex: settings.Yandex,
  712. Here: settings.Here,
  713. MiDrive: settings.MiDrive,
  714. NYFC: settings.NYFC,
  715. rosreestr: settings.rosreestr,
  716. PA511: settings.PA511,
  717. Miss511: settings.Miss511,
  718. LAFC: settings.LAFC,
  719. NM511: settings.NM511,
  720. WVFlood: settings.WVFlood,
  721. GMDM: settings.GMDM,
  722. PennDOT: settings.PennDOT,
  723. Bogota: settings.Bogota,
  724. ZoomEarth: settings.ZoomEarth,
  725. Roadworks: settings.Roadworks,
  726. WI511: settings.WI511
  727. //NJ511: settings.NJ511
  728. };
  729.  
  730. localStorage.setItem("OOM_Settings", JSON.stringify(localsettings));
  731. }
  732. }
  733.  
  734. function isChecked(checkboxId) {
  735. return $('#' + checkboxId).is(':checked');
  736. }
  737.  
  738. function setChecked(checkboxId, checked) {
  739. $('#' + checkboxId).prop('checked', checked);
  740. }
  741.  
  742. function bootstrapGeneral(initdelegate, tries = 1){
  743. if(document.readyState !== 'complete' )
  744. setTimeout(function() {bootstrapGeneral(initdelegate, tries++);}, 200);
  745. else
  746. initdelegate();
  747. }
  748.  
  749. let is511PAloaded = false;
  750. function bootstrap511PA(tries = 1){
  751. if(iFrameVar.map){
  752. iFrameVar.map.addListener('tilesloaded', function() {
  753. //http://www.511pa.com/Traffic.aspx?40.85,-77.6,12z
  754. if(!is511PAloaded){
  755. if(location.search.indexOf("?") > -1){
  756. let params = location.search.split("?")[1].slice(0,-1);
  757. iFrameVar.recenterMap(params);
  758. }
  759. is511PAloaded = true;
  760. }
  761. });
  762. }
  763. else{
  764. setTimeout(function(){bootstrap511PA(tries +=1);}, 100);
  765. }
  766.  
  767. $(document).ready(function(){
  768. init511PA();
  769. });
  770. }
  771.  
  772. function bootstrapNM511(tries = 1){
  773. if(map && map.extent && map.loaded)
  774. initNM511();
  775. else
  776. setTimeout(function() {bootstrapNM511(tries++);}, 100);
  777. }
  778.  
  779. function bootstrapRoadworks(tries = 1){
  780. if(Elgin && Elgin.map && Elgin.map.tilesloading === false)
  781. initRoadworks();
  782. else
  783. setTimeout(function(){bootstrapRoadworks(tries++);}, 100);
  784. }
  785.  
  786. function bootstrap(tries = 1) {
  787. if(location.href.indexOf("google.com/maps") > -1)
  788. bootstrapGeneral(initGoogleMaps, 1);
  789. else if(location.href.indexOf("wv511.org") > -1)
  790. bootstrapGeneral(initWV511, 1);
  791. else if(location.href.indexOf("511virginia.org") > -1)
  792. bootstrapGeneral(init511virginia, 1);
  793. else if(location.href.indexOf("https://mdotjboss.state.mi.us") > -1)
  794. bootstrapGeneral(initmiDrive, 1);
  795. else if(location.href.indexOf("http://pkk5.rosreestr.ru") > -1)
  796. bootstrapRosreestr(1);
  797. else if(location.href.indexOf("http://www.511pa.com/Traffic") > -1 || location.href.indexOf("https://www.511pa.com/Traffic") > -1)
  798. bootstrap511PA(1);//bootstrapGeneral(init511PA, 1);
  799. else if(location.href.indexOf("http://newengland511.org") > -1)
  800. bootstrapGeneral(initNE511, 1);
  801. else if(location.href.indexOf("https://www.mdottraffic.com") > -1){
  802. if(document.getElementById("map-container") != null)
  803. initMississipie511();
  804. else if(tries < 1000)
  805. setTimeout(function () {bootstrap(tries++);}, 200);
  806. }
  807. else if(location.href.indexOf("https://gis.transportation.wv.gov/measures") > -1){
  808. bootstrapGeneral(initWVGIS, 1);
  809. }
  810. else if(location.href.indexOf("http://nmroads.com/mapIndex.html") > -1){
  811. bootstrapNM511(1);
  812. }
  813. else if(location.href.indexOf("https://www.mapwv.gov/flood/map") > -1){
  814. bootstrapGeneral(initWVFlood, 1);
  815. }
  816. else if(location.href.indexOf("https://roadworks.org/") > -1){
  817. bootstrapRoadworks(1);
  818. }
  819. /*else if(location.href.indexOf("http://www.511nj.org/trafficmap") > -1){
  820. bootstrapGeneral(initNJ511, 1);
  821. }*/
  822. else{
  823. if (W &&
  824. W.map &&
  825. W.model &&
  826. $ && WazeWrap.Ready) {
  827. initInterface();
  828. } else if (tries < 1000) {
  829. setTimeout(function () {bootstrap(tries++);}, 200);
  830. }
  831. }
  832. }
  833.  
  834. function RosreestrToWaze(){
  835. let lon, lat, zoom;
  836. let curURL = location.href.match(/x=(\d*.\d*)&y=(\d*.\d*)&z=(\d+)/);
  837. lon = curURL[1];
  838. lat = curURL[2];
  839. zoom = parseInt(curURL[3]);
  840.  
  841. let source = new Proj4js.Proj('EPSG:900913');
  842.  
  843. var point = new Proj4js.Point(parseFloat(lon), parseFloat(lat));
  844. Proj4js.transform(source, Proj4js.WGS84, point);
  845. return `https://www.waze.com/en-US/editor/?lon=${point.x}&lat=${point.y}&zoom=${(Math.max(0,Math.min(10,(zoom - 12))))}`;
  846. }
  847.  
  848. function initRosreestr(){
  849. var observer = new MutationObserver(function(mutations) {
  850. mutations.forEach(function(mutation) {
  851. if (mutation.type === "attributes" && mutation.target == document.getElementsByClassName("btn btn-default btn-tool-lg js-showList")[0]) insertWMELinkRosreestr();
  852. });
  853. });
  854.  
  855. observer.observe(document.getElementById("sidebar-region"), { childList: true, subtree: true, attributes:true});
  856.  
  857. insertWMELinkRosreestr();
  858. }
  859.  
  860. function insertWMELinkRosreestr(){
  861. if(document.getElementById("OOMWazeButton") !== null)
  862. document.getElementById("OOMWazeButton").remove();
  863.  
  864. let $OOMWazeButton = document.createElement("div");
  865.  
  866. $OOMWazeButton.innerHTML = '<button type="button" class="btn btn-default btn-tool-lg" data-toggle="tooltip" data-placement="right" title="" id="OOMWazeButton" style="background-image: url(https://imgur.com/NTLWfFz.png); background-repeat: no-repeat; background-position: center;"></button>'; //'<div id="OOMWazeButtonDiv" style="height:30px; width:34px; position: fixed; right:30px; top:75px; cursor: pointer; ></div>';
  867. document.getElementsByClassName('btn-group-vertical js-appList')[0].appendChild($OOMWazeButton);
  868.  
  869. document.getElementById("OOMWazeButton").addEventListener("click", function(){
  870. window.open(RosreestrToWaze());
  871. });
  872. }
  873.  
  874. function bootstrapRosreestr(tries=1){
  875. if (document.getElementsByClassName('btn-group-vertical js-appList').length > 0) {
  876. initRosreestr();
  877. } else if (tries < 1000) {
  878. setTimeout(function () {bootstrapRosreestr(tries++);}, 200);
  879. }
  880. }
  881.  
  882. function initGoogleMaps(){
  883. let $OOMWazeButton = document.createElement("div");
  884. $OOMWazeButton.innerHTML = '<div id="OOMWazeButtonDiv" style="height:30px; width:34px; position: fixed; right:30px; top:75px; cursor: pointer; background-image: url(https://imgur.com/NTLWfFz.png); background-repeat: no-repeat;" title="Open in WME"></div>';
  885. let parent = document.getElementById("content-container");
  886. parent.appendChild($OOMWazeButton);
  887.  
  888. document.getElementById("OOMWazeButtonDiv").addEventListener("click", function(){
  889. window.open(GMToWaze());
  890. });
  891.  
  892. document.getElementById('OOMWazeButtonDiv').addEventListener("mouseenter",function(e) {
  893. document.addEventListener('keydown', copyPLHotkeyEvent);
  894. document.getElementsByClassName('widget-scene-canvas')[0].addEventListener('keydown', copyPLHotkeyEvent);
  895. });
  896.  
  897. document.getElementById('OOMWazeButtonDiv').addEventListener('mouseleave', function() {
  898. document.removeEventListener('keydown', copyPLHotkeyEvent);
  899. document.getElementsByClassName('widget-scene-canvas')[0].removeEventListener('keydown', copyPLHotkeyEvent);
  900. });
  901. }
  902.  
  903. let isMiss511Loaded = false;
  904. function initMississipie511(){
  905. map.addListener('tilesloaded', function() {
  906. //https://www.mdottraffic.com/default.aspx?lat=32.36435&lon=-88.70366&zoom=15
  907. if(!isMiss511Loaded){
  908. if(location.search.indexOf("?") > -1 && location.search.indexOf("loadAlertid") === -1){
  909. let params = location.search.match(/lat=(-?\d*.\d*)&lon=(-?\d*.\d*)&zoom=(\d+)/);
  910. map.setCenter({lat: parseFloat(params[1]), lng: parseFloat(params[2])});
  911. map.setZoom(parseInt(params[3]));
  912. }
  913. isMiss511Loaded = true;
  914. }
  915. });
  916.  
  917. let $OOMWazeButton = document.createElement("div");
  918. $OOMWazeButton.innerHTML = '<div id="OOMWazeButtonDiv" style="height:30px; width:34px; position: fixed; right:40px; top:83px; cursor: pointer; background-image: url(https://imgur.com/NTLWfFz.png); background-repeat: no-repeat;" title="Open in WME"></div>';
  919. //let parent = document.getElementById("content-container");
  920. document.getElementById("map-container").appendChild($OOMWazeButton);
  921.  
  922. document.getElementById("OOMWazeButtonDiv").addEventListener("click", function(){
  923. let center = map.getCenter();
  924. window.open(`https://www.waze.com/en-US/editor/?lon=${center.lng()}&lat=${center.lat()}&zoom=${(Math.max(0,Math.min(10,(map.getZoom() - 12))))}`);
  925. });
  926. }
  927.  
  928. /* function initNJ511(){
  929. $(document).ready(function() {
  930. if(location.search.indexOf("?") > -1){
  931. let params = location.search.match(/X=(-?\d*.\d*)&Y=(-?\d*.\d*)&zoom=(\d+)/);
  932. $("#EvetnsMap").attr('src', `http://icx1-map21x.lan.511nj.org/mapwidget/mapwidget.aspx?FullScreen=false&fss=0&njlegend=1&search=0&X=${parseFloat(params[1])}Y=${parseFloat(params[2])}&zoom=${parseFloat(params[3])}&maplegend=2&Weather=1&Congestion=1&Construction=1&Incident=1&Detour=1&SpecialEvents=1&AirportParking=0&height=100&width=100&ispercent=1&WinkCamera=2&zoom=14&refershcamera=1&refershevent=1&refershspeed=1`);
  933. }
  934. });
  935. }*/
  936.  
  937. function insertWMELinkNM511(){
  938. if(document.getElementById("OOMWazeButton") !== null)
  939. document.getElementById("OOMWazeButton").remove();
  940.  
  941. let $OOMWazeButton = document.createElement("li");
  942.  
  943. $OOMWazeButton.innerHTML = '<span id="OOMWazeButton" style="background-image: url(https://imgur.com/NTLWfFz.png);"></span>';
  944. document.getElementsByClassName('mapSettingsList')[0].appendChild($OOMWazeButton);
  945.  
  946. document.getElementById("OOMWazeButton").addEventListener("click", function(){
  947. let source = new Proj4js.Proj('EPSG:900913');
  948. let center = map.extent.getCenter();
  949. var point = new Proj4js.Point(parseFloat(center.x), parseFloat(center.y));
  950. Proj4js.transform(source, Proj4js.WGS84, point);
  951. window.open(`https://www.waze.com/en-US/editor/?lon=${point.x}&lat=${point.y}&zoom=${(Math.max(0,Math.min(10,(map.getZoom() - 12))))}`);
  952. });
  953. }
  954.  
  955. function initNM511(){
  956. if(location.search.indexOf("?") > -1){
  957. let params = location.search.match(/X=(-?\d*.\d*)&Y=(-?\d*.\d*)&zoom=(\d+)/);
  958. setTimeout(function(){
  959. try{
  960. map.centerAt({x:parseFloat(params[1]), y:parseFloat(params[2])});
  961. setTimeout(function(){map.setLevel(parseInt(params[3]));}, 500);
  962. }
  963. catch(err) {
  964. console.log(err);
  965. }
  966. }, 1000);
  967. }
  968.  
  969. var observer = new MutationObserver(function(mutations) {
  970. mutations.forEach(function(mutation) {
  971. if (mutation.type === "attributes" && mutation.target == document.getElementsByClassName("mapSettingsList")[0]) insertWMELinkNM511();
  972. });
  973. });
  974.  
  975. observer.observe(document.getElementsByClassName('mapSettings')[0], { childList: true, subtree: true, attributes:true});
  976.  
  977. insertWMELinkNM511();
  978. }
  979.  
  980. function insertWMELinkRoadworks(){
  981. if(document.getElementById("OOMWazeButton") !== null)
  982. document.getElementById("OOMWazeButton").remove();
  983.  
  984. let $OOMWazeButton = document.createElement("li");
  985. $OOMWazeButton.style.minHeight = "60px";
  986. $OOMWazeButton.id = "OOMWazeButton";
  987. $OOMWazeButton.innerHTML = '<a href="#"><span style="background-image: url(https://imgur.com/NTLWfFz.png); background-repeat:no-repeat; background-position:center;"></span></a>';
  988. document.getElementById('nav-main').getElementsByTagName('ul')[0].appendChild($OOMWazeButton);
  989.  
  990. document.getElementById("OOMWazeButton").addEventListener("click", function(){
  991. let source = new Proj4js.Proj('EPSG:900913');
  992. let center = Elgin.map.getCenter();
  993. window.open(`https://www.waze.com/en-US/editor/?lon=${center.lng()}&lat=${center.lat()}&zoom=${(Math.max(0,Math.min(10,(Elgin.map.zoom - 12))))}`);
  994. });
  995. }
  996.  
  997. function initRoadworks(){
  998. if(location.search.indexOf("?") > -1){
  999. let params = location.search.match(/lng=(-?\d*.\d*)&lat=(-?\d*.\d*)&zoom=(\d+)/);
  1000. setTimeout(function(){
  1001. try{
  1002. Elgin.map.setCenter({lng:parseFloat(params[1]), lat:parseFloat(params[2])});
  1003. setTimeout(function(){Elgin.map.setZoom(parseInt(params[3]));}, 500);
  1004. }
  1005. catch(err) {
  1006. console.log(err);
  1007. }
  1008. }, 1000);
  1009. }
  1010. insertWMELinkRoadworks();
  1011. }
  1012.  
  1013. var copyToClipboard = function(str) {
  1014. var temp = document.createElement("input");
  1015. document.body.append(temp);
  1016. temp.value = str;
  1017. temp.select();
  1018. document.execCommand('copy');
  1019. document.body.removeChild(temp);
  1020. };
  1021.  
  1022. var copyPLHotkeyEvent = function(e) {
  1023. if ((e.metaKey || e.ctrlKey) && (e.which === 67))
  1024. copyToClipboard(GMToWaze());
  1025. };
  1026.  
  1027. function GMToWaze(){
  1028. let lon, lat, zoom;
  1029. let curURL = location.href.split('@').pop().split(',');
  1030. lon = curURL[1];
  1031. lat = curURL[0];
  1032. zoom = parseInt(curURL[2]);
  1033. return `https://www.waze.com/en-US/editor/?lon=${lon}&lat=${lat}&zoom=${(Math.max(0,Math.min(10,(zoom - 12))))}`;
  1034. }
  1035.  
  1036. function init511PA(){
  1037. $('#OOMWazeButtonDiv').remove();
  1038. let $wazer = $("<div>", {style:"padding:8px 16px"});
  1039. $wazer.html([
  1040. '<li>',
  1041. '<div id="OOMWazeButtonDiv" style="height:30px; width:34px; cursor: pointer; background-image: url(https://imgur.com/NTLWfFz.png); background-repeat: no-repeat;" title="Open in WME"></div>',
  1042. '</li>'
  1043. ].join(' '));
  1044.  
  1045. $('#optMain').append($wazer.html());
  1046.  
  1047. $('#OOMWazeButtonDiv').click(function(){
  1048. let lon, lat, zoom;
  1049. let latlon = iFrameVar.getCenterOfMap().split(',');
  1050. lon = latlon[1];
  1051. lat = latlon[0];
  1052. zoom = iFrameVar.zoom;
  1053. window.open(`https://www.waze.com/en-US/editor/?lon=${lon}&lat=${lat}&zoom=${(Math.max(0,Math.min(10,(zoom - 12))))}`);
  1054. });
  1055. }
  1056.  
  1057. function init511virginia(){
  1058. $('#incident_table_paginate > a').click(insertWazeLinks511Virginia);
  1059. insertWazeLinks511Virginia();
  1060. }
  1061.  
  1062. function insertWazeLinks511Virginia(){
  1063. $('#incident_table > tbody > tr > td > a').parent().append(function(){
  1064. if($(this).find("a").length === 1){
  1065. let latlons = $(this).find("a")[0].href.match(/lon1=(.*)&lat1=(.*)&lon2=(.*)&lat2=(.*)/);
  1066.  
  1067. let lonCenter = Math.min(latlons[1],latlons[3]) + (Math.abs(latlons[1] - latlons[3])/2);
  1068. let latCenter = Math.min(latlons[2], latlons[4]) + (Math.abs(latlons[2] - latlons[4])/2);
  1069. return ` <a href='https://www.waze.com/editor/?env=usa&lon=${lonCenter}&lat=${latCenter}&zoom=4' target='_blank'>Open in WME</a>`;
  1070. }
  1071. return "";
  1072. });
  1073. }
  1074.  
  1075. function initNE511(){
  1076. var observer = new MutationObserver(function(mutations) {
  1077. mutations.forEach(function(mutation) {
  1078. if ($(mutation.target)[0] == $('.ol-overlay-container.ol-selectable')[0] && $(mutation.target).css('display') == "block") {
  1079. insertWMELinkNE511();
  1080. }
  1081. });
  1082. });
  1083.  
  1084. observer.observe($('.ol-overlay-container.ol-selectable').parent()[0], { childList: true, subtree: true, attributes:true});
  1085. }
  1086.  
  1087. function insertWMELinkNE511(){
  1088. //http://newengland511.org/
  1089. let selectedIncident = $('.popover-content > [data-ng-bind="item.Description"]')[0];
  1090. let incidentDesc = selectedIncident.innerHTML;
  1091. let incidents = Leidos.Traffic.Data.events.find(function(e){ return e.Description == incidentDesc;});
  1092.  
  1093. $(selectedIncident).append(`<br><a href='https://www.waze.com/en-US/editor/?env=usa&lon=${incidents.StartLongitude}&lat=${incidents.StartLatitude}&zoom=6' target="_blank">Open in WME</a>`);
  1094. }
  1095.  
  1096. function initmiDrive(){
  1097. var observer = new MutationObserver(function(mutations) {
  1098. mutations.forEach(function(mutation) {
  1099. if ($(mutation.target).hasClass('esri-popup__content')) insertWMELinkMiDrive(mutation.target);
  1100. });
  1101. });
  1102.  
  1103. observer.observe($('.esri-component.esri-popup')[0], { childList: true, subtree: true });
  1104.  
  1105. $('#layerContainer').append(`<button tabindex="0" class="legendIcon layerIcon clickableLegendIcon ui-btn ui-btn-inline" title="Open in WME" id="oomOpenWME"><img tabindex="-1" class="focusRem" src="https://imgur.com/NTLWfFz.png" alt="icons"></button>`);
  1106. $('#legendIconContainer').css('width', (325));
  1107. $('#oomOpenWME').click(function(){
  1108. window.open(`https://www.waze.com/en-US/editor/?lon=${mapView.center.longitude}&lat=${mapView.center.latitude}&zoom=${Math.max(mapView.zoom-12,0)}`);
  1109. });
  1110. }
  1111.  
  1112. function insertWMELinkMiDrive(changedDiv){
  1113. for(let i=0; i<incidents.graphics.items.length; i++){
  1114. let location = incidents.graphics.items[i].attributes.Message.match(/<strong>Location: <\/strong>(.*?)<\/div>/)[1];
  1115. if($(changedDiv).html().indexOf(location) > -1 && $(changedDiv).html().indexOf("Open in WME") === -1){
  1116. $('#newItemAdded').append(`<div><a href='https://www.waze.com/en-US/editor/?env=usa&lon=${incidents.graphics.items[i].attributes.XCoord}&lat=${incidents.graphics.items[i].attributes.YCoord}&zoom=6' target="_blank">Open in WME</a></div>`);
  1117. break;
  1118. }
  1119. }
  1120. }
  1121.  
  1122. function initWV511(){
  1123. if(document.getElementById("OOMWazeButtonDiv") !== null)
  1124. document.getElementById("OOMWazeButtonDiv").remove();
  1125.  
  1126. let $OOMWazeButton = document.createElement("div");
  1127. $OOMWazeButton.setAttribute("id", "OOMWazeButtonDiv");
  1128. $OOMWazeButton.setAttribute("style", "position:absolute; right:15px; top:190px; height:30px; width:34px; cursor:pointer; background-image:url(https://imgur.com/NTLWfFz.png); background-repeat:no-repeat;");
  1129. $OOMWazeButton.setAttribute("title", "Open in WME");
  1130. document.body.appendChild($OOMWazeButton);
  1131.  
  1132. document.getElementById("OOMWazeButtonDiv").addEventListener("click", function(){
  1133. let lon1, lon2, lonCenter, lat1, lat2, latCenter;
  1134. let latlon = location.href.split(":");
  1135. lon1 = latlon[2];
  1136. lat1 = latlon[3];
  1137. lon2 = latlon[4];
  1138. lat2 = latlon[5];
  1139.  
  1140. lonCenter = Math.min(lon1,lon2) + (Math.abs(lon1 - lon2)/2);
  1141. latCenter = Math.min(lat1, lat2) + (Math.abs(lat1 - lat2)/2);
  1142. window.open(`https://www.waze.com/en-US/editor/?lon=${lonCenter}&lat=${latCenter}&zoom=5`);
  1143. });
  1144. }
  1145.  
  1146. function initWVGIS(){
  1147. if(document.getElementById("OOMWazeButtonDiv") !== null)
  1148. document.getElementById("OOMWazeButtonDiv").remove();
  1149. $('#RoadLayerList').prepend('<li><div id="OOMWazeButtonDiv" aria-hidden="true" style="cursor:pointer; margin-top:8px; height:30px; width:34px; background-image:url(https://imgur.com/NTLWfFz.png); background-repeat:no-repeat;"></div></li>');
  1150. $('#OOMWazeButtonDiv').click(function(){
  1151. let source = new Proj4js.Proj('EPSG:900913');
  1152. var point = new Proj4js.Point(parseFloat(view.center.x), parseFloat(view.center.y));
  1153. Proj4js.transform(source, Proj4js.WGS84, point);
  1154.  
  1155. window.open(`https://www.waze.com/en-US/editor/?lon=${point.x}&lat=${point.y}&zoom=${view.zoom-5}`);
  1156. });
  1157. }
  1158.  
  1159. function initWVFlood(){
  1160. if($("#OOMWazeButtonDiv") !== null)
  1161. $("#OOMWazeButtonDiv").remove();
  1162.  
  1163. $('#tools').prepend('<button type="button" id="btnOpenWaze" class="btn btn-default btn-lg bootstrap_btn2" style="cursor:pointer; margin-left: 0px; min-width:31px; height=26px; background-image:url(https://imgur.com/NTLWfFz.png); background-repeat:no-repeat; background-size:100%;" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="click to open in Waze Map Editor"><span ></span></button>');
  1164.  
  1165. $('#btnOpenWaze').click(function(){
  1166. let source = new Proj4js.Proj('EPSG:900913');
  1167. var point = new Proj4js.Point(parseFloat(Flood.map.extent.getCenter().x), parseFloat(Flood.map.extent.getCenter().y));
  1168. Proj4js.transform(source, Proj4js.WGS84, point);
  1169. let zoom = Flood.map.getLevel() - 4;
  1170. if(zoom < 0)
  1171. zoom = 0;
  1172.  
  1173. window.open(`https://www.waze.com/en-US/editor/?lon=${point.x}&lat=${point.y}&zoom=${zoom}`);
  1174. });
  1175. }
  1176.  
  1177. bootstrap();
  1178. })();