define(["dojo/_base/declare", "dojo/_base/array", "esri/layers/ArcGISDynamicMapServiceLayer", "esri/layers/ArcGISTiledMapServiceLayer", "esri/layers/FeatureLayer", "esri/layers/WFSLayer", "esri/tasks/query", "esri/tasks/QueryTask", "esri/symbols/SimpleLineSymbol", "esri/symbols/SimpleFillSymbol", "esri/symbols/SimpleMarkerSymbol", "esri/geometry/Point", "esri/geometry/Polyline", "esri/geometry/Polygon", "esri/tasks/IdentifyTask", "esri/tasks/IdentifyParameters", "esri/Color", "esri/graphic", "esri/SpatialReference", "esri/geometry/Extent", "scripts/widget/legend"], function (declare, array, ArcGISDynamicMapServiceLayer, ArcGISTiledMapServiceLayer, FeatureLayer, WFSLayer, Query, QueryTask, SimpleLineSymbol, SimpleFillSymbol, SimpleMarkerSymbol, Point, Polyline, Polygon, IdentifyTask, IdentifyParameters, Color, Graphic, SpatialReference, Extent, Legend) {
|
var clazz;
|
clazz = declare("MyLayer", null, {
|
constructor: function () {},
|
checked: function (layerObject, checked, scale) {
|
if (layerObject == null) {
|
alert("获取图层对象为空值!");
|
return
|
}
|
if (checked) {
|
var layer = map.getLayer(layerObject.layerId);
|
if (layer) {
|
layer.setVisibility(true)
|
} else {
|
this.addLayer(layerObject, scale)
|
}
|
} else {
|
var layer = map.getLayer(layerObject.layerId);
|
var removeTempLayer = map.getLayer(10086);
|
if (removeTempLayer) {
|
map.removeLayer(removeTempLayer)
|
}
|
if (glitterGraphic != undefined) {
|
if (glitterGraphic.attributes == layerObject.layerUrl) {
|
map.graphics.remove(glitterGraphic)
|
}
|
}
|
if (layer) {
|
map.removeLayer(layer);
|
if (map.graphics.graphics[0] != undefined) {
|
if (map.graphics.graphics[0].attributes != undefined) {
|
if (map.graphics.graphics[0].attributes.layerId == layer.visibleLayers[0]) {
|
map.graphics.clear()
|
}
|
}
|
}
|
}
|
}
|
var legend = new Legend();
|
legend.show()
|
},
|
addLayer: function (layerObject, scale) {
|
var layerType = layerObject.layerType;
|
if (layerType == "") {
|
layerType == "dynamic"
|
}
|
if (layerType == "dynamic") {
|
this.addDynamicLayer(layerObject, scale)
|
} else if (layerType == "wfs") {
|
var layerUrl = layerObject.layerUrl;
|
if (layerUrl.indexOf("WFSServer") > 0) {} else {
|
this.addDynamicLayer(layerObject)
|
}
|
} else if (layerType == "feature") {
|
this.addFeatureLayer(layerObject)
|
} else if (layerType == "tiled") {
|
this.addTiledLayer(layerObject)
|
}
|
var newhlcolor = layerObject.layerHLColor;
|
if (newhlcolor != null && newhlcolor != "" && newhlcolor != undefined) {
|
layerDefaultHighLightColor = newhlcolor
|
}
|
},
|
addDynamicLayer: function (layerObject, scale) {
|
var layerNumber = layerObject.layerUrl.split("MapServer")[1];
|
if (layerNumber != "") {
|
var layerId = layerObject.layerId;
|
var layerUrl = layerObject.layerUrl;
|
var layerType = layerObject.layerType;
|
var lastIndex = layerUrl.lastIndexOf('/');
|
var sub_layerUrl = layerUrl.substring(0, lastIndex);
|
var layerIndex = Number(layerUrl.substring(lastIndex + 1));
|
var visibleLayers = new Array();
|
visibleLayers.push(layerIndex);
|
var dynamicLayer = new ArcGISDynamicMapServiceLayer(sub_layerUrl, {
|
id: layerId,
|
visible: true
|
});
|
dynamicLayer.setVisibleLayers(visibleLayers);
|
if (scale != undefined) {
|
dynamicLayer.setMinScale(scale)
|
}
|
var layerDefinitions = [];
|
if (layerObject.layerWhere != undefined) {
|
layerDefinitions[dynamicLayer.visibleLayers[0]] = layerObject.layerWhere;
|
dynamicLayer.setLayerDefinitions(layerDefinitions)
|
}
|
map.addLayers([dynamicLayer])
|
} else {
|
var layerId = layerObject.layerId;
|
var layerUrl = layerObject.layerUrl;
|
var layerType = layerObject.layerType;
|
var visibleLayers = new Array();
|
var dynamicLayer = new ArcGISDynamicMapServiceLayer(layerUrl, {
|
id: layerId,
|
visible: true
|
});
|
var layerDefinitions = [];
|
map.addLayer(dynamicLayer)
|
}
|
},
|
addFeatureLayer: function (layerObject) {
|
var layerId = layerObject.layerId;
|
var layerUrl = layerObject.layerUrl;
|
var layerType = layerObject.layerType;
|
var featureLayer = new FeatureLayer(layerUrl, {
|
id: layerId,
|
visible: true
|
});
|
map.addLayer(featureLayer)
|
},
|
addWfsLayer: function (layerObject) {
|
var pWFSLayer = new WFSLayer({
|
url: layerObject.layerUrl,
|
label: layerObject.layerId,
|
id: layerObject.layerId
|
});
|
map.addLayer(pWFSLayer, 0)
|
},
|
addTiledLayer: function (layerObject) {
|
var tiledMapServiceLayer = new ArcGISTiledMapServiceLayer(layerObject.layerUrl, {
|
id: layerObject.layerId,
|
visible: true
|
});
|
map.addLayer(tiledMapServiceLayer)
|
},
|
clearGraphics: function () {
|
map.graphics.clear();
|
var graphicLayerIds = map.graphicsLayerIds;
|
var len = graphicLayerIds.length;
|
for (var i = 0; i < len; i++) {
|
var gLayer = map.getLayer(graphicLayerIds[i]);
|
gLayer.clear()
|
}
|
},
|
clearAllLayer: function () {
|
var layers = map.getLayersVisibleAtScale();
|
array.forEach(layers, function (layer) {
|
if ((layer.id).indexOf("basemap") > -1) {} else {
|
var templ = map.getLayer(layer.id);
|
map.removeLayer(templ)
|
}
|
})
|
},
|
mapClick: function (evt) {
|
map.graphics.clear();
|
var point = evt.mapPoint;
|
showLonLatInfo(point.x, point.y);
|
var findFirstLayer = false;
|
var layerIds = map.layerIds;
|
if (map.graphicsLayerIds[0] == "10086") {
|
var haveTempLayer = true;
|
for (var i = 0; i < layerIds.length; i++) {
|
if (layerIds[i] == "10086") {
|
haveTempLayer = false;
|
break
|
}
|
}
|
if (haveTempLayer) {
|
layerIds.push("10086")
|
}
|
}
|
if (layerIds.length > 0) {
|
this.useInIdent(evt, layerIds, 0)
|
}
|
},
|
useInIdent: function (evt, layerIds, index) {
|
var IsRecursion = true;
|
var layerId = layerIds[index];
|
if (layerId && layerId.indexOf("basemap_") > -1 || layerId.indexOf("J_baseMap") > -1 || map.getLayer(layerId)._basemapGalleryLayerType == "basemap") {
|
if (layerIds.length > 1) {
|
this.useInIdent(evt, layerIds, index + 1);
|
return
|
} else {
|
return
|
}
|
}
|
var layerObj = map.getLayer(layerId);
|
var layerUrl = layerObj.url;
|
if (layerId != "10086") {
|
var visibleLayers = layerObj.visibleLayers;
|
if (visibleLayers.length > 0) {
|
layerUrl = layerUrl + "/" + visibleLayers[0]
|
}
|
}
|
var layerName = "";
|
if (layerUrl != "") {
|
var arrName = layerUrl.split("services/")[1].split("/MapServer")[0].split("/");
|
layerName = arrName[arrName.length - 1]
|
}
|
var identifyTask, identifyParams;
|
if (layerUrl.split("MapServer/")[0] != undefined) {
|
if (layerUrl.split("MapServer/")[0].indexOf("MapServer") > -1) {
|
return
|
}
|
}
|
var parentLayerUrl = layerUrl.split("MapServer/")[0] + "MapServer";
|
identifyTask = new IdentifyTask(parentLayerUrl);
|
identifyParams = new IdentifyParameters();
|
identifyParams.tolerance = 6;
|
identifyParams.returnGeometry = true;
|
identifyParams.layerIds = [layerUrl.split("MapServer/")[1]];
|
identifyParams.layerOption = IdentifyParameters.LAYER_OPTION_ALL;
|
identifyParams.width = map.width;
|
identifyParams.height = map.height;
|
identifyParams.geometry = evt.mapPoint;
|
identifyParams.mapExtent = map.extent;
|
try {
|
identifyTask.execute(identifyParams, function (results) {
|
for (var i = 0; i < results.length; i++) {
|
var feature = results[i].feature;
|
var geometry = feature.geometry;
|
var graphic;
|
if (geometry.type == "polygon") {
|
var outline = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255, 0, 0, 0.6]), 4);
|
var PolygonSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, outline, new Color(eval(layerDefaultHighLightColor)));
|
var attr = {
|
"layerId": results[0].layerId
|
};
|
graphic = new Graphic(geometry, PolygonSymbol, attr)
|
}
|
if (geometry.type == "polyline") {
|
var lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255, 0, 0, 0.8]), 4);
|
var attr = {
|
"layerId": results[0].layerId
|
};
|
graphic = new Graphic(geometry, lineSymbol, attr)
|
}
|
if (geometry.type == "point") {
|
var pointSymbol = new SimpleMarkerSymbol({
|
"color": eval(layerDefaultHighLightColor),
|
"size": 12,
|
"outline": {
|
"color": [255, 0, 0, 200],
|
"width": 4,
|
"type": "esriSLS",
|
"style": "esriSLSSolid"
|
}
|
});
|
var attr = {
|
"layerId": results[0].layerId
|
};
|
graphic = new Graphic(geometry, pointSymbol, attr)
|
}
|
map.graphics.add(graphic);
|
if (i == 0) {
|
var sId = "";
|
if (feature.attributes.OBJECTID) {
|
sId = feature.attributes.OBJECTID
|
}
|
if (sId == "") {
|
if (feature.attributes.FID) {
|
sId = feature.attributes.FID
|
}
|
}
|
showLayerInfo(sId, layerId);
|
IsRecursion = false
|
}
|
}
|
if (layerIds.length > index + 1 && IsRecursion) {
|
myLayer.useInIdent(evt, layerIds, index + 1)
|
}
|
})
|
} catch (err) {}
|
},
|
pointTo: function (objectId, layerUrl, hlcolor) {
|
var query = new Query();
|
var defaultHLColor = "[71, 169, 5, 0]";
|
if (hlcolor != null && hlcolor != "" && hlcolor != undefined) {
|
defaultHLColor = hlcolor
|
}
|
query.where = "OBJECTID = " + objectId;
|
query.returnGeometry = true;
|
if (glitterGraphic != undefined) {
|
map.graphics.remove(glitterGraphic)
|
glitterGraphic = undefined;
|
}
|
if (tempGraphic != undefined) {
|
map.graphics.remove(tempGraphic)
|
tempGraphic = undefined;
|
}
|
|
var queryTask = new QueryTask(layerUrl);
|
queryTask.execute(query, function (queryResult) {
|
if (queryResult.features.length > 0) {
|
for (var i = 0; i < queryResult.features.length; i++) {
|
var feature = queryResult.features[i];
|
var geometry = feature.geometry;
|
// var graphic;
|
if (geometry.type == "polygon") {
|
var outline = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255, 0, 0, 0.6]), 4);
|
var PolygonSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, outline, new Color(eval(defaultHLColor)));
|
tempGraphic = new Graphic(geometry, PolygonSymbol)
|
}
|
if (geometry.type == "point") {
|
var pointSymbol = new SimpleMarkerSymbol({
|
"color": eval(defaultHLColor),
|
"size": 12,
|
"outline": {
|
"color": [255, 0, 0, 240],
|
"width": 4,
|
"type": "esriSLS",
|
"style": "esriSLSSolid"
|
}
|
});
|
tempGraphic = new Graphic(geometry, pointSymbol)
|
}
|
if (geometry.type == "polyline") {
|
var tempsymbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color(eval(defaultHLColor)), 4);
|
tempGraphic = new Graphic(geometry, tempsymbol)
|
}
|
map.graphics.add(tempGraphic);
|
map.setExtent(tempGraphic._extent.expand(1.5), true);
|
|
glitterGraphic = new Graphic(tempGraphic.geometry, tempGraphic.symbol);
|
glitterGraphic.attributes = layerUrl
|
}
|
var ssbtn = true;
|
}
|
})
|
},
|
pointToByCoord: function (h, type, geo, lon, lat, hlcolor) {
|
var isInPolygon = false;
|
if (lon != null && lon != "" && lat != null && lat != "") {
|
isInPolygon = this.IsPointInPolygon(lon, lat)
|
}
|
var sLevel = -1;
|
if (!isInPolygon) {
|
sLevel = 11
|
} else {
|
var lastLevel = 18;
|
if (h < 1) {
|
h = 1
|
}
|
var level = Math.floor(Math.log(h) / Math.log(2.0) - 5);
|
if (level < 1) {
|
level = 1
|
}
|
if (level > lastLevel) {
|
level = lastLevel
|
}
|
if (level != lastLevel) {
|
sLevel = lastLevel - level
|
}
|
}
|
map.setLevel(sLevel);
|
console.log(sLevel + ":" + isInPolygon);
|
//var glitterTemp;
|
if (glitterGraphic != undefined) {
|
map.graphics.remove(glitterGraphic)
|
glitterGraphic = undefined;
|
}
|
if (tempGraphic != undefined) {
|
map.graphics.remove(tempGraphic)
|
tempGraphic = undefined;
|
}
|
|
if (hlcolor == null || hlcolor == undefined || hlcolor == "") {
|
hlcolor = "[0,255,0,0]"
|
}
|
if (lon != null && lon != "" && lat != null && lat != "") {
|
var point = new Point(lon, lat);
|
var pointSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 14, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255, 0, 0]), 3), new Color(eval(hlcolor)));
|
tempGraphic = new Graphic(point, pointSymbol);
|
map.graphics.add(tempGraphic);
|
map.setExtent(tempGraphic._extent.expand(1.5), true);
|
glitterGraphic = new Graphic(tempGraphic.geometry, tempGraphic.symbol);
|
map.graphics.add(glitterGraphic);
|
}
|
if (geo != null && geo != "") {
|
switch (type) {
|
case "point":
|
var point = new Point({
|
"x": geo[0],
|
"y": geo[1],
|
"spatialReference": map.spatialReference
|
});
|
var tempsymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 14, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255, 0, 0]), 3), new Color(eval(hlcolor)));
|
tempGraphic = new Graphic(point, tempsymbol);
|
map.graphics.add(tempGraphic);
|
map.setExtent(tempGraphic._extent.expand(1.5), true);
|
glitterGraphic = new Graphic(tempGraphic.geometry, tempGraphic.symbol);
|
map.graphics.add(glitterGraphic);
|
break;
|
case "polyline":
|
var polyline = new Polyline({
|
"paths": [geo],
|
"spatialReference": map.spatialReference
|
});
|
var tempsymbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_DASH, new Color(eval(hlcolor)), 4);
|
tempGraphic = new Graphic(polyline, tempsymbol);
|
map.graphics.add(tempGraphic);
|
map.setExtent(tempGraphic._extent.expand(1.5), true);
|
glitterGraphic = new Graphic(tempGraphic.geometry, tempGraphic.symbol);
|
map.graphics.add(glitterGraphic);
|
break;
|
case "polygon":
|
var polygon = new Polygon({
|
"rings": [geo],
|
"spatialReference": map.spatialReference
|
});
|
var tempsymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, new SimpleLineSymbol(SimpleLineSymbol.STYLE_DASHDOT, new Color([255, 0, 0]), 3), new Color(eval(hlcolor)));
|
tempGraphic = new Graphic(polygon, tempsymbol);
|
map.graphics.add(tempGraphic);
|
map.setExtent(tempGraphic._extent.expand(1.5), true);
|
|
glitterGraphic = new Graphic(tempGraphic.geometry, tempGraphic.symbol);
|
map.graphics.add(glitterGraphic);
|
break
|
}
|
}
|
var ssbtn = true;
|
|
},
|
pointToByLongLat: function (long, lat, h, url, objectid, hlcolor) {
|
var lastLevel = 18;
|
if (h < 1) {
|
h = 1
|
}
|
var level = Math.floor(Math.log(h) / Math.log(2.0) - 5);
|
if (level < 1) {
|
level = 1
|
}
|
if (level > lastLevel) {
|
level = lastLevel
|
}
|
if (level != lastLevel) {
|
map.setLevel(lastLevel - level)
|
}
|
this.pointTo(objectid, url, hlcolor)
|
},
|
IsPointInPolygon: function (lon, lat) {
|
var IsIn = false;
|
var polygon = new Polygon({
|
rings: coastRange,
|
});
|
var point = new Point({
|
"x": lon,
|
"y": lat,
|
});
|
if (polygon.contains(point)) {
|
IsIn = true
|
}
|
return IsIn
|
},
|
pointToVisibleLayer: function (url) {
|
$.ajax({
|
type: "get",
|
url: url + "?f=pjson",
|
dataType: "json",
|
success: function (response) {
|
var e = response.extent;
|
var extent = new Extent(e.xmin, e.ymin, e.xmax, e.ymax, new SpatialReference({
|
wkid: 4326
|
}));
|
map.setExtent(extent.expand(1.5), true)
|
}
|
})
|
}
|
});
|
clazz.getInstance = function () {
|
if (instance === null) {
|
instance = new clazz()
|
}
|
return instance
|
};
|
return clazz
|
});
|