需求:
加载arcgis没有公开或者私有的地图服务,同时还想实现加载时不弹出登录窗口
提示:
下述是针对独立的arcgis server,没有portal的应用场景;
如果有portal可以参考链接:https://mp.weixin.qq.com/s/WB09URxnPkaW9RvjHqAoSg
补充:
如果按照下述代码还弹窗,请确保通信协议保持统一,例如都使用https后者http
代码:
<html>
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="initial-scale=1, maximum-scale=1, user-scalable=no"
/>
<title>hello</title>
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<link
rel="stylesheet"
href="https://js.arcgis.com/4.27/esri/themes/light/main.css"
/>
<script src="https://js.arcgis.com/4.27/"></script>
<script>
require([
"esri/config",
"esri/WebMap",
"esri/views/MapView",
"esri/layers/FeatureLayer",
"esri/identity/IdentityManager",
"esri/identity/ServerInfo",
], function (
esriConfig,
Map,
MapView,
FeatureLayer,
IdentityManager,
ServerInfo
) {
let serverInfo = new ServerInfo({
hasServer: true,
server: "https://192.168.17.138:6443/arcgis/rest/services",
tokenServiceUrl:
"https://192.168.17.138:6443/arcgis/tokens/generateToken",
});
let userInfo = {
username: "siteadmin",
password: "arcgis123",
};
IdentityManager.generateToken(serverInfo, userInfo).then(
(res) => {
console.log(res);
IdentityManager.registerToken({
server: "https://192.168.17.138:6443/arcgis/rest/services",
token: res.token,
});
let layer = new FeatureLayer({
url: "https://192.168.17.138:6443/arcgis/rest/services/china/MapServer/0",
});
const map = new Map({
layers: [layer],
});
const view = new MapView({
map: map,
container: "viewDiv",
});
view.when(function () {
view.extent = layer.fullExtent;
});
},
(error) => {
console.error(error);
}
);
});
</script>
</head>
<body>
<div id="viewDiv"></div>
</body>
</html>
参考资料:
arcgis中基于token访问私有服务