高德地图JS API 实例  亲测可用

参考网站=> 阿里云数据可视化平台(下载json用的):http://datav.aliyun.com/portal/school/atlas/area_selector?spm=a2crr.23498931.0.0.685915dd8QQdlv

<script src="//webapi.amap.com/maps?v=1.4.15&key=564abe9d4eef2535f9cc6ab1c1229cfc&plugin=Map3D,AMap.DistrictSearch,AMap.MarkerClusterer,AMap.Object3DLayer,AMap.MouseTool"></script>

1.渲染地图

  const [initDataMap, setInitDataMap] = useState({
centerCity: '拱墅区',
defaultZoom: 12,
centerPoint: { lng: 120.165533, lat: 30.329062 },
});
//初始化地图
const initMap = () => {
const { centerPoint } = initDataMap;
const center = [centerPoint.lng, centerPoint.lat];
const mzooms = [8, 19];
const mzoom = 12; let map = new AMap.Map("AMapBox", {
zoom: mzoom, //初始化地图层级
zooms: mzooms,
rotateEnable: false, // 固定视角
disableSocket: true,
center: center,
}); mapRef.current = map;
addAreaCoordinate(map); // 这个是渲染块
};

2.绘制Marker标记点

  // 绘制点
const drawMarker = (data: any, map: any) => {
const infoWindow = new AMap.InfoWindow({
offset: new AMap.Pixel(5, -30),
autoMove: true,
closeWhenClickMap: true,
});
let ap: any = []
data.forEach((item: any) => {
if (item.lat && item.lng) {
const ad = [item.lng, item.lat];
const marker = new AMap.Marker({
position: ad,
icon: iconIMg, // 自己的icon
map: map
}); ap.push(marker);
setMarkerList(ap); const content = item.projectName;
marker.on('click', () => {
infoWindow.setContent(content);
infoWindow.open(map, ad);
});
}
});
map.setFitView();
}

3.绘制线段Polyline

  // 绘制线段
const polylineInit = (lineArr: any, map: any, callBack: any) => {
const infoWindowLine = new AMap.InfoWindow({
offset: new AMap.Pixel(5, -30),
autoMove: true,
closeWhenClickMap: true,
}); const polyline = new AMap.Polyline({
path: lineArr.list, //设置线覆盖物路径
strokeColor: "#3366FF", //线颜色
strokeOpacity: 1, //线透明度
strokeWeight: 5, //线宽
strokeStyle: "solid", //线样式
strokeDasharray: [10, 5] //补充线样式
});
polyline.setMap(map); callBack(polyline); const content = `
<div>
<div style='border-bottom: 1px solid #F0F0F0; margin-bottom: 4px; padding: 4px 0 4px 0; color: #000000; font-size: 16px; '>${lineArr.roadName}</div>
<div >所属国企:${lineArr.belongCorpName}</div>
<div>当前进度:${lineArr.currentStatusStr}</div>
<a onclick="handleClickDetail(${lineArr.id})">查看详情信息</a>
<div>
` if (callBackDetail) {
polyline.on('click', (e: any) => {
infoWindowLine.setContent(content);
infoWindowLine.open(map, e.lnglat);
});
}
}
// 处理绘制线段 可不看嘎嘎···
const dealPolylineInit = (arr: any, map: any) => {
// map.clearMap();
map.remove(polylineList); let ad: any = [];
arr.forEach((item: any) => {
const st = JSON.parse(item.locationMark);
st.forEach((element: any) => {
element.forEach((ele: any) => {
ele.roadName = item.roadName;
ele.belongCorpName = item.belongCorpName;
ele.currentStatusStr = item.currentStatusStr;
ele.id = item.roadId;
});
});
ad.push(st);
});
const flatArr = ad.flat(); const cloneDeepData = cloneDeep(flatArr); const opd: any = [];
cloneDeepData.forEach((item: any) => {
let lineArr: any = [];
const obj: any = {};
item.forEach((element: any) => {
const ad = [element.lng, element.lat];
obj.roadName = element.roadName;
obj.belongCorpName = element.belongCorpName;
obj.currentStatusStr = element.currentStatusStr;
obj.id = element.id
lineArr.push(ad);
});
obj.list = lineArr;
polylineInit(obj, map, (v: any) => {
opd.push(v)
});
}) setPolylineList(opd)
}

