赞
踩
导航兔:
Web地图开发 【高德地图API】 | 导航地址 |
---|---|
Web地图开发【高德地图API】(一) | https://qianmoer.blog.csdn.net/article/details/128425601 |
Web地图开发【高德地图API】(二) | https://qianmoer.blog.csdn.net/article/details/128425657 |
注册开发者账号,注册过程中需要手机验证码,完善信息即可。
注册完成后,进入 [应用管理] -> [创建新应用],填写应用名称和应用类型
[添加] -> 为应用添加 key
这样就可以开始了。
<!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>Document</title>
</head>
<body>
</body>
</html>
<script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=您的密钥"></script>
<style type="text/css">
html {
height: 100%
}
body {
height: 100%;
margin: 0px;
padding: 0px
}
#container {
height: 100%
}
</style>
</head>
<body>
<div id="container"></div>
</body>
var map = new AMap.Map('container', {
zoom:11,//级别
center: [116.397428, 39.90923],//中心点坐标
viewMode:'3D'//使用3D视图
});
<!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>Document</title>
<script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=您的密钥"></script>
<style type="text/css">
html {
height: 100%
}
body {
height: 100%;
margin: 0px;
padding: 0px
}
#container {
height: 100%
}
</style>
</head>
<body>
<div id="container"></div>
<script>
var map = new AMap.Map('container', {
zoom: 11, //级别
center: [116.397428, 39.90923], //中心点坐标
viewMode: '3D' //使用3D视图
});
</script>
</body>
</html>
我这里根据官方文档简单列举下我们在实例化地图时可以进行的配置
属性 | 类型 | 描述 |
---|---|---|
center | [Number,Number] | 初始中心经纬度 |
zoom | Number | 地图显示的缩放级别,可以设置为浮点数 |
rotation | Number | 地图顺时针旋转角度,取值范围 [0-360] ,默认值:0 |
viewMode | String | 地图视图模式, 默认为‘2D’,可选’3D’,选择‘3D’会显示 3D 地图效果。 |
features | Array< String > (default ['bg','point','road','building' ]) | 设置地图上显示的元素种类, 支持’bg’(地图背景)、‘point’(POI点)、‘road’(道路)、‘building’(建筑物) |
dragEnable | Boolean | 地图是否可通过鼠标拖拽平移, 默认为 true |
zoomEnable | Boolean | 地图是否可缩放,默认值为 true。 |
rotateEnable | Boolean | 地图是否可旋转, 默认为true |
scrollWheel | Boolean | 地图是否可通过双击鼠标放大地图, 默认为true。 |
showLabel | Boolean | 是否展示地图文字和 POI 信息。默认为true |
defaultCursor | String | 地图默认鼠标样式。参数 defaultCursor 应符合 CSS 的 cursor 属性规范。 |
wallColor | String | 地图楼块的侧面颜色 |
roofColor | String | 地图楼块的顶面颜色 |
showBuildingBlock | Boolean | 是否展示地图 3D 楼块,默认 true |
showIndoorMap | Boolean | 是否自动展示室内地图,默认是 false |
skyColor | String | 天空颜色,3D 模式下带有俯仰角时会显示 |
var map = new AMap.Map('container', {
zoom: 11, //级别
center: [116.397428, 39.90923], //中心点坐标
viewMode: '3D', //使用3D视图
wallColor: "green", // 地图楼快的侧面颜色
roofColor: 'pink', // 地图楼快的顶面颜色
skyColor: 'red', // 天空颜色
});
使用高德地图 JS API 创建的地图通常由这几部分组成:
使用 JS API 开发之前有几个基础类型需要了解一下,包括:
AMap.LngLat
AMap.Pixel
AMap.Size
AMap.Bounds
经纬度是利用三维球面空间来描述地球上一个位置的坐标系统,每个经纬度坐标由经度 lng
和纬度 lat
两个分量组成。
在 JS API 里使用经纬度来表示地图的中心点center
、点标记的位置position
、圆的中心点center
、折线和多边形的路径path
等,以及其他所有表述实际位置的地方。
经纬度的有效范围为经度-180
度到+180
度,纬度大约-85
度到+85
度。
JS API 支持的经纬度的写法有两种,使用时经度在前
,纬度在后
,推荐使用标准写法:
var position = new AMap.LngLat(116, 39);//标准写法
var position = [116, 39]; //简写
var map = new AMap.Center('conatiner',{
center: position
})
对于使用到经纬度数组的时候,比如创建一个折线的路径,写法如下:
//标准写法
var path = [new AMap.LngLat(116,39), new AMap.LngLat(116,40), new AMap.LngLat(117,39)]
var path = [ [116,39], [116,40], [117,39] ]; //简写
var polyline = new AMap.Polyline({
path : path,
})
map.add(polyline);
使用经纬度类型可以进行一些简单的位置计算,比如点与点、点与线的距离,根据距离差计算另一个经纬度等:
var lnglat1 = new AMap.LngLat(116, 39);
var lnglat2 = new AMap.LngLat(117, 39);
var distance = lnglat1.distance(lnglat2);//计算lnglat1到lnglat2之间的实际距离(m)
var lnglat3 = lnglat1.offset(100,50)//lnglat1向东100m,向北50m的位置的经纬
AMap.Pixel
x
和y
两个分量组成var offset = new AMap.Pixel(-16,-30);
var marker = new AMap.Marker({
offset:offset,
icon:'xxx.png',
});
map.add(marker);
AMap.Size
像素尺寸由width
和height
两个分量构成,通常用来描述具有一定大小的对象,比如地图的尺寸,图标的尺寸等
var mapSize = map.getSize();//获取地图大小,返回的是地图容器的像素大小
var width = mapSize.width; //地图容器像素宽
var height = mapSize.height;//地图容器像素高
AMap.Bounds
var southWest = new AMap.LngLat(110,20); // 西南角经纬度
var northEast = new AMap.LngLat(120,30); // 东北角经纬度值
var bounds = new AMap.Bounds(southWest, northEast);
map.setBounds(bounds);
官方参考手册:https://lbs.amap.com/api/jsapi-v2/documentation#marker
// 构造点标记
var marker = new AMap.Marker({
map: map, // 要显示该 marker 的地图对象
icon: "https://webapi.amap.com/theme/v1.3/markers/n/mark_b.png",
position: [116.405467, 39.907761], // 点标记在地图上显示的位置
title: 'Hello', // 鼠标滑过点标记时的文字提示
visible: true, // 点标记是否可见,默认值:true
draggable: true, // 点标记是否可以拖拽移动,默认为false
cursor: 'pointer' // 指定鼠标悬停时的鼠
});
// 将点标记添加到地图上
map.add(marker);
// 移除已创建的 marker
map.remove(marker);
3.1.2、圆形标记CircleMarker
官方参考手册:https://lbs.amap.com/api/javascript-api/reference/overlay#circlemarker
// 构造圆形标记
var CircleMarker = new AMap.CircleMarker({
map:map, // 要显示该 CircleMarker 的地图对象
center: [116.397428, 39.90923],//圆心位置
radius: 5, //圆点半径,单位px
strokeColor: '#006600', //线条颜色,使用16进制颜色代码赋值。默认值为#006600
strokeOpactiy: 0.9, //轮廓线透明度,取值范围[0,1],0表示完全透明,1表示不透明。默认为0.9
strokeWeight: 5, //轮廓线宽度
fillColor: '#006600', //圆形填充颜色,使用16进制颜色代码赋值。默认值为#006600
fillOpacity: 0.9, //圆形填充透明度,取值范围[0,1],0表示完全透明,1表示不透明。默认为0.9
})
// 将圆形标记添加到地图上
map.add(CircleMarker);
官方参考手册:https://lbs.amap.com/api/javascript-api/reference/overlay#text
// 构造文本标记
var text = new AMap.Text({
map:map, // 要显示该 CircleMarker 的地图对象
text: 'Hello',//标记显示的文本内容
position: [116.397428, 39.90923],//点标记在地图上显示的位置,默认为地图中心点
})
// 将文本标记添加到地图上
map.add(text);
创建一个标注对象,首先要设置标注的位置,同时还可以通过 icon 和 text 属性设置图标和文字(也可以缺省)。
var icon = {
// 图标类型,现阶段只支持 image 类型
type: 'image',
// 图片 url
image: 'https://a.amap.com/jsapi_demos/static/demo-center/marker/express2.png',
// 图片尺寸
size: [64, 30],
// 图片相对 position 的锚点,默认为 bottom-center
anchor: 'center',
};
var text = {
// 要展示的文字内容
content: '中邮速递易',
// 文字方向,有 icon 时为围绕文字的方向,没有 icon 时,则为相对 position 的位置
direction: 'right',
// 在 direction 基础上的偏移量
offset: [-20, -5],
// 文字样式
style: {
// 字体大小
fontSize: 12,
// 字体颜色
fillColor: '#22886f',
// 描边颜色
strokeColor: '#fff',
// 描边宽度
strokeWidth: 2,
}
};
var labelMarker = new AMap.LabelMarker({
name: '标注2', // 此属性非绘制文字内容,仅最为标识使用
position: [116.466994, 39.984904],
zIndex: 16,
// 将第一步创建的 icon 对象传给 icon 属性
icon: icon,
// 将第二步创建的 text 对象传给 text 属性
text: text,
});
创建 LabelsLayer
LabelsLayer 图层是承载 LabelMarker 的图层,所有创建的 LabelMarker 需要添加到 LabelsLayer 图层上才能最终展示在地图上。
var labelsLayer = new AMap.LabelsLayer({
zooms: [3, 20],
zIndex: 1000,
// 该层内标注是否避让
collision: true,
// 设置 allowCollision:true,可以让标注避让用户的标注
allowCollision: true,
});
// 添加一个 labelMarker
labelsLayer.add(labelMarker);
map.add(labelsLayer);
官方参考手册:https://lbs.amap.com/api/jsapi-v2/documentation#circle
// 构造矢量圆形
var circle = new AMap.Circle({
center: new AMap.LngLat("116.403322", "39.920255"), // 圆心位置
radius: 1000, //半径,单位米
strokeColor: "#F33", //线颜色
strokeOpacity: 1, //线透明度
strokeWeight: 3, //线粗细度
fillColor: "#ee2200", //填充颜色
fillOpacity: 0.35, //填充透明度,取值范围 [0,1] ,0表示完全透明,1表示不透明。默认为0.5
strokeStyle: 'solid',//轮廓线样式,实线:solid,虚线:dashed
});
// add方法可以传入一个覆盖物数组,将点标记和矢量圆同时添加到地图上
map.add([marker,circle]);
当然除了圆形,还有其他:
官方文档矢量图形:https://lbs.amap.com/api/jsapi-v2/guide/overlays/vector-overlay
这里举一个折线的例子,具体还是得翻阅官方文档。
// 折线的节点坐标数组,每个元素为 AMap.LngLat 对象
var path = [
new AMap.LngLat(116.368904, 39.913423),
new AMap.LngLat(116.382122, 39.901176),
new AMap.LngLat(116.387271, 39.912501),
new AMap.LngLat(116.398258, 39.904600)
];
// 创建折线实例
var polyline = new AMap.Polyline({
path: path,
borderWeight: 2, // 线条宽度,默认为 1
strokeColor: 'red', // 线条颜色
lineJoin: 'round' // 折线拐点连接处样式
});
// 将折线添加至地图实例
map.add(polyline);
官方文档:插件的使用
JS API 提供了众多的插件功能,这些功能不会主动随着 JSAPI 主体资源下发,需要引入之后才能使用这些插件的功能。
使用插件的功能通常需要三个步骤:
①引入插件
引入插件,支持按需异步加载和同步加载,可同时引入多个插件
异步加载插件
异步加载指的是在 JS API 加载完成之后,在需要使用到某个插件的时候,通过AMap.plugin方法按需引入插件,在plugin回调之后使用插件功能。
<script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=您申请的key值"></script>
<script type="text/javascript" >
var map = new AMap.Map('container',{
zoom:12,
center:[116.39,39.9]
});
AMap.plugin('AMap.ToolBar',function(){//异步加载插件
var toolbar = new AMap.ToolBar();
map.addControl(toolbar);
});
</script>
②异步加载多个插件
AMap.plugin
的第一个参数使用数组即可同时加载引入多个插件。
AMap.plugin(['AMap.ToolBar','AMap.Driving'],function(){//异步同时加载多个插件
var toolbar = new AMap.ToolBar();
map.addControl(toolbar);
var driving = new AMap.Driving();//驾车路线规划
driving.search(/*参数*/)
});
③同步预加载插件
如果您希望和 JS API 的主体同步加载某些插件,而不是异步加载,可以在 JS API 的入口地址中添加plugin
参数,将需要使用的一个或者多个插件的名称作为参数即可,这种用法在 JS API 加载完毕之后便可直接使用插件功能了。
<script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=您申请的key值&plugin=AMap.ToolBar"></script>
<script type="text/javascript" >
var map = new AMap.Map('mapContainer',{
zoom:12,
center:[116.39,39.9]
});
var toolbar = new AMap.ToolBar();
map.plugin(toolbar);
</script>
④同步预加载多个插件
需要加载多个插件时,plugin参数中的插件名称之间以逗号分割。
<script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=您申请的key值&plugin=AMap.ToolBar,AMap.Driving"></script>
<script type="text/javascript" >
var map = new AMap.Map('mapContainer',{
zoom:12,
center:[116.39,39.9]
});
var toolbar = new AMap.ToolBar();
map.plugin(toolbar);
var driving = new AMap.Driving();
driving.search(/*参数*/)
</script>
⑤插件列表
插件列表
参考手册
根据上述插件列表和参考手册,我们配合使用,可以使用很多插件
例如:通过 AMap.MouseTool 工具,在图面添加默认样式的 Marker 点:
<!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>Document</title>
<!-- 引入插件 -->
<script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=您的密钥"></script>
<style type="text/css">
html {
height: 100%
}
body {
height: 100%;
margin: 0px;
padding: 0px
}
#container {
height: 100%
}
</style>
</head>
<body>
<div id="container"></div>
<script>
var map = new AMap.Map('container', {
zoom: 11, //级别
center: [116.397428, 39.90923], //中心点坐标
viewMode: '2D', //使用3D视图
});
// 鼠标工具插件
map.plugin(["AMap.MouseTool"], function() {
var mousetool = new AMap.MouseTool(map);
// 使用鼠标工具,在地图上画标记点
mousetool.marker();
});
</script>
</body>
</html>
线,面的添加方式同上。只要将 marker 方法替换成相应的线 mousetool.polyline();
或者面 mousetool.polygon();
方法即可。
获取通过 AMap.MouseTool 绘制的点、线、面覆盖物的位置/范围/路径。
使用鼠标工具绘制的点、折线、多边形、圆形、矩形等覆盖物,都可以通过多边形覆盖物自身的方法,获取到位置/范围/路径。此处以多边形为例,阐述获取相应信息的方式
鼠标工具除可以绘制多种覆盖物以外,还可以进行距离量测、面积量测、拉框放大、拉框缩小等操作。
以下以距离量测模式为例介绍。鼠标在地图上单击绘制量测节点,并计算显示两两节点之间的距离,鼠标左键双击或右键单击结束当前量测操作
//通过插件方式引入 AMap.MouseTool 工具
map.plugin(["AMap.MouseTool"], function() {
//在地图中添加MouseTool插件
var distanceTool = new AMap. AMap.MouseTool(map);
//测量
distanceTool.rule();
});
默认信息窗体封装了关闭按钮,使用 API 默认的信息窗体样式,这个时候只需要对 InfoWindow 设定 content 属性即可,
var infoWindow = new AMap.InfoWindow({
anchor: 'top-left',
content: '这是信息窗体!',
});
infoWindow.open(map,[116.401337,39.907886]);
// 创建 infoWindow 实例
var infoWindow = new AMap.InfoWindow({
isCustom: true, //使用自定义窗体
content: "这是信息窗体", //传入 dom 对象,或者 html 字符串
offset: new AMap.Pixel(16, -50)
});
infoWindow.open(map, [116.401337, 39.907886]);
注意:这里的官方demo更具体
var contextMenu = new AMap.ContextMenu({
isCustom: true,
content: "右键菜单"
});
map.on('rightclick', function(e) {
console.log(e); // 可以打印出事件对象 e 来查看下面的 lnglat
contextMenu.open(map, e.lnglat);
});
注意:这里的官方demo更具体
设置地图样式的方式有两种:
var map = new AMap.Map('container',{
mapStyle: 'amap://styles/whitesmoke', //设置地图的显示样式
});
var map = new AMap.Map('container', {
zoom: 11, //级别
center: [116.397428, 39.90923], //中心点坐标
viewMode: '2D', //使用3D视图
});
map.setMapStyle('amap://styles/whitesmoke');
编辑、发布后,使用与分享 -> 取得 地图样式ID
设置自定义地图的方式有两种:
地图初始化时,设置自定义地图:
var map = new AMap.Map('container',{
mapStyle: 'amap://styles/地图样式ID', //设置地图的显示样式
});
地图创建之后使用Map对象的setMapStyle方法进行地图样式的变更:
var map = new AMap.Map('container', {
zoom: 11, //级别
center: [116.397428, 39.90923], //中心点坐标
viewMode: '2D', //使用2D视图
});
map.setMapStyle('amap://styles/地图样式ID');
setFeatures
方法设置显示部分底图元素map.setFeatures("road"); // 单一种类要素显示
map.setFeatures(['road','point']); // 多个种类要素显示
目前支持以下四种地图要素的选择性显示:
名称 | 说明 |
---|---|
bg | 区域面 |
point | 兴趣点 |
road | 道路及道路标注 |
building | 建筑物 |
地图图面可以通过插件的方式添加地图基础控件。地图图面控件包括工具条、比例尺、定位、鹰眼、基本图层切换五种插件。
// 同时引入工具条插件,比例尺插件和鹰眼插件
AMap.plugin([
'AMap.ToolBar',
'AMap.Scale',
'AMap.HawkEye',
'AMap.MapType',
'AMap.Geolocation',
], 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());
});
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。