- 用ArcMap发布GP服务到server上
- 获取GP服务的url和参数信息
url:(arcgis)https://sampleserver6.arcgisonline.com/arcgis/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed
一般都是有GPServer的地址
参数信息:点击Execute Task(同步)或者SubmitJob Task(异步)进入服务中查看Input_Observation_Point
和Viewshed_Distance
信息 - 设置参数FeatureSet和LinearUnit
FeatureSet和LinearUnit分别对应Input_Observation_Point
和Viewshed_Distance
信息
可以直接看官网学习:https://developers.arcgis.com/javascript/latest/sample-code/geoprocessing-viewshed/index.html
获取gp服务
//加载GP地址
var gpUrl="https://sampleserver6.arcgisonline.com/arcgis/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed";
var gp=new Geoprocessor(gpUrl);
gp.outSpatialReference={
wkid:102100//坐标系
};
从地图上获取点参数(看服务需要)
var point = new Point({
longitude: event.mapPoint.longitude,
latitude: event.mapPoint.latitude
});
var inputPoint = new Graphic({
geometry: point
});
var inputPointContainer=[];
inputPointContainer.push(inputPoint)
设置参数
var featureSet=new FeatureSet();
featureSet.features=inputPointContainer;
var distance=new LinearUnit();
distance.distance=5;
distance.units="miles"
var params={
Input_Observation_Point:featureSet,
Viewshed_Distance:distance
}
将参数execute发送到server然后获取数据
gp.execute(params).then(drawResultData);
function drawResultData(result){
...... //对获取的数据进行处理
}
- 完整代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1,user-scalable=no">
<title>GP服务的获取调用</title>
<link
rel="stylesheet"
href="https://js.arcgis.com/4.15/esri/themes/light/main.css"
/>
<script src="https://js.arcgis.com/4.15/"></script>
<style>
body,
html,
#viewDiv{
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<script>
require([
"esri/Map",
"esri/views/MapView",
"esri/layers/GraphicsLayer",
"esri/Graphic",
"esri/geometry/Point",
"esri/tasks/Geoprocessor",
"esri/tasks/support/LinearUnit",
"esri/tasks/support/FeatureSet"
],function(
Map,
MapView,
GraphicsLayer,
Graphic,
Point,
Geoprocessor,
LinearUnit,
FeatureSet
){
var map=new Map({
basemap: "streets"
})
var view=new MapView({
container: "viewDiv",
map: map,
zoom: 10,
center: [119, 28]
})
var graphicsLayer=new GraphicsLayer();
map.add(graphicsLayer);
//获取GP服务
var gpUrl="https://sampleserver6.arcgisonline.com/arcgis/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed";
var gp=new Geoprocessor(gpUrl);
gp.outSpatialReference={
wkid:102100//坐标系
};
var markerSymbol={
type:"simple-marker",
color:[255,0,0],
outline:{
color:[255,255,255],
width:2
}
};
view.on("click",clickMap);
function clickMap(event) {
graphicsLayer.removeAll();
var point = new Point({
longitude: event.mapPoint.longitude,
latitude: event.mapPoint.latitude
});
var inputPoint = new Graphic({
geometry: point,
symbol: markerSymbol
});
graphicsLayer.add(inputPoint);
var inputPointContainer=[];
inputPointContainer.push(inputPoint)
console.log(inputPointContainer);
var featureSet=new FeatureSet();
featureSet.features=inputPointContainer;
var distance=new LinearUnit();
distance.distance=5;
distance.units="miles"
var params={
Input_Observation_Point:featureSet,
Viewshed_Distance:distance
}
//输出gp服务
gp.execute(params).then(drawResultData);
}
var fillSymbol={
type:"simple-fill",
color: [226, 119, 40, 0.75],
outline:{
color:[255,255,255],
width:1
}
}
function drawResultData(result){
console.log(result);
var resultFeature=result.results[0].value.features;
//将多边形绘制到地图上
var featureLayer=resultFeature.map(function(feature){
feature.symbol=fillSymbol;
return feature;
})
graphicsLayer.addMany(featureLayer);
}
})
</script>
</head>
<body>
<div id="viewDiv"></div>
</body>
</html>