4.绘制区域Polygon

  const addAreaCoordinate = (map: any) => {
const obj = gs_json || '';
const points: any[] = [];
obj?.features[0]?.geometry?.coordinates[0][0].map((item: any) => {
points.push(new AMap.LngLat(item[0], item[1]));
}); const polygon = new AMap.Polygon({
path: points,
color: '#1CB9FF',
weight: 3,
opacity: 0.5,
fillColor: '#1CB9FF',
fillOpacity: 0.05,
}); map.add(polygon);
map.setFitView(polygon);//视口自适应 }

5.完整的代码------(react写的,但不影响cv)

import React, { useRef, forwardRef, useImperativeHandle, useEffect, useState } from 'react';
//antd
// 第三方组件
//@ts-ignore
import AMap from 'AMap';
import { cloneDeep } from 'lodash';
import gs_json from '@/assets/json/gongshu.json'; // 地图区域的json数据 import iconIMg from '@/assets/productizationimg/local.png' const AMapModal = forwardRef((props: any, ref: any) => {
const { roadMapData, projectMapData, isShowLanLat, callBackDetail } = props;
const mapRef = useRef<any>();
const [markerList, setMarkerList] = useState<any>([]);
const [polylineList, setPolylineList] = useState<any>([]); const [initDataMap, setInitDataMap] = useState({
centerCity: '拱墅区',
defaultZoom: 12,
centerPoint: { lng: 120.165533, lat: 30.329062 },
}); //@ts-ignore
window.document.handleClickDetail = function (id: any) {
if (callBackDetail) {
callBackDetail(id);
}
}; // 根据levelCode向地图中画一个区域轮廓
const addAreaCoordinate = (map: any) => {
const obj = gs_json || '';
const points: any[] = [];
obj?.features[0]?.geometry?.coordinates[0][0].map((item: any) => {
points.push(new AMap.LngLat(item[0], item[1]));
}); const polygon = new AMap.Polygon({
path: points,
color: '#1CB9FF',
weight: 3,
opacity: 0.5,
fillColor: '#1CB9FF',
fillOpacity: 0.05,
}); map.add(polygon);
map.setFitView(polygon);//视口自适应 } // 绘制点
const drawMarker = (data: any, map: any) => {
const infoWindow = new AMap.InfoWindow({
offset: new AMap.Pixel(5, -30),
autoMove: true,
closeWhenClickMap: true,
});
let ap: any = []
data.forEach((item: any) => {
if (item.lat && item.lng) {
const ad = [item.lng, item.lat];
const marker = new AMap.Marker({
position: ad,
icon: iconIMg,
map: map
}); ap.push(marker);
setMarkerList(ap); const content = item.projectName;
marker.on('click', () => {
infoWindow.setContent(content);
infoWindow.open(map, ad);
});
}
});
map.setFitView();
} // 绘制线段
const polylineInit = (lineArr: any, map: any, callBack: any) => {
const infoWindowLine = new AMap.InfoWindow({
offset: new AMap.Pixel(5, -30),
autoMove: true,
closeWhenClickMap: true,
}); const polyline = new AMap.Polyline({
path: lineArr.list, //设置线覆盖物路径
strokeColor: "#3366FF", //线颜色
strokeOpacity: 1, //线透明度
strokeWeight: 5, //线宽
strokeStyle: "solid", //线样式
strokeDasharray: [10, 5] //补充线样式
});
polyline.setMap(map); callBack(polyline); const content = `
<div>
<div style='border-bottom: 1px solid #F0F0F0; margin-bottom: 4px; padding: 4px 0 4px 0; color: #000000; font-size: 16px; '>${lineArr.roadName}</div>
<div >所属国企:${lineArr.belongCorpName}</div>
<div>当前进度:${lineArr.currentStatusStr}</div>
<a onclick="handleClickDetail(${lineArr.id})">查看详情信息</a>
<div>
` if (callBackDetail) {
polyline.on('click', (e: any) => {
infoWindowLine.setContent(content);
infoWindowLine.open(map, e.lnglat);
});
}
}
// 处理绘制线段
const dealPolylineInit = (arr: any, map: any) => {
// map.clearMap();
map.remove(polylineList); // 清除线段的 let ad: any = [];
arr.forEach((item: any) => {
const st = JSON.parse(item.locationMark);
st.forEach((element: any) => {
element.forEach((ele: any) => {
ele.roadName = item.roadName;
ele.belongCorpName = item.belongCorpName;
ele.currentStatusStr = item.currentStatusStr;
ele.id = item.roadId;
});
});
ad.push(st);
});
const flatArr = ad.flat(); const cloneDeepData = cloneDeep(flatArr); const opd: any = [];
cloneDeepData.forEach((item: any) => {
let lineArr: any = [];
const obj: any = {};
item.forEach((element: any) => {
const ad = [element.lng, element.lat];
obj.roadName = element.roadName;
obj.belongCorpName = element.belongCorpName;
obj.currentStatusStr = element.currentStatusStr;
obj.id = element.id
lineArr.push(ad);
});
obj.list = lineArr;
polylineInit(obj, map, (v: any) => {
opd.push(v)
});
}) setPolylineList(opd)
} const initMap = () => {
const { centerPoint } = initDataMap;
const center = [centerPoint.lng, centerPoint.lat];
const mzooms = [8, 19];
const mzoom = 12; let map = new AMap.Map("AMapBox", {
zoom: mzoom, //初始化地图层级
zooms: mzooms,
rotateEnable: false, // 固定视角
disableSocket: true,
center: center,
}); mapRef.current = map;
addAreaCoordinate(map);
}; useEffect(() => {
initMap();
}, []);
// 地图道路线更新
useEffect(() => {
dealPolylineInit(roadMapData, mapRef.current);
}, [roadMapData]);
// 地图点更新
useEffect(() => {
if (isShowLanLat == 1) {
drawMarker(projectMapData, mapRef.current);
} else {
if (mapRef.current) {
mapRef.current.remove(markerList);// 清除markerList点位
} }
}, [isShowLanLat, projectMapData]); return (
<div>
<div id='AMapBox' style={{ width: '100%', height: 640 }}></div>
</div>
);
}) export default AMapModal

