179 lines
7.0 KiB
JavaScript
179 lines
7.0 KiB
JavaScript
/**
|
||
* 地图图层管理模块
|
||
* 管理不同类型的地图图层(天地图、高德、谷歌等)
|
||
*/
|
||
var MapLayers = (function() {
|
||
'use strict';
|
||
|
||
// 天地图 API 密钥 (fengyarnom@gmail.com)
|
||
var TIANDITU_KEY = '0c260b8a094a4e0bc507808812cefdac';
|
||
|
||
function createTiandituTileLoadFunction() {
|
||
return function(imageTile, src) {
|
||
imageTile.getImage().src = src;
|
||
imageTile.getImage().onerror = function() {
|
||
// 天地图加载失败时切换到高德地图
|
||
var mapTypeSelect = document.getElementById('mapTypeSelectNew');
|
||
if(mapTypeSelect && mapTypeSelect.value.startsWith('tianditu_')) {
|
||
mapTypeSelect.value = 'amap';
|
||
if (window.DeviceOverview && typeof window.DeviceOverview.switchMapType === 'function') {
|
||
window.DeviceOverview.switchMapType('amap');
|
||
}
|
||
if (window.layer && typeof window.layer.msg === 'function') {
|
||
window.layer.msg('天地图加载失败,已自动切换到高德地图');
|
||
}
|
||
if (window.layui && window.layui.form) {
|
||
window.layui.form.render('select');
|
||
}
|
||
}
|
||
};
|
||
};
|
||
}
|
||
|
||
|
||
var mapLayers = {
|
||
// 高德地图
|
||
amap: new ol.layer.Tile({
|
||
source: new ol.source.XYZ({
|
||
url: 'https://webrd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}'
|
||
})
|
||
}),
|
||
|
||
// 高德卫星图
|
||
amap_satellite: new ol.layer.Group({
|
||
layers: [
|
||
new ol.layer.Tile({
|
||
source: new ol.source.XYZ({
|
||
url: 'https://webst0{1-4}.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}'
|
||
})
|
||
}),
|
||
new ol.layer.Tile({
|
||
source: new ol.source.XYZ({
|
||
url: 'https://webst0{1-4}.is.autonavi.com/appmaptile?style=8&x={x}&y={y}&z={z}'
|
||
})
|
||
})
|
||
]
|
||
}),
|
||
|
||
// 谷歌卫星图
|
||
google_satellite: new ol.layer.Tile({
|
||
source: new ol.source.XYZ({
|
||
url: 'https://mt{0-3}.google.com/vt/lyrs=s&x={x}&y={y}&z={z}',
|
||
crossOrigin: 'anonymous'
|
||
})
|
||
}),
|
||
|
||
// 谷歌地形图
|
||
google_terrain: new ol.layer.Tile({
|
||
source: new ol.source.XYZ({
|
||
url: 'https://mt{0-3}.google.com/vt/lyrs=p&x={x}&y={y}&z={z}',
|
||
crossOrigin: 'anonymous'
|
||
})
|
||
}),
|
||
|
||
// 谷歌道路图
|
||
google_roadmap: new ol.layer.Tile({
|
||
source: new ol.source.XYZ({
|
||
url: 'https://mt{0-3}.google.com/vt/lyrs=m&x={x}&y={y}&z={z}',
|
||
crossOrigin: 'anonymous'
|
||
})
|
||
}),
|
||
|
||
// 谷歌混合图
|
||
google_hybrid: new ol.layer.Tile({
|
||
source: new ol.source.XYZ({
|
||
url: 'https://mt{0-3}.google.com/vt/lyrs=y&x={x}&y={y}&z={z}',
|
||
crossOrigin: 'anonymous'
|
||
})
|
||
}),
|
||
|
||
// 天地图卫星影像
|
||
tianditu_satellite: new ol.layer.Group({
|
||
layers: [
|
||
new ol.layer.Tile({
|
||
source: new ol.source.XYZ({
|
||
url: 'https://t{0-7}.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=' + TIANDITU_KEY,
|
||
tileLoadFunction: createTiandituTileLoadFunction()
|
||
})
|
||
}),
|
||
new ol.layer.Tile({
|
||
source: new ol.source.XYZ({
|
||
url: 'https://t{0-7}.tianditu.gov.cn/cia_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cia&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=' + TIANDITU_KEY,
|
||
tileLoadFunction: createTiandituTileLoadFunction()
|
||
})
|
||
})
|
||
]
|
||
}),
|
||
|
||
// 天地图矢量图
|
||
tianditu_normal: new ol.layer.Group({
|
||
layers: [
|
||
new ol.layer.Tile({
|
||
source: new ol.source.XYZ({
|
||
url: 'https://t{0-7}.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=' + TIANDITU_KEY,
|
||
tileLoadFunction: createTiandituTileLoadFunction()
|
||
})
|
||
}),
|
||
new ol.layer.Tile({
|
||
source: new ol.source.XYZ({
|
||
url: 'https://t{0-7}.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=' + TIANDITU_KEY,
|
||
tileLoadFunction: createTiandituTileLoadFunction()
|
||
})
|
||
})
|
||
]
|
||
}),
|
||
|
||
// 天地图地形图
|
||
tianditu_terrain: new ol.layer.Group({
|
||
layers: [
|
||
new ol.layer.Tile({
|
||
source: new ol.source.XYZ({
|
||
url: 'https://t{0-7}.tianditu.gov.cn/ter_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=ter&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=' + TIANDITU_KEY,
|
||
tileLoadFunction: createTiandituTileLoadFunction()
|
||
})
|
||
})
|
||
]
|
||
}),
|
||
|
||
// 天地图地形混合图
|
||
tianditu_terrain_hybrid: new ol.layer.Group({
|
||
layers: [
|
||
new ol.layer.Tile({
|
||
source: new ol.source.XYZ({
|
||
url: 'https://t{0-7}.tianditu.gov.cn/ter_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=ter&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=' + TIANDITU_KEY,
|
||
tileLoadFunction: createTiandituTileLoadFunction()
|
||
})
|
||
}),
|
||
new ol.layer.Tile({
|
||
source: new ol.source.XYZ({
|
||
url: 'https://t{0-7}.tianditu.gov.cn/cta_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cta&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=' + TIANDITU_KEY,
|
||
tileLoadFunction: createTiandituTileLoadFunction()
|
||
})
|
||
})
|
||
]
|
||
})
|
||
};
|
||
|
||
|
||
function getLayer(mapType) {
|
||
return mapLayers[mapType];
|
||
}
|
||
|
||
|
||
|
||
function getAllLayers() {
|
||
return mapLayers;
|
||
}
|
||
|
||
|
||
function hasLayer(mapType) {
|
||
return mapLayers.hasOwnProperty(mapType);
|
||
}
|
||
|
||
|
||
return {
|
||
getLayer: getLayer,
|
||
getAllLayers: getAllLayers,
|
||
hasLayer: hasLayer
|
||
};
|
||
})();
|