forked from bruvv/Waze-Editor-Dutch-helper
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwaze_map_editor_buddy.user.js
223 lines (199 loc) · 7.05 KB
/
waze_map_editor_buddy.user.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
// ==UserScript==
// @name Waze Editor Dutch helper
// @version 2024.08.20.001
// @namespace https://github.com/bruvv/Waze-Editor-Dutch-helper/
// @homepageURL https://github.com/bruvv/Waze-Editor-Dutch-helper/
// @updateURL https://github.com/bruvv/Waze-Editor-Dutch-helper/raw/main/waze_map_editor_buddy.user.js
// @downloadURL https://github.com/bruvv/Waze-Editor-Dutch-helper/raw/main/waze_map_editor_buddy.user.js
// @supportURL https://github.com/bruvv/Waze-Editor-Dutch-helper/issues
// @description Open various map services from Waze Editor
// @author Nivong
// @match https://www.waze.com/editor*
// @match https://www.waze.com/*/editor*
// @match https://beta.waze.com/editor*
// @match https://beta.waze.com/*/editor*
// @exclude https://www.waze.com/user/editor*
// @exclude https://www.waze.com/*/user/editor*
// @grant GM_addStyle
// @require https://update.greasyfork.org/scripts/383120/698689/Proj4js-Wazedev.js
// @require https://update.greasyfork.org/scripts/24851/1161728/WazeWrap.js
// @license GPLv3
// ==/UserScript==
/* global WazeWrap, I18n, proj4, $, W */
/* eslint curly: ["warn", "multi-or-nest"] */
proj4.defs(
"EPSG:28992",
"+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +towgs84=565.237,50.0087,465.658,-0.406857,0.350733,-1.87035,4.0812 +units=m +no_defs"
);
(function () {
"use strict";
window.setInterval(function () {
let permaElement = document.querySelector("a.permalink");
if (permaElement != null) {
let fullURL = document.querySelector("a.permalink").href;
let index = fullURL.indexOf("/editor");
let path = fullURL.substr(index, fullURL.length);
path = path.replace(/&s=[0-9]*/, "");
path = path.replace(/&marker=(true|false)*/, "");
window.history.replaceState("", "", path);
}
}, 1000);
})();
function calculateBAGZoom(wazeZoom) {
// Map Waze zoom levels to BAG zoom levels
return wazeZoom - 4;
}
function calculateMapillaryZoom(wazeZoom) {
// Convert Waze zoom level to Mapillary zoom level
// Adjust this mapping as needed
return wazeZoom - 1;
}
function calculateSatellietDataPortaalZoom(wazeZoom) {
// Convert Waze zoom level to Satelliet Data Portaal zoom level
// Adjust this mapping as needed
return wazeZoom;
}
function convertZoomForGoogleMaps(wazeZoom) {
// Example conversion logic - this may need to be adjusted
// Google Maps zoom levels range from 0 (the entire world) to 21+ (individual buildings)
return Math.max(0, Math.min(21, wazeZoom)); // Adjust this formula as needed
}
(function () {
"use strict";
GM_addStyle(`
.dropdown {
position: fixed;
bottom: 40%;
right: 1%;
z-index: 1000;
}
.dropdown-logo {
cursor: pointer;
display: block;
width: 50px;
height: 50px;
}
.dropdown-content {
display: none;
position: absolute;
right: 0;
background-color: #f9f9f9;
min-width: 160px;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
z-index: 1;
}
.dropdown-content a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: flex;
align-items: center;
}
.dropdown-content img {
width: 20px;
height: 20px;
margin-right: 8px;
}
.dropdown-content a:hover {background-color: #f1f1f1}
.dropdown:hover .dropdown-content {
display: block;
}
`);
let dropdown = document.createElement("div");
dropdown.className = "dropdown";
let logo = document.createElement("img");
logo.className = "dropdown-logo";
logo.src = "https://dronevlieger.nl/wazelogo.png";
dropdown.appendChild(logo);
let dropdownContent = document.createElement("div");
dropdownContent.className = "dropdown-content";
let maps = [
{
name: "Google Maps",
logo: "https://www.google.com/favicon.ico",
},
{
name: "Mapillary",
logo: "https://upload.wikimedia.org/wikipedia/commons/thumb/a/a3/Mapillary_logo.svg/1024px-Mapillary_logo.svg.png",
},
{
name: "Satellietdataportaal",
logo: "https://satellietdataportaal.nl/favicon.ico",
},
{ name: "Wegstatus", logo: "https://www.wegstatus.nl/favicon.ico" },
{
name: "Melvin",
logo: "https://melvin.ndw.nu/assets/icon/favicon-32.png",
},
{
name: "BAG Viewer",
logo: "https://bagviewer.kadaster.nl/lvbag/bag-viewer/favicon.ico",
},
];
maps.forEach(function (map) {
let link = document.createElement("a");
link.href = "#";
let img = document.createElement("img");
img.src = map.logo;
link.appendChild(img);
let text = document.createTextNode(map.name);
link.appendChild(text);
link.addEventListener("click", function () {
openMap(map.name); // Function to handle map opening
});
dropdownContent.appendChild(link);
});
dropdown.appendChild(dropdownContent);
document.body.appendChild(dropdown);
function openMap(mapName) {
// Extract coordinates from the current URL
let params = new URLSearchParams(window.location.search);
let lat = parseFloat(params.get("lat"));
let lon = parseFloat(params.get("lon"));
let latStr = lat.toString().replace(".", "d");
let lonStr = lon.toString().replace(".", "d");
let wazeZoom = parseInt(params.get("zoomLevel"));
let googleMapsZoom = convertZoomForGoogleMaps(wazeZoom);
let mapillaryZoom = calculateMapillaryZoom(wazeZoom);
let satellietZoom = calculateSatellietDataPortaalZoom(wazeZoom);
let bagZoom = calculateBAGZoom(wazeZoom);
let transformedCoordinates = proj4("EPSG:4326", "EPSG:28992", [lon, lat]);
if (!isFinite(parseFloat(lat)) || !isFinite(parseFloat(lon))) {
alert("Invalid coordinates!");
return;
}
let url = "";
switch (mapName) {
case "Google Maps":
url = `https://www.google.com/maps/place/${lat},${lon}/@${lat},${lon},${googleMapsZoom}z`;
break;
case "Mapillary":
url = `https://www.mapillary.com/app/?lat=${lat}&lng=${lon}&z=${mapillaryZoom}`; // Adjust zoom level as needed
break;
case "Satellietdataportaal":
url = `https://viewer.satellietdataportaal.nl/@${lat},${lon},${satellietZoom}`;
break;
case "Wegstatus":
url = `https://www.wegstatus.nl/dashboardnl/lat=${latStr}%7Clon=${lonStr}%7Cz=${satellietZoom}`;
break;
case "Melvin": {
const offsetLat = 0.002; // Latitude offset for bounding box
const offsetLon = 0.003; // Longitude offset for bounding box
let swLat = lat - offsetLat;
let swLon = lon - offsetLon;
let neLat = lat + offsetLat;
let neLon = lon + offsetLon;
url = `https://melvin.ndw.nu/public?sw=${swLat},%20${swLon}&ne=${neLat},%20${neLon}&showHeader=true`;
break;
}
case "BAG Viewer":
url = `https://bagviewer.kadaster.nl/lvbag/bag-viewer/?geometry.x=${transformedCoordinates[0]}&geometry.y=${transformedCoordinates[1]}&zoomlevel=${bagZoom}`;
break;
}
if (url) {
window.open(url, "_blank");
}
}
event.preventDefault();
return false;
})();