百度地图(2)——绘出小区边界

2023-10-17 16:20

本文主要是介绍百度地图(2)——绘出小区边界,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

效果图:

HTML:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Bmap_test</title><script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你自己的ak"></script><!-- <script type="text/javascript" src="http://api.map.baidu.com/library/IndoorMap/1.0/src/indoor.min.js?v=1.0.1 "></script> --><script type="text/javascript" src="./jQuery-1.10.2.js"></script><script type="text/javascript" src="./demo.js"></script>
</head>
<body><div id="contain" style="width: 100%;height: 500px;"></div>
</body>
</html>

js:

window.onload = function(){var contain = document.getElementById('contain');// 初始化地图var map = new BMap.Map(contain);var top_left_navigation = new BMap.NavigationControl();  //左上角,添加默认缩放平移控件var top_left_control = new BMap.ScaleControl({anchor: BMAP_ANCHOR_TOP_LEFT});// 左上角,添加比例尺map.addControl(top_left_control);map.addControl(top_left_navigation);// 设置中心点坐标和地图级别var center = new BMap.Point(113.270506,23.135308); //滨河花园113.7456,27.639319map.centerAndZoom(center,19);map.enableScrollWheelZoom(true); // 开启鼠标滚轮缩放//小区名称var XQ = '竹园小区';//保存小区边界的经纬度var boundaryPoints = {lng: [],lat: [],lngMin: 0,lngMax: 0,latMin: 0,latMin: 0,}//保存过滤后的poisvar filterPoisPoints = [];/*** 根据中心点获取当前小区的uid*/var getLocalUid = function(){var local = new BMap.LocalSearch(map, {renderOptions:{map: map}});local.setMarkersSetCallback(function(pois){map.clearOverlays();console.log(pois);//画小区边界var uid = pois[0].uid;drowBoundary(uid,pois);})local.search(XQ);};/*** 根据获取到的uid,获取小区边界坐标集合,画多边形*/var drowBoundary = function(uid,pois){$.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:function(result) {var content = result.content;if(content.geo != null && content.geo != undefined){var geo = content.geo;var points = coordinateToPoints(geo);//point分组,得到多边形的每一个点,画多边形if (points && points.indexOf(";") >= 0) {points = points.split(";");} var arr=[];for (var i=0;i<points.length-1;i++){var temp = points[i].split(",");arr.push(new BMap.Point(parseFloat(temp[0]),parseFloat(temp[1])));boundaryPoints.lng.push(parseFloat(temp[0]));boundaryPoints.lat.push(parseFloat(temp[1]));}//创建多边形var polygon = new BMap.Polygon(arr, {strokeColor: "blue",strokeWeight: 2,strokeOpacity: 0.5,});map.addOverlay(polygon);   //增加多边形map.setViewport(polygon.getPath());    //调整视野}else{console.log('暂无小区边界信息');}//获取小区边界最大最小经纬度getboundaryMinMaxLngLat(boundaryPoints);//过滤pois,去掉不在小区里边的点filterPois(pois);//重新撒下小区中的点for(var i=0;i<filterPoisPoints.length;i++){var marker = new BMap.Marker(filterPoisPoints[i].point);map.addOverlay(marker);//闭包给每个marker添加点击事件(function(i){marker.addEventListener('click',function(){console.log(filterPoisPoints[i].title)});})(i);}},timeout:3000});};/*** 百度米制坐标转为经纬度*/var coordinateToPoints = function(coordinate) { var points ="";if (coordinate) {var projection = BMAP_NORMAL_MAP.getProjection();if (coordinate && coordinate.indexOf("-") >= 0) {coordinate = coordinate.split('-');}//取点集合var tempco = coordinate[1];if (tempco && tempco.indexOf(",") >= 0) {tempco = tempco.replace(";","").split(",");}//分割点,两个一组,组成百度米制坐标var temppoints=[];for(var i = 0, len = tempco.length; i < len; i++){var obj = new Object(); obj.lng=tempco[i];obj.lat=tempco[i+1];temppoints.push(obj);i++;}//遍历米制坐标,转换为经纬度for ( var i = 0, len = temppoints.length; i < len; i++) {var pos = temppoints[i];var point = projection.pointToLngLat(new BMap.Pixel(pos.lng, pos.lat));points += ([ point.lng, point.lat ].toString() + ";");}}return points;}/*** 获取小区边界最大最小经纬度*/var getboundaryMinMaxLngLat = function(boundaryPoints){if (boundaryPoints && boundaryPoints.lng.length && boundaryPoints.lat.length) {boundaryPoints.lngMin = Math.min.apply(null,boundaryPoints.lng);boundaryPoints.lngMax = Math.max.apply(null,boundaryPoints.lng);boundaryPoints.latMin = Math.min.apply(null,boundaryPoints.lat);boundaryPoints.latMax = Math.max.apply(null,boundaryPoints.lat);}};/*** 过滤pois,去掉不在小区里边的点*/var filterPois = function(pois){if (pois && pois.length && boundaryPoints && boundaryPoints.lng.length && boundaryPoints.lat.length &&boundaryPoints.lngMin != 0 && boundaryPoints.lngMax != 0 &&boundaryPoints.latMin != 0 && boundaryPoints.latMax != 0) {for (var i = pois.length - 1; i >= 0; i--) {if(pois[i].point.lng > boundaryPoints.lngMin && pois[i].point.lng < boundaryPoints.lngMax && pois[i].point.lat > boundaryPoints.latMin && pois[i].point.lat < boundaryPoints.latMax){filterPoisPoints.push(pois[i]);}}}console.log('过滤后小区内坐标')console.log(filterPoisPoints)};getLocalUid();
}

缺点:有些小区没有数据,无法描绘小区边界!

需求: 获取小区中的楼盘经纬度,从而描绘出小区楼盘效果图!

希望有哪位大佬能帮我实现这个愿望呢?????

 

 

这篇关于百度地图(2)——绘出小区边界的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/226532

相关文章

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

Python利用GeoPandas打造一个交互式中国地图选择器

《Python利用GeoPandas打造一个交互式中国地图选择器》在数据分析和可视化领域,地图是展示地理信息的强大工具,被将使用Python、wxPython和GeoPandas构建的交互式中国地图行... 目录技术栈概览代码结构分析1. __init__ 方法:初始化与状态管理2. init_ui 方法:

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

使用Folium在Python中进行地图可视化的操作指南

《使用Folium在Python中进行地图可视化的操作指南》在数据分析和可视化领域,地图可视化是一项非常重要的技能,它能够帮助我们更直观地理解和展示地理空间数据,Folium是一个基于Python的地... 目录引言一、Folium简介与安装1. Folium简介2. 安装Folium二、基础使用1. 创建

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

全英文地图/天地图和谷歌瓦片地图杂交/设备分布和轨迹回放/无需翻墙离线使用

一、前言说明 随着风云局势的剧烈变化,对我们搞软件开发的人员来说,影响也是越发明显,比如之前对美对欧的软件居多,现在慢慢的变成了对大鹅和中东以及非洲的居多,这两年明显问有没有俄语或者阿拉伯语的输入法的增多,这要是放在2019年以前,一年也遇不到一个人问这种需求场景的。 地图应用这块也是,之前的应用主要在国内,现在慢慢的多了一些外国的应用场景,这就遇到一个大问题,我们平时主要开发用的都是国内的地

Imageview在百度地图中实现点击事件

1.首先第一步,需要声明的全局有关类的引用 private BMapManager mBMapMan; private MapView mMapView; private MapController mMapController; private RadioGroup radiogroup; private RadioButton normalview; private RadioBu