看看WebGIS,极简单的智慧校园小demo

最近闲来无事,看看WebGIS

什么是GIS?

GIS是一门综合型学科,结合了地理学与地图学以及遥感和计算机科学

GIS开发方向

桌面端开发/桌面GIS-C/S架构,web开发/webgis-BS架构,移动端开发/移动gis-高德地图,美团外卖等

WebGIS开发

前端可视化技术和GIS相结合

以canvas和webGL为代表的的前端可视化技术提供了很多效果和交互

处理二维GIS的openLayers,MapBox,leaflet

处理三维GIS的cesium

WebGIS和云计算,分布式机构结合,GIS云平台的出现 - 中地数码推出的GIS云平台

为什么选择WebGIS

相对于其他技术和编程语言,难度较低,上手快,成就感大

基础平台

MapGIS,ArcGIS,SuperMap //类似安卓和苹果

可以基于基础平台开发定制应用

有些应用方向也会提供自己的平台,比如地图导航应用,高德开放平台,百度开放平台

面向大众提供地图API接口服务

所有的开放平台都一样,都能解决WebGIS的核心问题

高德比较好配置,轻量

术语

地图组成结构

地图容器

创建指定的id容器,和echarts一样,需要一个容器承载所有图层,点标记,矢量图形,控件

图层layer

一个地图通常由一个或者多个图层组成

高德地图提供了很多标准图层和自定义图层

标准图层

卫星图层

路网图层

路况图层

矢量图形

覆盖在图层上,通过矢量的方式,几何的方式,展示大小变化,但是其代表的实际路径和范围不变

除了折线,圆,多变性之外,JS的API还提供了矩形椭圆等 常用矢量图形

点标记

一个点要素,标记点

地图控件

悬浮在所有图层和地图要素上,满足一定交互和提示功能

放大缩小,调整方向

地图级别ZoomLevel

级别与地图比例尺成正比,每增大一级,比例尺放大一倍,地图显示的越详细,最小级别通常为3级,高德地图目前最大级别为20级

经纬度LngLat

经纬度坐标

东西经180度,(-180-180),西半球为负,东半球为正

南北纬(-85-85),北半球为正,南半球为负

底图BaseLayer

位于所有图层和图形的最下方的图层,通常不透明,可以是单一图层,比如官方标准图层,也可以是图层组合,比如卫星图层和路网图层结合

地图要素Map Features

展示在地图上的地理要素,道路,区域面,建筑,POI标注,路名等,开发者自定义的点标记矢量图形也可以看做是地图要素

标注Label

地图上带有标示信息的文字或图标,POI标注,道路名称标注

地图平面像素坐标Plane Coordinates

投影为平面之后的地图上的平面像素坐标……

投影

将地球球面的经纬度坐标映射到动图平面坐标的变换和映射关系,高德地图使用Web墨卡托投影,采用EPSG:3857坐标系统

注册高德开放平台

进入高德开放平台注册登录认证,在控制台点击应用管理新增一个应用

新增完后点击右上角添加key,选择web

添加成功后会出现key和安全密匙

后续可看开发支持中的开发文档

因为第一次接触,所以使用的是不带框架的用法,后面研究一下搭配vue或者react如何使用,应该要安装然全局配置
首先需要准备一个具备宽高的容器container

GeoJSON

一种保存地理信息数据的格式

数据持久化

在地图上绘制了多个标记点后,刷新页面标记点消失,是因为代表着标记点的变量是临时在内存中开辟出来的,刷新后就会消失

持久化的方式

1:使用GDB数据库,将数据保存在地理数据库中

2:使用GeoJSON,将数据保存在该格式的文件中

智慧校园小demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>智慧校园demo</title>
<title>点标记锚点</title>
<link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css"/>
<link rel="stylesheet" href="./index.css">
<script type="text/javascript">
window._AMapSecurityConfig = {
securityJsCode:'注册高德开发者后得到的安全密匙',
}
</script>
<script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=注册高德开发者后得到的key"></script>
<script src="./index.js"></script>
</head>
<body>
<div id="container"></div>
<div class="info">点击地图标注热门地点</div>
<script>
let map = new AMap.Map('container',{
center: [105.888,29.3915],
zoom:16.5,
viewMode:'3D',
pitch:45
})

//使用空间
AMap.plugin([
'AMap.ToolBar',
'AMap.Scale',
'AMap.HawkEye',
'AMap.MapType',
'AMap.Geolocation',
'AMap.ControlBar',
// 'AMap.GeoJSON'
], function(){
// 在图面添加工具条控件,工具条控件集成了缩放、平移、定位等功能按钮在内的组合控件
map.addControl(new AMap.ToolBar());
// 在图面添加比例尺控件,展示地图在当前层级和纬度下的比例尺
map.addControl(new AMap.Scale());
// 在图面添加鹰眼控件,在地图右下角显示地图的缩略图
// map.addControl(new AMap.HawkEye({isOpen:true}));
// 在图面添加类别切换控件,实现默认图层与卫星图、实施交通图层之间切换的控制
// map.addControl(new AMap.MapType());
// 在图面添加定位控件,用来获取和展示用户主机所在的经纬度位置
// map.addControl(new AMap.Geolocation());
map.addControl(new AMap.ControlBar());
// map.addControl(new AMap.GeoJSON())
});

// 定义一个全局对象保存json 持久化 有点小问题,按照官网来的报错
// let geojson = new AMap.GeoJSON({
// geoJSON:null
// })
// // //导入数据 如果存在数据,n那么才导入数据,不存在数据什么都不做
// if(JSON.stringify(getStorageData) != '[]'){
// geojson.importData(getStorageData())
// }
// map.add(geojson)

// console.log(geojson)
// 标记点 刷新页面会丢失
map.on('click',(e)=>{
// 获取点击地点信息
var marker = new AMap.Marker({
position:e.lnglat, // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
});

//使用覆盖物的点击事件
marker.on('click',(e)=>{
console.log(e)
})

map.add(marker);
// 通过geojson对象来管理覆盖物
// geojson.addOverlay(marker)
// setStorageData(geojson.toGeoJSON())
})
</script>
</body>
</html>

结束也意味着新的开始……