js高德地图添加点Marker,添加线段Polyline,添加一个区域Polygon(面)的更多相关文章

  1. Android集成高德地图如何自定义marker

    高德地图自定义Marker 高德地图默认的marker样式是这种 一般的修改样式是通过icon接口来调整 MarkerOptions markerOptions = new MarkerOptions ...

  2. JS高德地图应用 ---- 鼠标点击加入标记 & POI搜索

    代码如下 (填入Key值) : <!DOCTYPE html> <html> <head> <meta charset="utf-8"&g ...

  3. JS框架_(JQuery.js)高德地图api

    百度云盘 传送门 密码 :ko30 高德地图api效果 <!doctype html> <html> <head> <meta charset="u ...

  4. js高德地图手机定位

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  5. JS高德地图计算两地之间的实际距离

    这个是通过导航的方式来获取两地之间的实际距离,和消耗的时间(key值自己去申请哈) <!doctype html> <html> <head> <meta c ...

  6. IOS原生地图与高德地图

    原生地图 1.什么是LBS LBS: 基于位置的服务   Location Based Service 实际应用:大众点评,陌陌,微信,美团等需要用到地图或定位的App 2.定位方式 1.GPS定位  ...

  7. 如何实现在H5里调起高德地图APP?(上)

    这一篇文章,将讲述如何在H5里调起高德地图APP,并展示兴趣点.适合于展示某个餐馆,商场等,让用户自行选择前往方式. 场景一.在高德地图上展示Marker点或者POI标记 在一些基于位置分享的应用开发 ...

  8. iOS之原生地图与高德地图

    原生地图 1.什么是LBS LBS: 基于位置的服务 Location Based Service 实际应用:大众点评,陌陌,微信,美团等需要用到地图或定位的App 2.定位方式 1.GPS定位 2. ...

  9. iOS原生地图与高德地图的使用

    原生地图 1.什么是LBS LBS: 基于位置的服务 Location Based Service 实际应用:大众点评,陌陌,微信,美团等需要用到地图或定位的App 2.定位方式 1.GPS定位 2. ...

  10. 如何实现在H5里调起高德地图APP?

    http://www.cnblogs.com/milkmap/p/5912350.html 这一篇文章,将讲述如何在H5里调起高德地图APP,并展示兴趣点.适合于展示某个餐馆,商场等,让用户自行选择前 ...

