PageSourceSearch

https://www.ennsdorf.gv.at/system/statV.1787223863/Javascript/rismap3/rismap3leaflet.js

js ennsdorf.gv.at collected 2026-09-25 00:13:59 UTC 12,870 bytes, 309 lines download raw bytes

1function rismap3(ctrl) {
2    var self = this;
3    var curCtrl = ctrl;
4    var baseLayers = {};
5    var overlayLayers = {};
6    var lStreetMap;
7    var lSatellite;
8    var lBasemapat;
9    var lBasemapatgrau;
10    var lBasemapathighdpi;
11    var lBasemapatorthofoto;
12    var oStreets;
13    var mymap;
14    var geoRefMarker;
15    // Function to merge objects (similar to $.extend() in jQuery)
16    const mergeObjects = (target, ...sources) => {
17        sources.forEach(source => {
18            for (let key in source) {
19                if (source.hasOwnProperty(key)) {
20                    target[key] = source[key];
21                }
22            }
23        });
24        return target;
25    };
26
27    var options = {
28        "clickMessage": "Klicken Sie hier um die Karte zu laden",
29        "showbasemap": true,
30        "sgvgisenableorthophoto": false,
31        "sgvgisenableaddress": false,
32        "sgvgisenablestreet": false,
33        "streetslbl": "Strassen",
34        "addresslbl": "Adressen",
35        "orthofotolbl": "Orthofoto"
36    };
37
38    // Merge options with rismap3_global_settings
39    options = mergeObjects(options, rismap3_global_settings);
40
41    // Assuming ctrl is the element reference, fetching its map3_settings
42    if (ctrl.dataset.map3_settings) {
43        options = mergeObjects(options, JSON.parse(ctrl.dataset.map3_settings));
44    }
45
46    this.loadLeaflet = function () {
47        if (typeof (L) === 'undefined') {
48            var leafletScript = document.createElement("script");
49            leafletScript.id = "leafletScript"
50            leafletScript.type = "text/javascript";
51            leafletScript.src = "https://cdnfile.gem2go.page/cdnstatic/system/Javascript/leaflet/leaflet.js";
52            document.getElementsByTagName('head')[0].appendChild(leafletScript);
53            var leafletCSS = document.createElement("link");
54            leafletCSS.id = "leafletCSS"
55            leafletCSS.setAttribute('rel', 'stylesheet');
56            leafletCSS.setAttribute('type', 'text/css');
57            leafletCSS.setAttribute('href',
58                'https://cdnfile.gem2go.page/cdnstatic/system/Javascript/leaflet/leaflet.css');
59            document.getElementsByTagName('head')[0].appendChild(leafletCSS);
60
61            leafletScript.onload = function () {
62                var leafletProvidersScript = document.createElement("script");
63                leafletProvidersScript.id = "leafletProviderScript"
64                leafletProvidersScript.type = "text/javascript";
65                leafletProvidersScript.src = envurl + "system/JavaScript/rismap3/leaflet-providers.js";
66                document.getElementsByTagName('head')[0].appendChild(leafletProvidersScript);
67                leafletProvidersScript.onload = function () {
68                    self.setUpMap(curCtrl);
69                }
70            }
71        } else {
72            self.setUpMap(curCtrl);
73        }
74    }
75
76    this.updateLatLng = function (lat, lng) {
77        geoRefMarker.setLatLng([lat, lng]);
78        mymap.panTo([lat, lng]);
79    }
80
81    this.getMarker = function () {
82        return geoRefMarker;
83    }
84
85    this.setUpMap = function (ctrl) {
86        if (options.sgvgisenableaddress) {
87            lStreetMap = L.tileLayer.provider('CartoDB.VoyagerNoLabels');
88        } else {
89            lStreetMap = L.tileLayer.provider('OpenStreetMap.Mapnik');
90        }
91        lSatellite = L.tileLayer.provider('Esri.WorldImagery');
92
93        baseLayers = {
94            'Map': lStreetMap,
95            'Satellite': lSatellite,
96        };
97
98        overlayLayers = {
99        };
100
101        if (options.showbasemap) {
102            lBasemapat = L.tileLayer.provider('BasemapAT.basemap');
103            lBasemapatgrau = L.tileLayer.provider('BasemapAT.grau');
104            lBasemapathighdpi = L.tileLayer.provider('BasemapAT.highdpi');
105            lBasemapatorthofoto = L.tileLayer.provider('BasemapAT.orthofoto');
106            baseLayers = mergeObjects(baseLayers, {
107                'Basemap.at': lBasemapat,
108                'Basemap.at (GRAU)': lBasemapatgrau,
109                'Basemap.at (HIGHDPI)': lBasemapathighdpi,
110                'Basemap.at (ORTHOFOTO)': lBasemapatorthofoto,
111            });
112            oStreets = L.tileLayer.provider('BasemapAT.overlay');
113            overlayLayers = mergeObjects(overlayLayers, {
114                'Streets': oStreets
115            });
116        }
117
118        mymap = L.map(ctrl);
119        if (options.sgvgisenableorthophoto) {
120            var orthFoto = L.tileLayer('https://geoservices.buergernetz.bz.it/mapproxy/p_bz-Orthoimagery/ows?layer=Aerial-2023-RGB&style=default&tilematrixset=EPSG_3857&Service=WMTS&Request=GetTile&Version=1.0.0&Format=image/png&TileMatrix={z}&TileCol={x}&TileRow={y}', {});
121            baseLayers[options.orthofotolbl] = orthFoto;
122        }
123
124        if (options.sgvgisenableaddress) {
125            var wmsLayer = L.tileLayer.wms('https://geoservices3.civis.bz.it/geoserver/gvcc-Address/wms?', {
126                styles: 'Addresses-Web',
127                layers: 'Addresses',
128                format: 'image/png',
129                transparent: true
130            });
131            overlayLayers[options.addresslbl] = wmsLayer;
132            if (rismap3_global_settings.defaultlayer === 'hybrid' || rismap3_global_settings.defaultlayer === 'roadmap')
133                wmsLayer.addTo(mymap);
134        }
135
136        if (options.sgvgisenablestreet) {
137            var lang = 'language=' + (rissprachid == '1' ? 'de' : 'it');
138            var streetLayer = L.tileLayer.wms('https://geoservices1.civis.bz.it/geoserver/p_bz-TransportNetwork/ows?' + lang, {
139                layers: 'LinksSequences-Rendering,LinksSequences-Labels',
140                styles: 'LinksSequences-Rendering,LinksSequences-Labels',
141                format: 'image/png8',
142                version: '1.3.1',
143                transparent: true,
144            });
145            overlayLayers[options.streetslbl] = streetLayer;
146            if (rismap3_global_settings.defaultlayer === 'hybrid' || rismap3_global_settings.defaultlayer === 'roadmap')
147                streetLayer.addTo(mymap);
148        }
149
150        //Erweiterung für L3G0 werden mehrere Marker als Array übergeben werden diese hier ausgegeben.
151        const map3_pin_DataArray = JSON.parse(ctrl.dataset.map3_pin);
152        if (Array.isArray(map3_pin_DataArray)) {
153            if (map3_pin_DataArray.length > 0) {
154                console.log(map3_pin_DataArray.length > 0)
155                let fitBoundsRange = [];
156                let fitBoundsCoordinates;
157                for (let i = 0; i < map3_pin_DataArray.length; i++) {
158                    var loc = map3_pin_DataArray[i];
159                    mymap.setView([loc.lat, loc.lng], 10);
160                    var marker = L.marker([loc.lat, loc.lng], { draggable: (loc.geocoding === "true") }).addTo(mymap);
161                    geoRefMarker = marker;
162
163                    fitBoundsCoordinates = [
164                        loc.lat,
165                        loc.lng
166                    ]
167                    fitBoundsRange.push(fitBoundsCoordinates);
168                    if (loc.description) {
169                        var description = loc.description;
170                        var content = "<strong>" + description.titel + "</strong>";
171                        if (description.link != 'false') {
172                            var furtherLink = document.createElement('a');
173                            var linkText = "Weitere Informationen"
174                            content = "<strong>" + description.titel + "</strong><br /><p>" + description.text + "</p><br /><a href='" + description.link + "' title='" + linkText + "' target='_blank'>" + linkText + "</a>";
175                        }
176                        marker.bindPopup(content);
177                    }
178                }
179
180                mymap.fitBounds(fitBoundsRange);
181
182            } else {
183
184                var noGeoCordinatesText = "Leider sind keine Geokoordinaten für diese Einträge vorhanden."
185                var noGeoCordinatesAlert = document.createElement("div");
186                noGeoCordinatesAlert.innerHTML += noGeoCordinatesText;
187                noGeoCordinatesAlert.classList += "alert alert-warning"
188
189                var alertIcon = document.createElement("span");
190                alertIcon.classList += "fa-light fa-circle-exclamation me-2";
191
192                document.querySelector(".bemContainer--mapPlaceholder").replaceWith(noGeoCordinatesAlert);
193                noGeoCordinatesAlert.prepend(alertIcon);
194            }
195           
196        } else {
197
198            var loc = JSON.parse(ctrl.dataset.map3_pin)
199            mymap.setView([loc.lat, loc.lng], rismap3_global_settings.zoom);
200            var marker = L.marker([loc.lat, loc.lng], { draggable: (loc.geocoding === "true") }).addTo(mymap);
201            geoRefMarker = marker;
202
203            if (loc.description) {
204                var description = loc.description;
205                var content = "<strong>" + description.titel + "</strong>";
206                if (description.strasse)
207                    content += "<br />" + description.strasse + " ";
208                if (description.hnr)
209                    content += description.hnr;
210                if (description.plz || description.ortname)
211                    content += "<br />";
212                if (description.plz)
213                    content += description.plz;
214                if (description.ortname) {
215                    if (description.plz)
216                        content += " ";
217                    content += description.ortname;
218                }
219                marker.bindPopup(content);
220            }
221        }
222
223        layerControl = L.control.layers(baseLayers, overlayLayers, {
224            collapsed: true
225        }).addTo(mymap);
226
227        switch (rismap3_global_settings.defaultlayer) {
228            case 'roadmap':
229                lStreetMap.addTo(mymap);
230                break;
231            case 'hybrid':
232            case 'satellite':
233                lSatellite.addTo(mymap);
234                break;
235            case 'basemap':
236                lBasemapat.addTo(mymap);
237                break;
238            case 'grau':
239                lBasemapatgrau.addTo(mymap);
240                break;
241            case 'hidpi':
242                lBasemapathighdpi.addTo(mymap);
243                break;
244            case 'ortho':
245                lBasemapatorthofoto.addTo(mymap);
246                break;
247        }
248
249        if (rismap3_global_settings.defaultlayer === 'hybrid')
250            oStreets.addTo(mymap);
251
252        // ResizeObserver einbauen, um Map bei Größenänderung neu zu zentrieren
253        if (typeof ResizeObserver !== 'undefined') {
254            const mapContainer = ctrl;
255            const resizeObserver = new ResizeObserver(() => {
256                mymap.invalidateSize();
257                if (typeof fitBoundsRange !== 'undefined' && fitBoundsRange.length > 0) {
258                    mymap.fitBounds(fitBoundsRange);
259                } else if (geoRefMarker) {
260                    mymap.setView(geoRefMarker.getLatLng());
261                }
262            });
263            resizeObserver.observe(mapContainer);
264        } else {
265            window.addEventListener('resize', () => {
266                mymap.invalidateSize();
267                if (typeof fitBoundsRange !== 'undefined' && fitBoundsRange.length > 0) {
268                    mymap.fitBounds(fitBoundsRange);
269                } else if (geoRefMarker) {
270                    mymap.setView(geoRefMarker.getLatLng());
271                }
272            });
273        }      oStreets.addTo(mymap);
274    }
275
276    this.initialiseRisMap3 = function () {
277        if (options.clicktostart === false) {
278            self.loadLeaflet();
279        } else {
280            self.addLeafletClickDiv(curCtrl);
281        }
282    }
283
284    this.addLeafletClickDiv = function (ctrl) {
285        var clkDiv = document.createElement('div');
286        clkDiv.className = 'mfClickToLoadWrapper';
287        var innerDiv = document.createElement('div');
288        innerDiv.className = 'mfClickToLoad';
289        innerDiv.innerHTML = "<p class='mapIcon'></p><p>" + options.clickMessage + "</p>";
290        clkDiv.appendChild(innerDiv);
291
292        clkDiv.addEventListener('click', function () {
293            ctrl.removeChild(clkDiv);
294            self.loadLeaflet();
295        });
296
297        ctrl.appendChild(clkDiv);
298    }
299}
300
301function initializeMaps() {
302    var mapdivs = document.querySelectorAll(".rismap3_map, .bemContainer--mapPlaceholder");
303    mapdivs.forEach(function (mapdiv) {
304        var lf = new rismap3(mapdiv);
305        lf.initialiseRisMap3();
306    });
307}
308
309document.addEventListener("DOMContentLoaded", initializeMaps);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.