Vairāk

Kāpēc Openlayers KML slānis nav definēts, izmantojot pastāvīgo saiti?

Kāpēc Openlayers KML slānis nav definēts, izmantojot pastāvīgo saiti?


Es strādāju pie Openlayers, lai dinamiski ielādētu KML ierakstus kartē. Es vēlos, lai tā ielādētu filtrētu KML ikreiz, kad karte tiek pārvietota vai tuvināta, pamatojoties uz skata punktu un tālummaiņas līmeni.

Es sapratu, ka tas darbojas ar zemāk esošo kodu, bet nez kāpēc Permalink vairs nedarbojas. Nospiežot pastāvīgās saites atkļūdošanas konsoli, tiek parādīta kļūda: Neķerta tipa kļūda: nevar iestatīt rekvizītu “ielādēts” kā nenoteiktu rindā 108. Tā ir līnijalayer.loaded = false;par funkciju UpdateKmlLayer ().

Vai kāds varētu palīdzēt, kā man te trūkst?

// Kartes sākuma pozīcija (vienkāršības labad šeit cietā kodā) var lat = 65.37371 var lon = 24.49389 var zoom = 6; var karte; // komplekss OpenLayers tipa objekts. Karte var KMLlayer; // Inicializējiet objekta funkciju “map” init () {map = new OpenLayers.Map ("map", {controls: [], maxExtent: new OpenLayers.Bounds (-20037508.34, -20037508.34, 20037508.34, 20037508.34), maxResolution: 156543.0339, numZoomLevels: 16, vienības: 'm', projekcija: jauns OpenLayers.Projection ("EPSG: 900913"), displayProjection: jauns OpenLayers.Projection ("EPSG: 4326"), eventListeners: {"moveend": moveEnd,} ,}); // Kontrolē karti.addControl (jauns OpenLayers.Control.Navigation ()); map.addControl (jauns OpenLayers.Control.PanZoomBar (), jauns OpenLayers.Pixel (0, 15)); map.addControl (jauns OpenLayers.Control.Permalink ()); map.addControl (jauns OpenLayers.Control.ScaleLine ({ģeodēziskais: patiesais})); map.addControl (jauns OpenLayers.Control.MousePosition ()); map.addControl (jauns OpenLayers.Control.Attribution ()); // Osmarender layerTilesAtHome = jauns OpenLayers.Layer.OSM.Osmarender ("Osmarender", {numZoomLevels: 18}); map.addLayer (layerTilesAtHome); // Vietējais KML KMLlayer = jauns OpenLayers.Layer.Vector ("KMLlayer", {projekcija: map.displayProjection, stratēģijas: [jauns OpenLayers.Strategy.BBOX (),], protokols: jauns OpenLayers.Protocol.HTTP ({url: "kml.php", formāts: jauns OpenLayers.Format.KML ({extractStyles: true, extractAttributes: true})})}); map.addLayer (KMLlayer); var switchcherControl = jauns OpenLayers.Control.LayerSwitcher (); map.addControl (switchcherControl); switchcherControl.maximizeControl (); if (! map.getCenter ()) {var lonLat = new OpenLayers.LonLat (lon, lat) .transform (new OpenLayers.Projection ("EPSG: 4326"), map.getProjectionObject ()); map.setCenter (lonLat, zoom); }} // init () funkcija moveEnd (notikums) {console.log (event.type); UpdateKmlLayer (KMLlayer); } funkcija UpdateKmlLayer (slānis) {console.log ("updateKML"); console.log (slānis); layer.loaded = false; // iestatījums, kas ielādēts uz nepatiesu, izkrauj slāņa slāni.setVisibility (true); // redzamības iestatīšana uz patiesu liek atkārtoti ielādēt slāņa slāni.refresh ({force: true, params: {'zoom': map.getZoom ()}}); // piespiest jaunus KML datus}

Cēlonis:

Kad kartei tiek pievienota pastāvīgo saišu vadīkla, tā tiek reģistrēta, lai saņemtu paziņojumu par šādiem notikumiem:

  • pārvietot
  • maiņas slānis
  • mainiet bāzes slāni

Kad pievienojat layerTilesAtHome slāni kartē maināmā slāņa vai mainīgā slāņa notikumu, ja tas tiek aktivizēts un nosūtīts uz pastāvīgās saites vadīklu. Pastāvīgo saišu vadība savukārt atkārtoti ievieto karti un atbilstoši pastāvīgajai saitei nosaka slāņa redzamību.

Bet, pārvietojot karti, pastāvīgās saites vadība aktivizē pārvietošanas notikumu, kas tiek nosūtīts uz moveEnd funkciju. Diemžēl šobrīd kmlLayer vēl nav izveidots, tāpēc radās kļūda.

1. risinājums (ieteicams):

reģistrējiet vadīklas pēc visu slāņu pievienošanas kartei.

2. risinājums:

funkcijā UpdateKmlLayer pievienojiet atzīmi, kas nav nulles atzīme:

funkcija UpdateKmlLayer (slānis) {console.log ("updateKML"); console.log (slānis); if (slānis) {layer.loaded = false; // iestatījums, kas ielādēts uz nepatiesu, izkrauj slāņa slāni.setVisibility (true); // redzamības iestatīšana uz patiesu liek atkārtoti ielādēt slāņa slāni.refresh ({force: true, params: {'zoom': map.getZoom ()}}); // piespiest jaunus KML datus}}

Skatīties video: KML. KMZ to SHP. Shapefile Conversion in QGIS