随机推荐

  1. docker registry(私库)搭建,使用,WEB可视化管理部署

    Docker Registry 是Docker官方一个镜像,可以用来储存和分发Docker镜像.目前比较流行的两个镜像私库是Docker Registry ,HarBor 其中HarBor最合适企业级 ...

  2. 【机器学习】李宏毅——Recurrent Neural Network(循环神经网络)

    假设我们当前要做一个人工智能客服系统,那该系统就需要对用户输入的话语进行辨认,例如用户输入: I want to arrive Taipei on November 2nd 那么该系统就能够辨认出来T ...

  3. cs231n__3. LostFunction

    CS231n 3.1 Lost Function 我们上次提到,要如何选择最优的W呢? 这就是要选择几种损失函数了. 我们要找到一种可行的方法来选择最优的W 先看简单的3个样本的例子 正式定义损失函数 ...

  4. nuxt.js中引入lib-flexible 和 postcss-px2rem 实现pc自适应

    最近一个需要用nuxt框架实现的pc自适应项目,从网上找了很多资料,最终完美实现 一.下载相关插件 npm i lib-flexible -Snpm i px2rem-loader -Dnpm ins ...

  5. html排版,样式

    <style>         .box{             width: 600px;             height: 800px;             backgro ...

  6. linux下redis_单机版_主从_集群_部署文档

    一 单机版部署 1.1 Redis下载地址 http://download.redis.io/releases/ 本次部署版本:3.2.8 当前最新版本:5.0.5 1.2 安装 部署路径说明规划 / ...

  7. centos更新glibc-2.28

    vps安装alist时提示glibc版本太老,找了一圈教程,就这个解决了问题. 原文: https://www.cnblogs.com/FengZeng666/p/15989106.html

  8. 增强MybatisPlus拓展新功能 实战MybatisPlus大合集

    mybatis-plus-max简介 MybatisPlusMax是MybatisPlus的增强包,秉承只拓展不修改的理念,对MybatisPlus做增强. 正如MybatisPlus是对MyBati ...

  9. [cocos2d-x]关于定时器

    什么是定时器 定时器的作用就是每隔一段时间,就执行一段自定义的动作,比如飞机向前方移动,子弹的移动等等.该函数定义在CCNode头文件中,基本上cocos2dx中所有的东西都能够使用定时器. 定时器的 ...

  10. 题解P4474 王者之剑

    双倍经验 简要题意 给你一个 \(n\times m\) 的网格,数字在格子里,你需要取出一些格子,使得任意两个格子之间没有公共边,输出格子中的数字和的最大值. \(1 \le n,m \le 100 ...