百度地图(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

相关文章

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

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

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

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

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

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

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

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

MMO地图传送

本篇由以下四个点讲解: 创建传送点 传送点配置 编辑器扩展:传送点数据生成 传送协议与实现 创建传送点 建碰撞器触发 //位置归零 建一个传送门cube放到要传送的位置(这个teleporter1是传出的区域 这是从另一张地图传入时的传送门 创建一个脚本TeleporterObject给每个传送cube都绑上脚本 通过脚本,让传送门在编辑器下面还能绘制出来

Rhinoceros 8 for Mac/Win:重塑三维建模边界的革新之作

Rhinoceros 8(简称Rhino 8),作为一款由Robert McNeel & Assoc公司开发的顶尖三维建模软件,无论是对于Mac还是Windows用户而言,都是一款不可多得的高效工具。Rhino 8以其强大的功能、广泛的应用领域以及卓越的性能,在建筑设计、工业设计、产品设计、三维动画制作、科学研究及机械设计等多个领域展现出了非凡的实力。 强大的建模能力 Rhino 8支持多种建

百度之星 2015 复赛 1001 (数长方形)

数长方形    Accepts: 595    Submissions: 1225  Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description 小度熊喜欢玩木棒。一天他在玩木棒的时候,发现一些木棒会形成长方形

百度之星 2015 初赛(1) 1002 找连续数

找连续数      Accepts: 401      Submissions: 1911  Time Limit: 2000/1000 MS (Java/Others)      Memory Limit: 32768/32768 K (Java/Others) Problem Description 小度熊拿到了一个无序的数组,对于这个数组,小度熊想知道是

百度之星初赛1002(二分搜索)

序列变换    Accepts: 816    Submissions: 3578  Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description 给定序列 A={A1,A2,...,An} , 要求改变序列A中

百度之星初赛1006(计算几何:能包含凸包的最小矩形面积)

矩形面积    Accepts: 717    Submissions: 1619  Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description 小度熊有一个桌面,小度熊剪了很多矩形放在桌面上,小度熊想知道能把这些