arcgis js 4.x api加载WMTS服务
2020-12-29 本文已影响0人
gis杭州
<!-- tianditu4490.html -->
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
<title>WMTS(天地图) </title>
<style type="text/css">
html,body {
padding: 0;
margin: 0;
width: 100%;
height: 100%;
}
.mapContainer{
width: 100%;
height: 100%;
}
</style>
<!--Styles-->
<link rel="stylesheet" type="text/css" href="https://js.arcgis.com/4.3/esri/css/main.css">
<link rel="stylesheet" type="text/css" href="https://js.arcgis.com/4.3/dijit/themes/soria/soria.css">
<script type="text/javascript" src="https://js.arcgis.com/4.3/"></script>
</head>
<body class="soria">
<div id="map" class="mapContainer">
</div>
<script type="text/javascript">
require(["dojo/dom",
"dojo/on",
"dojo/_base/declare",
"dojo/json",
"dojo/_base/lang",
"dojo/_base/url",
"dojo/string",
"dojo/dom-construct",
"dojo/number",
"esri/Map",
"esri/geometry/Extent",
"esri/layers/support/TileInfo",
"esri/layers/support/LOD",
"esri/geometry/SpatialReference",
"esri/geometry/Point",
"esri/views/MapView",
"esri/views/SceneView",
"esri/layers/WebTileLayer",
"esri/layers/TileLayer",
"esri/layers/MapImageLayer",
"esri/core/urlUtils",
"esri/core/JSONSupport",
"dojo/domReady!"
],
function (dom, on, declare, JSON, lang,url,string, domConstruct, number,
Map,Extent,TileInfo,LOD,SpatialReference,Point,
MapView,SceneView,WebTileLayer,TileLayer,MapImageLayer,urlUtils,JSONSupport) {
// Create ogc.WMTSLayer custom layer
var TiandituWMTSLayer = WebTileLayer.createSubclass([JSONSupport], {
declaredClass: "TiandituWMTSLayer",
normalizeCtorArgs: function (b, c) {
return "string" === typeof b ? lang.mixin({urlTemplate: b}, c || {}) : b
},
getDefaults: function (b) {
var sp = new SpatialReference({
"wkid": 4326
});
var c = new Extent(-180, -90, 180, 90, sp);
return lang.mixin(this.inherited(arguments), {
fullExtent: c,
tileInfo: new TileInfo({
rows: 256,
cols: 256,
dpi: 90.71428571428571,
format: "PNG8",
compressionQuality: 0,
origin: new Point({x: -180, y: 90, spatialReference: sp}),
spatialReference: sp,
lods: [
new LOD({level: 1, resolution: 0.703125, scale: 295497593.05875003}),
new LOD({level: 2, resolution: 0.3515625, scale: 147748796.52937502}),
new LOD({level: 3, resolution: 0.17578125, scale: 73874398.264687508}),
new LOD({level: 4, resolution: 0.087890625, scale: 36937199.132343754}),
new LOD({level: 5, resolution: 0.0439453125, scale: 18468599.566171877}),
new LOD({level: 6, resolution: 0.02197265625, scale: 9234299.7830859385}),
new LOD({level: 7, resolution: 0.010986328125, scale: 4617149.8915429693}),
new LOD({level: 8, resolution: 0.0054931640625, scale: 2308574.9457714846}),
new LOD({level: 9, resolution: 0.00274658203125, scale: 1154287.4728857423}),
new LOD({level: 10, resolution: 0.001373291015625, scale: 577143.73644287116}),
new LOD({level: 11, resolution: 0.0006866455078125, scale: 288571.86822143558}),
new LOD({level: 12, resolution: 0.00034332275390625, scale: 144285.93411071779}),
new LOD({level: 13, resolution: 0.000171661376953125, scale: 72142.967055358895}),
new LOD({level: 14, resolution: 8.58306884765625e-005, scale: 36071.483527679447}),
new LOD({level: 15, resolution: 4.291534423828125e-005, scale: 18035.741763839724}),
new LOD({level: 16, resolution: 2.1457672119140625e-005, scale: 9017.8708819198619}),
new LOD({level: 17, resolution: 1.0728836059570313e-005, scale: 4508.9354409599309}),
new LOD({level: 18, resolution: 5.3644180297851563e-006, scale: 2254.4677204799655}),
new LOD({level: 19, resolution: 2.6822090148925781e-006, scale: 1127.2338602399827}),
new LOD({level: 20, resolution: 1.3411045074462891e-006, scale: 563.61693011999137})
]
})
})
},
properties: {
copyright: "",
legendEnabled: {
json: {
readFrom: ["showLegend"], read: function (b, c) {
return null != c.showLegend ? c.showLegend : !0
}
}
},
levelValues: {
dependsOn: ["tileInfo"], get: function () {
var b = [];
if (!this.tileInfo) return null;
this.tileInfo.lods.forEach(function (c) {
b[c.level] = c.levelValue || c.level
}, this);
return b
}
},
popupEnabled: {
json: {
readFrom: ["disablePopup"], read: function (b, c) {
return null != c.disablePopup ? !c.disablePopup : !0
}
}
},
spatialReference: new SpatialReference({"wkid": 4326}),
subDomains: null,
tileServers: {
value: null,
dependsOn: ["urlTemplate", "subDomains", "urlPath"],
get: function () {
var b = new url(this.urlTemplate),
c = b.scheme ? b.scheme + "://" : "//",
a = c + b.authority + "/",
e = this.subDomains,
d, f = [];
-1 === b.authority.indexOf("{subDomain}") && f.push(a);
e && (0 < e.length && 1 < b.authority.split(".").length) && e.forEach(function (a, e) {
-1 < b.authority.indexOf("{subDomain}") && (d = c + b.authority.replace(/\{subDomain\}/gi, a) + "/");
f.push(d)
}, this);
return f = f.map(function (b) {
"/" !== b.charAt(b.length - 1) && (b +=
"/");
return b
})
}
},
urlPath: {
dependsOn: ["urlTemplate"], get: function () {
if (!this.urlTemplate) return null;
var b = this.urlTemplate,
a = new url(b);
return b.substring(((a.scheme ? a.scheme + "://" : "//") + a.authority + "/").length)
}
},
urlTemplate: null
},
getTileUrl: function (b, a, d) {
b = this.levelValues[b];
var e = this.tileServers[a % this.tileServers.length] + string.substitute(this.urlPath, {
level: b,
col: d,
row: a
}),
e = e.replace(/\{level\}/gi, b).replace(/\{row\}/gi, a).replace(/\{col\}/gi, d);
return urlUtils.addProxy(e)
}
});
var options = {
"id": "tianDiTu_vec",
"label": "天地图矢量地图",
"visible": true,
"opacity": 1,
"style": "default",
"wmtslayer": "vec",
"tileMatrixSet": "c",
"format": "tiles",
"urlTemplate": "http://59.202.54.153:8080/3DMAP/proxy/proxy.jsp?http://59.202.42.175:16080/zjgt9/e5e80b532b924bb4aa7a855d60ea86d1/services/wmts/emap?layer=emap&style=default&tilematrixset=default028mm&Service=WMTS&Request=GetTile&Version=1.0.0&Format=image/jpgpng&TileMatrix={level}&TileCol={col}&TileRow={row}",
"copyright": "TiandituWMTS",
};
var layer1 = new TiandituWMTSLayer(options);
var map = new Map({
layers: [layer1]
});
var view = new MapView({
container: "map",
zoom: 9,
center: [120.2, 30.3],
map: map
});
});
</script>
</body>
</html>