// 初始化地图
map = new TMap.Map('container', {
zoom: 12, // 设置地图缩放级别
center: new TMap.LatLng(nowLat, nowLng), // 设置地图中心点坐标 //当前定位
});
// 初始化几何图形及编辑器
var polygon = new TMap.MultiPolygon({
map: map,
});
var circle = new TMap.MultiCircle({
map: map,
});
var rectangle = new TMap.MultiRectangle({
map: map,
});
editor = new TMap.tools.GeometryEditor({
// TMap.tools.GeometryEditor 文档地址:https://lbs.qq.com/webApi/javascriptGL/glDoc/glDocEditor
map: map, // 编辑器绑定的地图对象
overlayList: [
// 可编辑图层 文档地址:https://lbs.qq.com/webApi/javascriptGL/glDoc/glDocEditor#4
{
overlay: polygon,
id: 'polygon',
},
{
overlay: circle,
id: 'circle',
},
{
overlay: rectangle,
id: 'rectangle',
},
],
// EDITOR_ACTION.INTERACT 查看和修改 的工作模式
actionMode: TMap.tools.constants.EDITOR_ACTION.DRAW, // 编辑器的工作模式绘制
activeOverlayId: 'polygon', // 激活图层
snappable: false, // 关闭吸附
});
// 监听绘制结束事件,获取绘制几何图形
editor.on('draw_complete', (geometry) => {
savedGeometryType = editor.getActiveOverlay().id
// 判断当前处于编辑状态的图层id是否是overlayList中id为rectangle(矩形)图层
if (editor.getActiveOverlay().id === 'rectangle') {
// 获取矩形顶点坐标 保存绘制的几何图形
var id = geometry.id;
var geo = rectangle.geometries.filter(function (item) {
return item.id === id;
});
} else if (editor.getActiveOverlay().id === 'circle') {
var id = geometry.id;
var geo = circle.geometries.filter(function (item) {
return item.id === id;
});
} else {
var id = geometry.id;
var geo = polygon.geometries.filter(function (item) {
return item.id === id;
});
}
editor.destroy() //销毁编辑器
});
初始化地图,进行绘制,只能绘制一个几何图
var lat;
var lng;
var simplePath = [];
if (savedGeometryType == 'polygon') {
lat = savedGeometry.paths[0].lat
lng = savedGeometry.paths[0].lng
for (i = 0; i < savedGeometry.paths.length; i++) {
let a = savedGeometry.paths[i].lat
let b = savedGeometry.paths[i].lng
simplePath.push(new TMap.LatLng(a, b))
}
console.log(simplePath);
} else if (savedGeometryType == 'circle') {
lat = savedGeometry.center.lat
lng = savedGeometry.center.lng
for (i = 0; i < savedGeometry.paths.length; i++) {
let a = savedGeometry.paths[i].lat
let b = savedGeometry.paths[i].lng
simplePath.push(new TMap.LatLng(a, b))
}
} else {
lat = savedGeometry.center.lat
lng = savedGeometry.center.lng
for (i = 0; i < savedGeometry.paths.length; i++) {
let a = savedGeometry.paths[i].lat
let b = savedGeometry.paths[i].lng
simplePath.push(new TMap.LatLng(a, b))
}
}
map = new TMap.Map('container', {
zoom: 12, // 设置地图缩放级别
center: new TMap.LatLng(lat, lng), // 设置地图中心点坐标 //当前定位
});
document.querySelector('#container a').style.display = "none"
// 初始化几何图形及编辑器
editor = new TMap.tools.GeometryEditor({
map, // 编辑器绑定的地图对象
overlayList: [ // 可编辑图层
{
overlay: new TMap.MultiPolygon({
map,
styles: {
highlight: new TMap.PolygonStyle({
color: 'rgba(255, 255, 0, 0.6)'
})
},
geometries: [
{
paths: simplePath
},
]
}),
id: savedGeometryType,
selectedStyleId: 'highlight'
}
],
actionMode: TMap.tools.constants.EDITOR_ACTION.INTERACT, // 编辑器的工作模式 查看和修改 的工作模式
activeOverlayId: savedGeometryType, // 激活图层
selectable: true, // 开启点选功能
snappable: false // 关闭吸附
});
// 监听修改结束事件,获取修改几何图形
editor.on('adjust_complete', (geometry) => {
savedGeometryType = editor.getActiveOverlay().id
// 判断当前处于编辑状态的图层id是否是overlayList中id为rectangle(矩形)图层
if (editor.getActiveOverlay().id === 'rectangle') {
// 获取矩形顶点坐标 保存绘制的几何图形
var id = geometry.id;
var geo = rectangle.geometries.filter(function (item) {
return item.id === id;
});
} else if (editor.getActiveOverlay().id === 'circle') {
var id = geometry.id;
var geo = circle.geometries.filter(function (item) {
return item.id === id;
});
savedGeometry = geo[0];
} else {
var id = geometry.id;
var geo = polygon.geometries.filter(function (item) {
return item.id === id;
});
savedGeometry = geo[0];
}
});
渲染保存的几何图,用来修改已经绘制成功的几何图
// 渲染静态地图
function staticMap() {
var lat;
var lng;
var simplePath = [];
if (savedGeometryType == 'polygon') {
lat = savedGeometry.paths[0].lat
lng = savedGeometry.paths[0].lng
for (i = 0; i < savedGeometry.paths.length; i++) {
let a = savedGeometry.paths[i].lat
let b = savedGeometry.paths[i].lng
simplePath.push(new TMap.LatLng(a, b))
}
console.log(simplePath);
} else if (savedGeometryType == 'circle') {
lat = savedGeometry.center.lat
lng = savedGeometry.center.lng
for (i = 0; i < savedGeometry.paths.length; i++) {
let a = savedGeometry.paths[i].lat
let b = savedGeometry.paths[i].lng
simplePath.push(new TMap.LatLng(a, b))
}
} else {
lat = savedGeometry.center.lat
lng = savedGeometry.center.lng
for (i = 0; i < savedGeometry.paths.length; i++) {
let a = savedGeometry.paths[i].lat
let b = savedGeometry.paths[i].lng
simplePath.push(new TMap.LatLng(a, b))
}
}
if (tkxg == 2) {
map = new TMap.Map('container', {
zoom: 12, // 设置地图缩放级别
center: new TMap.LatLng(lat, lng), // 设置地图中心点坐标 //当前定位
});
document.querySelector('#container a').style.display = "none"
} else {
map = new TMap.Map('staticCon', {
zoom: 10, // 设置地图缩放级别
center: new TMap.LatLng(lat, lng), // 设置地图中心点坐标 //当前定位
});
document.querySelector('#staticCon a').style.display = "none"
}
// 初始化几何图形及编辑器
editor = new TMap.tools.GeometryEditor({
map, // 编辑器绑定的地图对象
overlayList: [ // 可编辑图层
{
overlay: new TMap.MultiPolygon({
map,
styles: {
highlight: new TMap.PolygonStyle({
color: 'rgba(255, 255, 0, 0.6)'
})
},
geometries: [
{
paths: simplePath
},
]
}),
id: savedGeometryType,
selectedStyleId: 'highlight'
}
],
activeOverlayId: savedGeometryType, // 激活图层
});
editor.destroy()
}
// 获取当前的不精确定位
function nowDingWei() {
geolocation.getIpLocation(showPosition)
}
function showPosition(position) {
nowLat = position.lat
nowLng = position.lng
}
静态渲染以及获取当前定位
准备工作:
<!-- 绘制围栏 -->
<script charset="utf-8"
src="https://map.qq.com/api/gljs?libraries=tools&v=1.exp&key=NRTBZ-4OFKZ-5FDXV-7XS7F-KW2P2-UABHQ"></script>
<!-- 定位 -->
<script type="text/javascript"
src="https://apis.map.qq.com/tools/geolocation/min?key=NRTBZ-4OFKZ-5FDXV-7XS7F-KW2P2-UABHQ&referer=共享单车"></script>