1
1
/*jslint browser: true, for: true, long: true, unordered: true */
2
2
/*global window console google */
3
3
4
+ /*
5
+ tedoen:
6
+ - "Verzonden naar aanvrager op :" (https://zoek.officielebekendmakingen.nl/gmb-2022-441976.html)
7
+ ..en https://zoek.officielebekendmakingen.nl/gmb-2022-463945.html
8
+
9
+ Verzonden naar aanvrager op: --
10
+ - https://zoek.officielebekendmakingen.nl/gmb-2022-440164.html
11
+ */
12
+
4
13
// This function is called by Google Maps API, after loading the library. Function name is sent as query parameter.
5
14
function initBekendmakingenMap ( ) {
6
15
var mapDetails = {
@@ -13,7 +22,7 @@ function initBekendmakingenMap() {
13
22
var map ;
14
23
var infoWindow ;
15
24
var inputData ;
16
- // var markersArray = [];
25
+ var markersArray = [ ] ;
17
26
18
27
function convertRijksdriehoekToLatLng ( x , y ) {
19
28
// The city "Amsterfoort" is used as reference "Rijksdriehoek" coordinate.
@@ -61,10 +70,15 @@ function initBekendmakingenMap() {
61
70
) ;
62
71
}
63
72
73
+ function getDaysPassed ( date ) {
74
+ const today = new Date ( new Date ( ) . toDateString ( ) ) ; // Rounded date
75
+ const dateFrom = new Date ( date . toDateString ( ) ) ;
76
+ return Math . round ( ( today . getTime ( ) - dateFrom . getTime ( ) ) / ( 1000 * 60 * 60 * 24 ) ) ;
77
+ }
78
+
64
79
function parseBekendmaking ( responseXml , datumGepubliceerd , gmbNumber ) {
65
80
const identifier = "Verzonden naar aanvrager op: " ;
66
81
const alineas = getAlineas ( responseXml ) ;
67
- const today = new Date ( new Date ( ) . toDateString ( ) ) ;
68
82
const maxLooptijd = ( 6 * 7 ) + 1 ; // 6 weken de tijd om bezwaar te maken
69
83
const dateFormatOptions = { "weekday" : "long" , "year" : "numeric" , "month" : "long" , "day" : "numeric" } ;
70
84
var datumBekendgemaakt ; // Datum verzonden aan belanghebbende(n)
@@ -88,11 +102,7 @@ function initBekendmakingenMap() {
88
102
// Remove time from dates:
89
103
datumBekendgemaakt = new Date ( value . substr ( 35 , 4 ) + "-" + value . substr ( 32 , 2 ) + "-" + value . substr ( 29 , 2 ) ) ;
90
104
datumBekendgemaakt = new Date ( datumBekendgemaakt . toDateString ( ) ) ;
91
- looptijd = Math . round ( ( today . getTime ( ) - datumGepubliceerd . getTime ( ) ) / ( 1000 * 60 * 60 * 24 ) ) ;
92
- console . log ( "today.getTime(): " + today . getTime ( ) ) ;
93
- console . log ( "datumGepubliceerd.getTime(): " + datumGepubliceerd . getTime ( ) ) ;
94
- console . log ( "looptijd: " + looptijd ) ;
95
- console . log ( "maxLooptijd: " + maxLooptijd ) ;
105
+ looptijd = getDaysPassed ( datumBekendgemaakt ) ;
96
106
resterendAantalDagenBezwaartermijn = maxLooptijd - looptijd ;
97
107
document . getElementById ( gmbNumber ) . innerHTML = "Gepubliceerd: " + datumGepubliceerd . toLocaleDateString ( "nl-NL" , dateFormatOptions ) + ".<br />Bekendgemaakt aan belanghebbende: " + datumBekendgemaakt . toLocaleDateString ( "nl-NL" , dateFormatOptions ) + ".<br />" + (
98
108
resterendAantalDagenBezwaartermijn > 0
@@ -142,44 +152,123 @@ function initBekendmakingenMap() {
142
152
return websiteUrl . substr ( 40 , websiteUrl . length - 45 ) ;
143
153
}
144
154
145
- function addMarker ( feature ) {
155
+ function getIcon ( title ) {
156
+ const aanvraagFilters = [
157
+ "verlenging" ,
158
+ "aanvraag"
159
+ ] ;
160
+ var apvFilter = "besluit apv" ;
161
+ var isAanvraag = false ;
162
+ title = title . toLowerCase ( ) ;
163
+ aanvraagFilters . forEach ( function ( filter ) {
164
+ if ( title . substring ( 0 , filter . length ) === filter ) {
165
+ isAanvraag = true ;
166
+ }
167
+ } ) ;
168
+ if ( isAanvraag ) {
169
+ return "img/aanvraag.png" ;
170
+ }
171
+ if ( title . substring ( 0 , apvFilter . length ) === apvFilter ) {
172
+ return "img/apv.png" ;
173
+ }
174
+ if ( title . indexOf ( "exploitatievergunning" ) >= 0 || title . indexOf ( "alcoholwetvergunning" ) >= 0 ) {
175
+ return "img/bar.png" ;
176
+ }
177
+ if ( title . indexOf ( "bed & breakfast" ) >= 0 || title . indexOf ( "vakantieverhuur" ) >= 0 ) {
178
+ return "img/hotel.png" ;
179
+ }
180
+ return "img/constructie.png" ;
181
+ }
182
+
183
+ function findUniquePosition ( proposedCoordinate ) {
184
+
185
+ function isCoordinateAvailable ( coordinate ) {
186
+ var isAvailable = true ; // Be positive
187
+ var i ;
188
+ var marker ;
189
+ for ( i = 0 ; i < markersArray . length ; i += 1 ) {
190
+ // Don't use forEach, to gain some performance.
191
+ marker = markersArray [ i ] ;
192
+ if ( marker . position . lat === coordinate . lat && marker . position . lng === coordinate . lng ) {
193
+ isAvailable = false ;
194
+ break ;
195
+ }
196
+ }
197
+ return isAvailable ;
198
+ }
199
+
200
+ while ( ! isCoordinateAvailable ( proposedCoordinate ) ) {
201
+ proposedCoordinate . lat = proposedCoordinate . lat + 0.000017 ;
202
+ proposedCoordinate . lng = proposedCoordinate . lng + 0.000016 ;
203
+ }
204
+ return proposedCoordinate ;
205
+ }
206
+
207
+ function isMarkerVisible ( age , periodToShow ) {
208
+ switch ( periodToShow ) {
209
+ case "3d" :
210
+ return age <= 3 ;
211
+ case "7d" :
212
+ return age <= 7 ;
213
+ case "14d" :
214
+ return age <= 14 ;
215
+ default :
216
+ return true ;
217
+ }
218
+ }
219
+
220
+ function addMarker ( feature , periodToShow ) {
146
221
// 2022-09-05T09:04:57.175Z;
147
222
// https://zoek.officielebekendmakingen.nl/gmb-2022-396401.html;
148
223
// "Besluit apv vergunning Verleend Monnikendammerweg 27";
149
224
// "TVM- 7 PV reserveren - Monnikendammerweg 27-37 - 03-07/10/2022, Monnikendammerweg 27";
150
225
// 125171;
151
226
// 488983
152
227
// https://developers.google.com/maps/documentation/javascript/reference#MarkerOptions
228
+ var datumGepubliceerd = new Date ( feature . properties . datum_tijdstip ) ;
229
+ var position = findUniquePosition ( convertRijksdriehoekToLatLng ( feature . geometry . coordinates [ 0 ] , feature . geometry . coordinates [ 1 ] ) ) ;
230
+ var age = getDaysPassed ( datumGepubliceerd ) ;
153
231
var marker = new google . maps . Marker ( {
154
232
"map" : map ,
155
- "position" : convertRijksdriehoekToLatLng ( feature . geometry . coordinates [ 0 ] , feature . geometry . coordinates [ 1 ] ) ,
233
+ "position" : position ,
156
234
"clickable" : true ,
157
235
"optimized" : true ,
158
- "visible" : true ,
159
- //"icon": "https://elektrischdeelrijden.nl/wp-content/include-me/map/auto.png",
236
+ "visible" : isMarkerVisible ( age , periodToShow ) ,
237
+ //"icon": "wegwerkzaamheden-40.svg",
238
+ "icon" : {
239
+ "url" : getIcon ( feature . properties . titel )
240
+ } ,
160
241
//"zIndex": property.zIndex,
161
242
"title" : feature . properties . titel
162
243
} ) ;
163
244
marker . addListener (
164
245
"click" ,
165
246
function ( ) {
166
247
var gmbNumber = getGmbNumberFromUrl ( feature . properties . url ) ;
167
- var datumGepubliceerd = new Date ( feature . properties . datum_tijdstip ) ;
168
248
var description = feature . properties . beschrijving + "<br /><br />Meer info: <a href=\"" + feature . properties . url + "\" target=\"blank\">" + feature . properties . url + "</a>." ;
169
249
showInfoWindow ( marker , feature . properties . titel , "<div id=\"" + gmbNumber + "\"><br /><br /><br /></div>" + description ) ;
170
250
collectBezwaartermijn ( gmbNumber , datumGepubliceerd ) ;
171
251
}
172
252
) ;
173
- //markersArray.push({
174
- // "marker": marker,
175
- // "maxZoomLevel": property.maxZoomLevel,
176
- // "minZoomLevel": property.minZoomLevel
177
- //});
178
- return marker ;
253
+ markersArray . push ( {
254
+ "age" : age ,
255
+ "position" : position ,
256
+ "marker" : marker
257
+ } ) ;
179
258
}
180
259
181
260
function addMarkers ( ) {
182
- inputData . features . forEach ( addMarker ) ;
261
+ const periodToShow = document . getElementById ( "idCbxPeriod" ) . value ;
262
+ inputData . features . forEach ( function ( feature ) {
263
+ addMarker ( feature , periodToShow ) ;
264
+ } ) ;
265
+ }
266
+
267
+ function updateDisplayLevel ( ) {
268
+ const periodToShow = document . getElementById ( "idCbxPeriod" ) . value ;
269
+ markersArray . forEach ( function ( marker ) {
270
+ marker . marker . setVisible ( isMarkerVisible ( marker . age , periodToShow ) ) ;
271
+ } ) ;
183
272
}
184
273
185
274
function internalInitMap ( ) {
@@ -197,37 +286,30 @@ function initBekendmakingenMap() {
197
286
}
198
287
) ;
199
288
map . addListener ( "zoom_changed" , function ( ) {
289
+ var periodElm = document . getElementById ( "idCbxPeriod" ) ;
200
290
var zoom = map . getZoom ( ) ;
201
- // // Iterate over markers and call setVisible
202
- // markersArray.forEach(function (marker) {
203
- // marker.marker.setVisible(isMarkerVisible(zoom, marker.minZoomLevel, marker.maxZoomLevel));
204
- // });
205
- // infoWindow.close();
291
+ // Iterate over markers and call setVisible
292
+ if ( zoom <= 13 && ( periodElm . value === "7d" || periodElm . value === "14d" || periodElm . value === "all" ) ) {
293
+ // Set to 3 days
294
+ periodElm . value = "3d" ;
295
+ updateDisplayLevel ( ) ;
296
+ } else if ( zoom <= 14 && ( periodElm . value === "14d" || periodElm . value === "all" ) ) {
297
+ // Set to 7 days
298
+ periodElm . value = "7d" ;
299
+ updateDisplayLevel ( ) ;
300
+ } else if ( zoom <= 15 && ( periodElm . value === "all" ) ) {
301
+ // Set to 14 days
302
+ periodElm . value = "14d" ;
303
+ updateDisplayLevel ( ) ;
304
+ }
305
+ infoWindow . close ( ) ;
206
306
console . log ( "ZoomLevel: " + zoom ) ;
207
307
} ) ;
208
308
map . addListener ( "center_changed" , function ( ) {
209
309
console . log ( "New center: " + map . getCenter ( ) ) ;
210
310
} ) ;
211
311
}
212
312
213
- function isKnownBekendmakingType ( titel ) {
214
- const filters = [
215
- "besluit" ,
216
- "ontwerpbesluit" ,
217
- "gemeente amsterdam" ,
218
- "verlenging" ,
219
- "aanvraag" ,
220
- "vergunning verleend"
221
- ] ;
222
- var isKnown = false ;
223
- filters . forEach ( function ( filter ) {
224
- if ( titel . substring ( 0 , filter . length ) . toLowerCase ( ) === filter ) {
225
- isKnown = true ;
226
- }
227
- } ) ;
228
- return isKnown ;
229
- }
230
-
231
313
function loadData ( ) {
232
314
233
315
function sortBekendmakingen ( a , b ) {
@@ -259,4 +341,5 @@ function initBekendmakingenMap() {
259
341
260
342
internalInitMap ( ) ;
261
343
loadData ( ) ;
344
+ document . getElementById ( "idCbxPeriod" ) . addEventListener ( "change" , updateDisplayLevel ) ;
262
345
}
0 commit comments