一、什么是叠加分析
1-1、基本概念
叠加分析是地理信息系统最常用的提取空间隐含信息的手段之一。该方法源于传统的透明材料叠加,即将来自不同的数据源的图纸绘于透明纸上,在透光桌上将其叠放在一起,然后用笔勾出感兴趣的部分或提取感兴趣的信息。
1-2、计算公式
1-3、应用场景
比如,现在城市规划需要建一个新的大型商场,将规划的新图层于旧城区居民的图层叠加分析,就可以得出那些小区要拆迁。
如规划一条铁路,将规划的图层和农田图层叠加分析,决定需要征用田地的补偿预算款型。
二、步骤
- 输入数据
- 叠加数据
- 显示结果
三、示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./dist/include-openlayers-local.js"></script>
<script src="./libs/gaode.js"></script>
</head>
<body>
<button onclick="overAnalysis()">叠加分析</button>
<div id="map_container">
</div>
<script>
/* 模拟居民区 */
const vectorData = 'gdbp://MapGISLocalPlus/gis0517/sfcls/Area'
const vecLayer = new Zondy.Map.GdbpLayer(
'',
[vectorData], {
ip: 'localhost',
port: '6163'
}
)
var map = new ol.Map({
target: "map_container",
layers: [gaode,vecLayer],
view: new ol.View({
projection: 'EPSG:4326',
center: [114.30, 30.50],
zoom: 4
})
})
/* 叠加分析 */
let resultname;
function overAnalysis() {
//2.1设置要叠加的多边形
//模拟商圈
const geoRegion = new Zondy.Object.GRegion(
[
new Zondy.Object.AnyLine([
new Zondy.Object.Arc(
[
new Zondy.Object.Point2D(100, 33),
new Zondy.Object.Point2D(100, 22),
new Zondy.Object.Point2D(115, 22),
new Zondy.Object.Point2D(115, 33),
new Zondy.Object.Point2D(190, 33)
],
0
)
])
],
0
)
resultname = 'gdbp://MapGISLocalPlus/gis0517/sfcls/Area'+Date.now();
//2.2 创建叠加分析服务
var overlayParam = new Zondy.Service.OverlayByPolygon({
ip: 'localhost',
port: '6163', //访问IGServer的端口号,.net版为6163,Java版为8089,
//设置被叠加图层URL
srcInfo1: vectorData,
//设置结果URL
desInfo: resultname,
//设置多边形坐标序列化对象
strGRegionXML: JSON.stringify(geoRegion),
//多边形字符串输入格式
inFormat: 'json',
//设置结果图层的图形参数信息
infoOptType:2,
//求交
overType: 1,
//允许重算面积
isReCalculate: true,
//容差半径
radius: 0.05,
})
//2.3 执行叠加分析
//调用基类的execute方法,执行叠加分析,onSuccess为结果回调函数
overlayParam.execute(
onSuccess,
'post',
false,
'json',
onError
)
}
//2-4、分析结果显示到地图容器上
function onSuccess(result){
console.log(result)
if(result.succeed){
map.removeLayer(vecLayer)
console.log(resultname)
const resultLayer = new Zondy.Map.GdbpLayer('',[resultname],{
ip:'localhost',
port:'6163'
})
map.addLayer(resultLayer)
}
}
function onError(err){
console.log(err)
}
</script>
</body>
</html>