百度地图一套JS API,非常实用
百度地图一套JS API,非常实用
import mapStyleJson from "./mapStyleJson";
import $ from "jquery"; class BaiduMapGl {
constructor(el, centerPoint, zoom) {
this.el = el;
this.centerPoint = centerPoint;
this.zoom = zoom;
this.init();
this.sq = [];
this.sh = [];
this.dz = [];
this.gb = [];
this.jk = [];
}
// 初始化地图
init() {
this.map = new BMapGL.Map(this.el, {
minZoom: 12,
});
this.setCenter(this.centerPoint, 12);
this.map.enableScrollWheelZoom(true);
this.map.setTilt(60);
this.map.setMapStyleV2({
styleJson: mapStyleJson,
});
return this;
}
// 设置地图中心点
setCenter(centerPoint, zoom) {
this.map.centerAndZoom(
new BMapGL.Point(centerPoint.lng, centerPoint.lat),
zoom
);
}
// 设置地图中心
setCenterPoint(lng, lat) {
this.centerPoint = {
lng,
lat,
};
}
// 绘制边界
drawPrismOverlay(data) {
let list = data.map((item) => {
return new BMapGL.Point(Number(item.lng), Number(item.lat));
});
let prism = new BMapGL.Prism(list, 200, {
topFillColor: "#00B0F0",
topFillOpacity: 0.3,
sideFillColor: "#1B9995",
sideFillOpacity: 1,
});
// strokeColor: '#1B9995',
// strokeWeight: 1,
// strokeOpacity: 0.5,
// fillColor:this.colorArr[idx],
this.map.addOverlay(prism);
return this;
} // 绘制边界
// drawPrismOverlay(data, border, borderOpacity, color, opacity, borderStyle) {
// let list = data.map((item) => {
// return new BMapGL.Point(Number(item.lng), Number(item.lat))
// })
// let polygon = new BMapGL.Polygon(list, {
// strokeColor: border || "#9200ff",//边线颜色
// strokeOpacity: borderOpacity || 0.5,
// fillColor: color || "#95d3dd",//填充颜色
// fillOpacity: opacity || 0.5,
// strokeStyle: borderStyle || "dashed",
// strokeWeight: 2
// })
// this.map.addOverlay(polygon)
// return this
// } // 批量绘制markers
batchMarkers(list, type) {
list.forEach((item) => {
this.drawMarker(item, type);
});
return this;
}
// 单点绘制 带label
drawMarker({ title, point, icon, size, offset, callback }, type) {
if (type === "default") {
// 点
let pt = new BMapGL.Point(point.lng, point.lat);
// icon
let ic = new BMapGL.Icon(icon, new BMapGL.Size(size.width, size.height));
// 创建标注
let marker = new BMapGL.Marker(pt, {
icon: ic,
});
// 标注点击事件
marker.addEventListener("click", function() {
callback();
});
this.map.addOverlay(marker);
// label
let label = new BMapGL.Label(title, {
position: pt, // 指定文本标注所在的地理位置
offset: new BMapGL.Size(offset.x, offset.y), //设置文本偏移量
});
// label样式
label.setStyle({
color: "#fff",
fontSize: "12px",
height: "20px",
lineHeight: "20px",
fontFamily: "微软雅黑",
background: "transparent",
border: "none",
});
this.map.addOverlay(label);
} else if (type === "sq") {
// 点
let pt = new BMapGL.Point(point.lng, point.lat);
// icon
let ic = new BMapGL.Icon(icon, new BMapGL.Size(size.width, size.height));
// label
// 创建标注
let marker = new BMapGL.Marker(pt, {
icon: ic,
});
this.map.addOverlay(marker); // 标注点击事件
marker.addEventListener("click", function() {
callback();
});
marker.addEventListener("mouseover", function() {
// 为标注设置标签
let label = new BMapGL.Label(title, {
position: pt, // 指定文本标注所在的地理位置
offset: new BMapGL.Size(offset.x, offset.y), //设置文本偏移量
});
// label样式
label.setStyle({
color: "#fff",
fontSize: "12px",
height: "20px",
lineHeight: "20px",
fontFamily: "微软雅黑",
background: "transparent",
border: "none",
});
marker.setLabel(label);
});
marker.addEventListener("mouseout", function() {
var label = this.getLabel();
//设置标签内容为空
label.setContent("");
label.setStyle({ display: "none" });
});
this.sq.push(marker);
// console.log(this.sq);
} else if (type === "dz") {
// 点
let pt = new BMapGL.Point(point.lng, point.lat);
// icon
let ic = new BMapGL.Icon(icon, new BMapGL.Size(size.width, size.height));
// label
// 创建标注
let marker = new BMapGL.Marker(pt, {
icon: ic,
});
this.map.addOverlay(marker);
let label = new BMapGL.Label(title, {
position: pt, // 指定文本标注所在的地理位置
offset: new BMapGL.Size(offset.x, offset.y), //设置文本偏移量
}); // 标注点击事件
marker.addEventListener("click", function() {
callback();
});
marker.addEventListener("mouseover", function() {
// 为标注设置标签
let label = new BMapGL.Label(title, {
position: pt, // 指定文本标注所在的地理位置
offset: new BMapGL.Size(offset.x, offset.y), //设置文本偏移量
});
// label样式
label.setStyle({
color: "#fff",
fontSize: "12px",
height: "20px",
lineHeight: "20px",
fontFamily: "微软雅黑",
background: "transparent",
border: "none",
});
marker.setLabel(label);
});
marker.addEventListener("mouseout", function() {
var label = this.getLabel();
//设置标签内容为空
label.setContent("");
label.setStyle({ display: "none" });
});
this.dz.push(marker);
} else if (type === "gb") {
// 点
let pt = new BMapGL.Point(point.lng, point.lat);
// icon
let ic = new BMapGL.Icon(icon, new BMapGL.Size(size.width, size.height));
// label
// 创建标注
let marker = new BMapGL.Marker(pt, {
icon: ic,
});
this.map.addOverlay(marker); // 标注点击事件
marker.addEventListener("click", function() {
callback();
});
marker.addEventListener("mouseover", function() {
// 为标注设置标签
let label = new BMapGL.Label(title, {
position: pt, // 指定文本标注所在的地理位置
offset: new BMapGL.Size(offset.x, offset.y), //设置文本偏移量
});
// label样式
label.setStyle({
color: "#fff",
fontSize: "12px",
height: "20px",
lineHeight: "20px",
fontFamily: "微软雅黑",
background: "transparent",
border: "none",
});
marker.setLabel(label);
});
marker.addEventListener("mouseout", function() {
var label = this.getLabel();
//设置标签内容为空
label.setContent("");
label.setStyle({ display: "none" });
});
this.gb.push(marker);
} else if (type === "jk") {
// 点
let pt = new BMapGL.Point(point.lng, point.lat);
// icon
let ic = new BMapGL.Icon(icon, new BMapGL.Size(size.width, size.height));
// label
// 创建标注
let marker = new BMapGL.Marker(pt, {
icon: ic,
});
this.map.addOverlay(marker); // 标注点击事件
marker.addEventListener("click", function() {
callback();
});
marker.addEventListener("mouseover", function() {
// 为标注设置标签
let label = new BMapGL.Label(title, {
position: pt, // 指定文本标注所在的地理位置
offset: new BMapGL.Size(offset.x, offset.y), //设置文本偏移量
});
// label样式
label.setStyle({
color: "#fff",
fontSize: "12px",
height: "20px",
lineHeight: "20px",
fontFamily: "微软雅黑",
background: "transparent",
border: "none",
});
marker.setLabel(label);
});
marker.addEventListener("mouseout", function() {
var label = this.getLabel();
//设置标签内容为空
label.setContent("");
label.setStyle({ display: "none" });
});
this.jk.push(marker);
}
} // 地图旋转动画
enableAnimation() {
const keyFrames = [
{
center: new BMapGL.Point(this.centerPoint.lng, this.centerPoint.lat),
zoom: 12,
tilt: 60,
heading: 0,
percentage: 0,
},
{
center: new BMapGL.Point(this.centerPoint.lng, this.centerPoint.lat),
zoom: this.zoom,
tilt: 50,
heading: 360,
percentage: 1,
},
];
const opts = {
duration: 1000, // 设置每次迭代动画持续时间
delay: 3000, // 设置动画延迟开始时间
interation: 1, // 设置动画迭代次数
};
const animation = new BMapGL.ViewAnimation(keyFrames, opts); // 初始化动画实例
this.map.startViewAnimation(animation);
return this;
}
// 清除所有markers及labels
clearAllMarkers() {
// 获取所有覆盖物
let length = this.map.getOverlays().length;
for (let i = length; i > 0; i--) {
let marker = this.map.getOverlays()[i - 1];
// 去除marker及label
if (marker.toString() == "Marker" || marker.toString() == "Label") {
this.map.removeOverlay(marker);
}
}
}
// 清除所有覆盖物
clearOverlays() {
this.map.clearOverlays();
}
// 获取小区uid
getLocalUid(XQ) {
const local = new BMapGL.LocalSearch(this.map, {
renderOptions: { map: this.map },
});
local.setMarkersSetCallback((pois) => {
console.log(pois);
pois.map((v) => {
this.map.removeOverlay(v.marker);
});
const uid = pois[0].uid;
this.drowBoundary(uid);
});
local.search(XQ);
}
//小区边界
drowBoundary(uid) {
$.ajax({
async: false,
url:
"http://map.baidu.com/?pcevaname=pc4.1&qt=ext&ext_ver=new&l=12&uid=" +
uid,
dataType: "jsonp",
jsonp: "callback",
success: (result) => {
console.log(result);
const content = result.content;
if (content.geo != null && content.geo != undefined) {
const geo = content.geo;
let points = this.coordinateToPoints(geo);
//point分组,得到多边形的每一个点,画多边形
if (points && points.indexOf(";") >= 0) {
points = points.split(";");
}
var arr = [];
for (let i = 0; i < points.length - 1; i++) {
var temp = points[i].split(",");
arr.push(
new BMapGL.Point(parseFloat(temp[0]), parseFloat(temp[1]))
);
}
//创建多边形
let polygon = new BMapGL.Prism(arr, 50, {
topFillColor: "#00B0F0",
topFillOpacity: 0.3,
sideFillColor: "#1B9995",
sideFillOpacity: 0.8,
});
this.map.addOverlay(polygon); //增加多边形
this.map.setViewport(polygon.getPath());
} else {
console.log("暂无小区边界信息");
}
},
});
}
//百度米制坐标转换为经纬度
coordinateToPoints(coordinate) {
let points = "";
if (coordinate) {
const projection = BMAP_NORMAL_MAP.getProjection();
if (coordinate && coordinate.indexOf("-") >= 0) {
coordinate = coordinate.split("-");
}
//取点集合
let tempco = coordinate[1];
if (tempco && tempco.indexOf(",") >= 0) {
tempco = tempco.replace(";", "").split(",");
}
//分割点,两个一组,组成百度米制坐标
let temppoints = [];
for (let i = 0, len = tempco.length; i < len; i++) {
temppoints.push({
lng: tempco[i],
lat: tempco[i + 1],
});
i++;
}
for (let i = 0, len = temppoints.length; i < len; i++) {
let pos = temppoints[i];
let point = projection.pointToLngLat(
new BMapGL.Pixel(pos.lng, pos.lat)
);
points += [point.lng, point.lat].toString() + ";";
}
}
return points;
}
} export default BaiduMapGl;
百度地图一套JS API,非常实用的更多相关文章
- 百度地图经纬度转换JS版
//百度地图的坐标转换,由于百度地图在GCJ02协议的基础上又做了一次处理,变为 BD09协议的坐标,以下是坐标的转化方式,可以方便和其他平台转化 jQuery.MapConvert = { x_pi ...
- 利用百度地图WEB服务APIGeoCoding API批量地址解析
Geocoding API包括地址解析和逆地址解析功能: 地理编码:即地址解析,由详细到街道的结构化地址得到百度经纬度信息,例如:“北京市海淀区中关村南大街27号”地址解析的结果是“lng:116.3 ...
- Java web与web gis学习笔记(二)——百度地图API调用
系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...
- Qt的QWebChannel和JS、HTML通信/交互驱动百度地图
Qt的QWebChannel和JS.HTML通信/交互驱动百度地图 0 前言 我一个研究嵌入式的,不知道怎么就迷上了上位机,接了几个项目都是关于Qt,这个项目还是比较经典的,自己没事儿的时候也进行研究 ...
- 百度地图API开发的快速使用和大量坐标点操作【点聚合,海量点,mapv】
快速上手 注意:本篇文章代码是基于 百度地图 JavaScript API v3.0 的条件下编写,GL版本可能稍有变化. 地图嘛,很重要的一部分就是坐标经纬度了: 经度: 英文 longitude ...
- 百度地图API地理位置和坐标转换
1.由地名(省份.城市.街道等)得到其对应的百度地图坐标: http://api.map.baidu.com/geocoder/v2/?output=json&ak=你从百度申请到的Key&a ...
- 百度地图API使用方法详解
最近做了个项目,其中项目中有个需求需要用到百度地图进行导航,通过查阅相关资料参考百度地图api完成了一个例子. API地址:http://developer.baidu.com/map/jsdemo. ...
- ***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)
微信公众平台开发 - 获取用户地理位置 本文介绍在微信公众平台上如何使用高级接口开发获取用户地理位置的功能. 一.获取用户地理位置接口 开通了上报地理位置接口的公众号,用户在关注后进入公众号会话时,会 ...
- 百度地图API简单使用
百度地图API是由JavaScript语言编写的,在使用之前需要将API引用到页面中: 现在新版本的需要密钥,下面用的是旧版的 <script src="http://api.map ...
随机推荐
- How to get a DOM element's ::before content with JavaScript?
How to get a DOM element's ::before content with JavaScript? https://stackoverflow.com/questions/443 ...
- Flutter 在mixin中使用setState
相关问题 创建mixin import 'package:flutter/material.dart'; mixin JobsMixin<T extends StatefulWidget> ...
- Dart: puppeteer库
和node的差不多,只有写API不一样 puppeteer 地址 安装依赖 dependencies: puppeteer: ^1.7.1 下载 chrome-win 到 <project_ro ...
- hadoop环境搭建:完全分布式
目录 1.硬件配置 2.软件版本 3.准备工作 3.1.建立虚拟机,网络设置为桥接模式 3.2.更改主机名 3.3.绑定主机名和IP,建立各主机间的联系 3.4.关闭防火墙 3.5.配置宿主机host ...
- 扒几个 3D 模型备用
前言 在上一篇中,我展示了 OpenGL 开发的基本过程,算是向 3D 世界迈出的一小步吧.对于简单的 3D 物体,比如立方体.球体.圆环等等,我们只需要简单的计算就可以得到他们的顶点的坐标.但是仅仅 ...
- 5. vue常用高阶函数及综合案例
一. 常用的数组的高阶函数 假设, 现在有一个数组, 我们要对数组做如下一些列操作 1. 找出小于100的数字: 2. 将小于100的数字, 全部乘以2: 3. 在2的基础上, 对所有数求和: 通常我 ...
- SpringBoot+Vue豆宝社区前后端分离项目手把手实战系列教程02---创建后端工程
本节代码开源地址 代码地址 项目运行截图 搭建后端工程 0.导入sql 在数据库导入 /* Navicat Premium Data Transfer Source Server : localhos ...
- java与freemarker遍历map
一.java遍历MAP /** * 1.把key放到一个集合里,遍历key值同时根据key得到值 (推荐) */ Set set =map.keySet(); Iterator it=set.iter ...
- ValidationUtils 验证工具
package com.appnirman.vaidationutils;import android.content.Context;import java.util.regex.Matcher;i ...
- 后端程序员之路 24、Redis hiredis
Redishttps://redis.io/ Redis快速入门 - Redis教程http://www.yiibai.com/redis/redis_quick_guide.html wget ht ...