define([
|
"dojo/_base/declare", "dojo/_base/array", "dojo/_base/lang",
|
"dojo/request", "dojo/topic",
|
"esri/layers/ArcGISTiledMapServiceLayer", "esri/geometry/Extent",
|
"esrichina/TianDiTuLayer", "esrichina/GoogleMapLayer", "esri/layers/ArcGISDynamicMapServiceLayer"
|
],
|
function (declare, arrayUtil, lang,
|
request, topic,
|
ArcGISTiledMapServiceLayer, Extent,
|
TianDiTuLayer, GoogleMapLayer, ArcGISDynamicMapServiceLayer) {
|
return {
|
/**
|
*图层类型
|
*/
|
AGS_TILE: "arcgis tiled",
|
AGS_DYNAMIC: "arcgis dynamic",
|
WMTS: "wmts",
|
TIANDITU: "tianditu",
|
GOOGLE: "google",
|
|
EVENT_LOADCONFIGANDPARSE_SUCCESS: "event_layerUtil_loadconfigAndParse_success",
|
EVENT_LOADCONFIGANDPARSE_ERROR: "event_layerUtil_loadconfigAndParse_error",
|
|
loadconfigAndParse: function (url) {
|
request.get(url, {
|
handleAs: "json"
|
}).then(lang.hitch(this, function (result) {
|
var _parseResult = this.parse(result);
|
topic.publish(this.EVENT_LOADCONFIGANDPARSE_SUCCESS, _parseResult);
|
}), lang.hitch(this, function (err) {
|
topic.publish(this.EVENT_LOADCONFIGANDPARSE_ERROR, err);
|
}));
|
},
|
|
parse: function (config) {
|
_parseResult = {};
|
_parseResult.extent = _getStartExtent(config.initExtent, config.wkid);
|
_parseResult.maplogo = config.maplogo;
|
_parseResult.gallerys = config.gallerys;
|
_parseResult.multidate = config.multidate;
|
_parseResult.swipe = config.swipe;
|
_parseResult.tkey = config.tkey;//天地图服务开发者key
|
_groupsParseResult = this.parseGroups(config.grouplayers);
|
declare.safeMixin(_parseResult, _groupsParseResult);
|
return _parseResult;
|
|
function _getStartExtent(initExtent, wkid) {
|
return new esri.geometry.Extent({
|
"xmin": initExtent[0],
|
"ymin": initExtent[1],
|
"xmax": initExtent[2],
|
"ymax": initExtent[3],
|
"spatialReference": {
|
"wkid": wkid
|
}
|
});
|
}
|
},
|
parseGroups: function (groupsConfig) {
|
var groups = {};
|
var groupsInOrder = [];
|
var curGroupId = null;
|
var curSetId = null;
|
|
for (var key in groupsConfig) {
|
var group = _parseGroup.call(this, groupsConfig[key]);
|
groups[group.id] = group;
|
groupsInOrder.push(group.id);
|
}
|
return {
|
groups: groups,
|
curGroupId: curGroupId,
|
curSetId: curSetId,
|
groupsInOrder: groupsInOrder
|
};
|
|
function _parseGroup(groupConfig) {
|
var group = new Object();
|
group.id = groupConfig.id;
|
group.galleryId = groupConfig.gallery;
|
group.icon = groupConfig.icon;
|
group.label = groupConfig.label;
|
if (groupConfig.visible)
|
curGroupId = group.id;
|
//group.baselayers = _parseLayers.call(this, groupConfig.baselayers);
|
group.baselayers = null;
|
group.baselayersConfig = groupConfig.baselayers;
|
_parseLayerSet.call(this, groupConfig.layerset);
|
return group;
|
|
function _parseLayerSet(layersetConfig) {
|
layerset = {};
|
layersetInOrder = [];
|
for (var key in layersetConfig) {
|
layersetItemConfig = layersetConfig[key];
|
var layersetItem = new Object();
|
layersetItem.id = layersetItemConfig.id;
|
layersetItem.type = layersetItemConfig.type;
|
layersetItem.label = layersetItemConfig.label;
|
layersetItem.layers = null;
|
layersetItem.layersConfig = layersetItemConfig.layers;
|
//layersetItem.layers = _parseLayers.call(this, layersetItemConfig.layers);
|
if (layersetItemConfig.visible) {
|
curSetId = layersetItem.id;
|
}
|
if (layersetItemConfig["default"]) {
|
group.defaultset = layersetItem.id;
|
}
|
layerset[layersetItem.id] = layersetItem;
|
layersetInOrder.push(layersetItem.id);
|
}
|
group.layerset = layerset;
|
group.layersetInOrder = layersetInOrder;
|
if (!group.defaultset && layersetInOrder.length != 0) {
|
group.defaultset = layersetInOrder[0];
|
}
|
}
|
}
|
},
|
/**
|
* 解析图层,创建图层对象
|
* @param {Object} layersConfig
|
*/
|
parseLayers: function (layersConfig) {
|
_layers = [];
|
for (var key in layersConfig) {
|
var layer = this._parseLayer.call(this, layersConfig[key]);
|
//layer.copyForOverview = this._parseLayer.call(this, layersConfig[key]);
|
_layers.push(layer);
|
//layers.push(layer);
|
}
|
return _layers;
|
},
|
|
_parseLayer: function (layerConfig) {
|
layerConfig.type = layerConfig.type.toLowerCase();
|
var layer = null;
|
switch (layerConfig.type) {
|
case this.AGS_TILE:
|
layer = new ArcGISTiledMapServiceLayer(
|
layerConfig.url, {
|
displayLevels: layerConfig.displaylevels
|
});
|
break;
|
case this.AGS_DYNAMIC:
|
layer = new ArcGISDynamicMapServiceLayer(layerConfig.url);
|
if (layerConfig.layer == 'border')
|
layer.setVisibleLayers([0, 1,2]);
|
break;
|
case this.TIANDITU:
|
var option = {
|
displayLevels: layerConfig.displaylevels,
|
tkey:_parseResult.tkey
|
}
|
if (layerConfig.TILEMATRIXSET)
|
option._tilematrixSet = layerConfig.TILEMATRIXSET;
|
if (layerConfig.FORMAT)
|
option.format = layerConfig.FORMAT;
|
layer = new TianDiTuLayer(
|
"geo",
|
layerConfig.url,
|
layerConfig.layer,
|
option
|
);
|
layer.id = layerConfig.layer;
|
if (layer.id=='cia'||layer.id=='cva'){//默认不显示标记图层
|
layer.opacity = 1;
|
}
|
break;
|
case this.GOOGLE:
|
layer = new GoogleMapLayer(layerConfig);
|
break;
|
}
|
//layerIndex[layer.id] = layers.length - 1;
|
return layer;
|
}
|
};
|
});
|