aebadirad / leaflet.autolayers Goto Github PK
View Code? Open in Web Editor NEWA dynamic leaflet layers control that pulls from multiple mapservers and manages basemaps and overlays plus order
License: MIT License
A dynamic leaflet layers control that pulls from multiple mapservers and manages basemaps and overlays plus order
License: MIT License
Hello,
I have a GeoServer server and want to add it in the options "Mapservers", is there any example of such integration?
Hi,
While playing with your examples I came across an issue I thought you might like to know about. Using Chrome (I haven't checked other browsers) both ESRI layers and the NGS move when they are added. The markers stay the same on the screen, but are now in the middle of the Pacific.
you said the 'mapServers' is OPTIONAL,but when i set config
like this:
var config = {
overlays:overlays,
selectedBasemap: 'OpenStreetMap',
selectedOverlays: ["cities"],
baseLayers:baseLayers,
};
there will be a problem in leaflet-autolayers.js:397
ERROR is : Uncaught TypeError: Cannot read property 'length' of undefined
Currently I am just trying to pull back the layers from the service in the snippet below. Nothing is being return when I view the control in the DOM (also below). My leaflet version is 1.6.0. Can someone provide me some guidance on this issue?
`var config = {
selectedOverlays: [],
mapServers: {
"url": "http://services.arcgisonline.com/arcgis/rest/services",
"dictionary": "http://services.arcgisonline.com/arcgis/rest/services?f=pjson",
"tileUrl": "/MapServer/tile/{z}/{y}/{x}",
"name": "ArcGIS Online",
"type": "esri"
},
};
L.control.autolayers(config).addTo(map)`
At leaflet-autolayers.js line 382, i was needed change follow code :
continuousWorld: mapConfig.continuousWorld ? mapConfig.continuousWorld : true,
to:
continuousWorld: mapConfig.continuousWorld != undefined ? mapConfig.continuousWorld : true,
Data input example:
{ "continuousWorld":false, "selectedBasemap":"World_Street_Map", "mapServers":[ { "url":"http://services.arcgisonline.com/arcgis/rest/services", "dictionary":"http://services.arcgisonline.com/arcgis/rest/services?f=pjson", "tileUrl":"/MapServer/tile/{z}/{y}/{x}", "name":"ArcGIS Online", "type":"esri", "baseLayers":[ "World_Street_Map" ] } ]}
First, thank you for fix the mapServer problems !You do a really great job! ๐
The following is my problem :
when I add overlays and baseMap from outside,but not use mapServers.The overlays may be overlaied by the basemap.The follwing is my code;
var googleStreets = L.tileLayer('http://{s}.google.com/vt/lyrs=m&x={x}&y={y}&z={z}', {
maxZoom: 20,
subdomains: ['mt0', 'mt1', 'mt2', 'mt3']
}),
googleHybrid = L.tileLayer('http://{s}.google.com/vt/lyrs=s,h&x={x}&y={y}&z={z}', {
maxZoom: 20,
subdomains: ['mt0', 'mt1', 'mt2', 'mt3']
}),
googleSat = L.tileLayer('http://{s}.google.com/vt/lyrs=s&x={x}&y={y}&z={z}', {
maxZoom: 20,
subdomains: ['mt0', 'mt1', 'mt2', 'mt3']
}),
googleTerrain = L.tileLayer('http://{s}.google.com/vt/lyrs=p&x={x}&y={y}&z={z}', {
maxZoom: 20,
subdomains: ['mt0', 'mt1', 'mt2', 'mt3']
});
var imagerySet = "Aerial"; // AerialWithLabels | Birdseye | BirdseyeWithLabels | Road
var bingKey = "LfO3DMI9S6GnXD7d0WGs~bq2DRVkmIAzSOFdodzZLvw~Arx8dclDxmZA0Y38tHIJlJfnMbGq5GXeYmrGOUIbS2VLFzRKCK0Yv_bAl6oe-DOc";
var bingAerial = new L.BingLayer(bingKey, {
type: "Aerial"
});
var bingAerialWithLabels = new L.BingLayer(bingKey, {
type: "AerialWithLabels"
});
var bingRoad = new L.BingLayer(bingKey, {
type: "Road"
});
var mbAttr = 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, ' +
'<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' +
'Imagery ยฉ <a href="http://mapbox.com">Mapbox</a>';
var mbUrl = 'https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpandmbXliNDBjZWd2M2x6bDk3c2ZtOTkifQ._QA7i5Mpkd_m30IGElHziw';
var mapboxGrayscale = L.tileLayer(mbUrl, {
id: 'mapbox.light',
attribution: mbAttr
});
var mapboxStreets = L.tileLayer(mbUrl, {
id: 'mapbox.streets',
attribution: mbAttr
});
var osm = L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
});
var baseLayers = {
"OpenStreetMap": osm,
"Mapbox Grayscale": mapboxGrayscale,
"Mapbox Streets": mapboxStreets,
"Google Streets": googleStreets,
"Google Hybrid": googleHybrid,
"Google Sate": googleSat,
"Google Terrain": googleTerrain,
"Bing Aerial": bingAerial,
"Bing Hybrid": bingAerialWithLabels,
//"Bing Birdseye":bingBirdseye,
"Bing Road": bingRoad
};
var domains = new L.LayerGroup();
var cities = new L.LayerGroup();
var boundaries = new L.LayerGroup();
L.marker([39.61, -105.02]).bindPopup('This is Littleton, CO.').addTo(cities),
L.marker([39.74, -104.99]).bindPopup('This is Denver, CO.').addTo(cities),
L.marker([39.73, -104.8]).bindPopup('This is Aurora, CO.').addTo(cities),
L.marker([39.77, -105.23]).bindPopup('This is Golden, CO.').addTo(cities),
L.tileLayer.wms('http://mrdata.usgs.gov/services/ds898?', {
layers: 'domains',
transparent: true,
format: 'image/png'
}).addTo(domains),
L.tileLayer.wms('http://mrdata.usgs.gov/services/ds898?', {
layers: 'boundaries',
transparent: true,
format: 'image/png'
}).addTo(boundaries);
var overlays = {
"domains": domains,
"boundaries": boundaries,
"cities": cities,
};
var map = L.map('map', {
zoom: 6,
center: [39, -104]
});
var config = {
overlays:overlays,
selectedBasemap: 'OpenStreetMap',
selectedOverlays: ["domains","boundaries"],
baseLayers:baseLayers,
/*mapServers: [{
"url": "http://services.nationalmap.gov/arcgis/services/GlobalMap/GlobalMapWMS/MapServer/WmsServer?",
"dictionary": "http://services.nationalmap.gov/arcgis/services/GlobalMap/GlobalMapWMS/MapServer/WMSServer?request=GetCapabilities&service=WMS",
"name": "wms",
"type": "wms",
"baseLayers": []
}]*/
};
var control = L.control.autolayers(config).addTo(map);
when I set the selectedOverlays: ["domains","boundaries"] , the two layers will be loaded , and then change the basemap. it works well. But when close this two layers, and then open them, they will be overlaied by the basemap. You can see nothing but the basemap.
but when use the mapServers load some layers , it works well.
Wish you can fix this problems! Thanks
Please implement i18n internationalization support for better customization of the system, if need be, I can lend a hand with Pull Requests.
line 502 has
_parseESRILayer: function(mapServer, layer, folder = false) {
which uses default parameters. While this is compatible with most browsers, it is quite a new addition to EMCA6.
Is it perhaps worth avoiding such features until the spec has been around for a while longer?
Or, even better, can anyone suggest a block of code which tests if this feature is available, and provide a fallback if it doesn't work?
Split between pre 1.x and post 1.x branches, update plugin for use on leaflet recent.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.