Leaflet使用GP服务实现在线插值
前期准备:
- 使用ArcMap发布GP工具
- 使用leaflet官方的js和css
- 点数据准备
正式开始:
发布gp工具的流程不说了直接上GP截图
在发布GP服务的时候需要注意几点
- 为了保证GP的插值是在我们所选的范围内执行,需要设置它的插值范围,右击IDW选择属性->处理范围->选择你要的范围
- 如果需要给插值服务设置颜色,就必须给输出的结果设置图层符号系统,右击属性就能看见,然后选择一个你已经处理过颜色的图层作为参口,这样发布过后的GP服务就能正常有颜色
添加要使用的js和css样式:(使用的是leaflet的在线服务)
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.0.1/dist/leaflet.css" />
<!-- Make sure you put this AFTER Leaflet's CSS -->
<script src="https://unpkg.com/leaflet@1.0.1/dist/leaflet.js"></script>
<!-- Load Esri Leaflet from CDN -->
<script src="https://unpkg.com/esri-leaflet@2.2.1/dist/esri-leaflet.js" ></script>
点数据准备:这个就由你们自己准备(可以发布含有有效参数的点数据也可以使用Ajax方法去获取后台数据)这里就不多说
贴出主要代码:
function WearherBtnClick(obj, SeneorTypeID) { //GetLegend("http://zhhz.s1.natapp.cc/arcgis/rest/services/IDWforJZ/MapServer/jobs/jfe694717fca6463c9bf3f72986ef80ff/legend?f=pjson");
//打开时间轴
AddTimeShaft();
//获取最新的气象数据 默认显示一周数据
var myDate = new Date();
var EndDate = GetStringDate(myDate);
var StartDate = addDate(myDate, -7);
//获取时间类型 TimeModel
var TimeModel = $("#TimeModel").val();
GetWeatherData(SeneorTypeID, TimeModel, StartDate, EndDate);
};
//执行时间轴实现地图加载工作 只能按照小时加载,点击播放的时候按照10秒一次
function GetMapData(Date) {
// alert(Date);
GetWeatherData(1, "HH", Date, Date);
}
//GP 服务地址
var gpUrl = "http://111.230.226.16:6080/arcgis/rest/services/JZ/IDWforJZ/GPServer/IDWforJZ";
//地图服务
var mapServer = "http://111.230.226.16:6080/arcgis/rest/services//JZ/IDWforJZ/MapServer";
//从数据库中获取气象数据
// case 1: 温度比对表;case 2:湿度比对表;case 11:气压比对表;case 12:风速比对表;case 32:降雨量比对表'; case 3: 土温比对表';case 20:土湿比对表';
//HH 小时 DD 日 MM 月分组
function GetWeatherData(SensorTypeID, DateType, StartDate, EndDate) {
$('.alert').html('开始获取气象数据!').addClass('alert-success').show().delay(1500).fadeOut();
$.ajax({
type: 'POST',
url: '/Weather/GetJZWeatherList',
dataType: 'json',
data: {
"SensorTypeID": SensorTypeID,
"DateType": DateType,
"StartTime": StartDate,
"EndTime": EndDate
},
success: function (data) {
if (data.status) {
$('.alert').html('获取数据成功,执行地图插值!').addClass('alert-success').show().delay(3000).fadeOut();
//alert(data.msg + "获取气象数据成功,执行地图插值!");
GetIDW(data.data);
} else {
alert(data.msg);
}
},
error: function (data) {
alert("执行任务出错!");
}
});
}
function GetIDW(data) {
//$('.alert').html("获取数据成功,").addClass('alert-success').show().delay(2000).fadeOut();
//将返回的几何点数据传输给featureSet
var featureSet = data;
//创建GP服务的参数
var params = {
Points: featureSet, //Points是GP的输入参数名称,要和GP服务一直
ZValue: "Num",//插值的字段,名称要和GP一致
};
//添加异步查询方法,submitJob是异步方法 execute是同步的的方法,成果就调用gpJobComplete,中间过程调用gpJobStatus,失败调用gpJobFaile
submitJob(params);
}
//GP服务调用
function submitJob(params) {
$.ajax({
type: "POST",
cache: false,
url: gpUrl + "/submitJob?f=json",
async: true,
data: params,
success: function (result) {
result = eval("(" + result + ")");
var jobId = result.jobId;
if (jobId) {
Getresult(jobId);
}
else {
$.messager.progress('close');
$.messager.alert("提示", "计算失败!");
}
}
});
}
//获取结果
function Getresult(jobId) {
$.ajax({
type: "POST",
cache: false,
url: gpUrl + "/jobs/" + jobId + "?f=json",
async: true,
success: function (result1) {
result1 = eval("(" + result1 + ")");
if (result1.jobStatus === "esriJobSucceeded") {
showResult2(jobId);
}
else {
Getresult(jobId);
}
}
});
}
//展示地图结果
function showResult(jobId) {
$.ajax({
type: "POST",
cache: false,
url: gpUrl + "/jobs/" + jobId + "/results/erase_shp?f=json&returnType=data",
async: true,
success: function (result2) {
result2 = eval("(" + result2 + ")");
//$.messager.progress('close');
alert("计算完成!");
var features = result2.value.features;
if (features.length > 0) {
for (var i = 0, length = result2.length; i != length; ++i) {
var feature = features[i];
if (feature == undefined) {
return;
}
else {
var polySymbolRed = new esri.symbol.SimpleFillSymbol();
polySymbolRed.setOutline(new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0, 0, 0, 0.5]), 1));
polySymbolRed.setColor(new dojo.Color([255, 0, 0, 0.5]));
var g = new esri.Graphic(new esri.geometry.Polygon(feature.geometry), polySymbolRed, feature.attributes)
map.graphics.add(g);
}
}
}
}
});
}
var IDWServiceLayer = new Array();
//展示地图结果2
function showResult2(jobId) {
var mapurl = mapServer + "/jobs/" + jobId;
$('.alert').html('开始渲染地图,请等待!').addClass('alert-success').show().delay(2000).fadeOut();
//var envLayer = L.esri.dynamicMapLayer({
// url: 'mapurl',
// opacity: 0.8,
// layers: [0, 3]
//});
var envLayer = new L.esri.dynamicMapLayer({ url: mapurl, opacity: 0.6, useCors: false });
//加载之前先清除原有
//保证只有一个图层
if (IDWServiceLayer.length > 0) {
map.removeLayer(IDWServiceLayer[0]);
IDWServiceLayer.length = 0;
}
map.addLayer(envLayer);
IDWServiceLayer.push(envLayer)
转载自:https://blog.csdn.net/qq_36213352/article/details/81297545