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();
|
}
|
}
|
}
|
}
|
}
|
},
|
addLayer: function (layerObject, scale) {
|
var layerType = layerObject.layerType;
|
if (layerType == "") {
|
layerType == "dynamic";
|
}
|
if (layerType == "dynamic") {
|
return this.addDynamicLayer(layerObject, scale);
|
} else if (layerType == "wfs") {
|
var layerUrl = layerObject.layerUrl;
|
if (layerUrl.indexOf("WFSServer") > 0) {
|
} else {
|
return this.addDynamicLayer(layerObject);
|
}
|
} else if (layerType == "feature") {
|
return this.addFeatureLayer(layerObject);
|
} else if (layerType == "tiled") {
|
return this.addTiledLayer(layerObject);
|
} else if (layerType == "imageserver") {
|
return this.addWMTSLayer(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);
|
}
|
return 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 = [];
|
return 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,
|
});
|
return map.addLayer(featureLayer);
|
},
|
addWfsLayer: function (layerObject) {
|
var pWFSLayer = new WFSLayer({
|
url: layerObject.layerUrl,
|
label: layerObject.layerId,
|
id: layerObject.layerId,
|
});
|
return map.addLayer(pWFSLayer, 0);
|
},
|
addTiledLayer: function (layerObject) {
|
var tiledMapServiceLayer = new ArcGISTiledMapServiceLayer(layerObject.layerUrl, {
|
id: layerObject.layerId,
|
visible: true,
|
});
|
return map.addLayer(tiledMapServiceLayer);
|
},
|
addWMTSLayer: function (layerObject) {
|
var url = layerObject.url;
|
var wmtslayer = new esri.layers.WMTSLayer(url, { id: layerObject.layerId });
|
return map.addLayer(wmtslayer);
|
//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 && 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;
|
}
|
});
|
},
|
removeMark:function (){
|
if (glitterGraphic != undefined) {
|
map.graphics.remove(glitterGraphic);
|
glitterGraphic = undefined;
|
}
|
if (tempGraphic != undefined) {
|
map.graphics.remove(tempGraphic);
|
tempGraphic = undefined;
|
}
|
|
},
|
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,255]";
|
}
|
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":
|
case "multilinestring":
|
case "linestring":
|
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":
|
case "multipolygon":
|
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;
|
});
|