百度地图API生成厦门区级行政区划图
先看效果:
1、引入百度地图API
引入百度地图API所需要的js
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密钥"></script>
2、创建地图
var map = new BMap.Map("allmap");
3、创建Boundary类以获取行政边界(点的集合),并创建多边形覆盖物
关于Boundary类不清楚可以查看官方类参考文档(点这里查看)
var bdary = new BMap.Boundary();
Boundary类具有一个get方法:get(name: String, callback: function),返回行政区域的边界。 name: 查询省、直辖市、地级市、或县的名称。 callback:执行查询后,数据返回到客户端的回调函数,数据以回调函数的参数形式返回。返回结果是一个数组,数据格式如下: arr[0] = “x1, y1; x2, y2; x3, y3; …” arr[1] = “x1, y1; x2, y2; x3, y3; …” arr[2] = “x1, y1; x2, y2; …” … 否则回调函数的参数为null
具体用法(以获取厦门市行政边界为例)
bdary.get("厦门市", function(rs){ //获取行政区域map.clearOverlays(); //清除地图覆盖物 var count = rs.boundaries.length; //行政区域的点有多少个if (count === 0) {alert('未能获取当前输入行政区域');return ;}var pointArray = [];for (var i = 0; i < count; i++) {var ply = new BMap.Polygon(rs.boundaries[i], {strokeWeight: 2, strokeColor: "#ff0000"}); //建立多边形覆盖物map.addOverlay(ply); //将上一步建立的多边形覆盖物添加到地图中pointArray = pointArray.concat(ply.getPath());} map.setViewport(pointArray); //调整视野 ,将整个厦门市调整到地图展示区域});
如此,厦门市的整体界限就展示出来了。
接下来为各个区建立多边形覆盖物并添加到地图。
4、为各个区添加名称
多边形覆盖物上没有显示各区名称,现在需要添加各区的名称。
首先找到各区的中心点(通过百度地图坐标拾取工具(点击这里打开))
p.s. 也可以通过多边形各个点坐标计算中点并进行偏移,为什么不这样做是因为在我的项目中,这些点是固定的(其实边界坐标也是固定的,但是为了记录边界坐标的获取方法,我就另外将获取边界点坐标的方法写出来,实际项目使用时运行一次后通过浏览器F12找到返回的json数据,将边界点坐标另外复制下来。网上另文章有说明如何获取以及坐标转换,大家自行搜一下就有了)。
先写一个添加标签覆盖物的函数
该函数需要传入三个参数,分别是经度、纬度和显示文本
function addlabel(lon,lat,text) {var opts1 = {position : new BMap.Point(lon,lat), // 指定文本标注所在的地理位置}var label1 = new BMap.Label(text, opts1); // 创建文本标注对象label1.setStyle({color : "red",fontSize : "20px",height : "20px",lineHeight : "20px",fontFamily:"微软雅黑",border:"none"});map.addOverlay(label1); //添加覆盖物}
然后调用该函数添加label就行了
至于覆盖物的点击事件,采用addEventListener方法为覆盖物添加点击事件的兼听就行了。
5、全部代码
<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="viewport" content="initial-scale=1.0, user-scalable=no" /><style type="text/css">body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";}</style><script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密钥"></script><title>添加行政区划</title>
</head>
<body><div id="allmap"></div>
</body>
</html>
<script type="text/javascript">// 百度地图API功能var map = new BMap.Map("allmap");function getBoundary(){ var bdary = new BMap.Boundary();bdary.get("厦门市", function(rs){ //获取行政区域map.clearOverlays(); //清除地图覆盖物 var count = rs.boundaries.length; //行政区域的点有多少个if (count === 0) {alert('未能获取当前输入行政区域');return ;}var pointArray = [];for (var i = 0; i < count; i++) {var ply = new BMap.Polygon(rs.boundaries[i], {strokeWeight: 2, strokeColor: "#ff0000"}); //建立多边形覆盖物map.addOverlay(ply); //添加覆盖物pointArray = pointArray.concat(ply.getPath());} map.setViewport(pointArray); //调整视野 //addlabel(); }); bdary.get("思明区", function(rs){ //获取行政区域//map.clearOverlays(); //清除地图覆盖物 var count = rs.boundaries.length; //行政区域的点有多少个if (count === 0) {alert('未能获取当前输入行政区域');return ;}var pointArray = [];for (var i = 0; i < count; i++) {var ply = new BMap.Polygon(rs.boundaries[i], {strokeWeight: 2, strokeColor: "#0000ff"}); //建立多边形覆盖物map.addOverlay(ply); //添加覆盖物pointArray = pointArray.concat(ply.getPath());} addlabel(118.116572,24.470883,"思明区"); }); bdary.get("集美区", function(rs){ //获取行政区域//map.clearOverlays(); //清除地图覆盖物 var count = rs.boundaries.length; //行政区域的点有多少个if (count === 0) {alert('未能获取当前输入行政区域');return ;}var pointArray = [];for (var i = 0; i < count; i++) {var ply = new BMap.Polygon(rs.boundaries[i], {strokeWeight: 2, strokeColor: "#0000ff"}); //建立多边形覆盖物map.addOverlay(ply); //添加覆盖物pointArray = pointArray.concat(ply.getPath());} addlabel(118.003972,24.642993,"集美区"); //map.setViewport(pointArray); //调整视野 //addlabel(); }); bdary.get("湖里区", function(rs){ //获取行政区域//map.clearOverlays(); //清除地图覆盖物 var count = rs.boundaries.length; //行政区域的点有多少个if (count === 0) {alert('未能获取当前输入行政区域');return ;}var pointArray = [];for (var i = 0; i < count; i++) {var ply = new BMap.Polygon(rs.boundaries[i], {strokeWeight: 2, strokeColor: "#0000ff"}); //建立多边形覆盖物map.addOverlay(ply); //添加覆盖物pointArray = pointArray.concat(ply.getPath());} addlabel(118.129582,24.544266,"湖里区"); }); bdary.get("翔安区", function(rs){ //获取行政区域//map.clearOverlays(); //清除地图覆盖物 var count = rs.boundaries.length; //行政区域的点有多少个if (count === 0) {alert('未能获取当前输入行政区域');return ;}var pointArray = [];for (var i = 0; i < count; i++) {var ply = new BMap.Polygon(rs.boundaries[i], {strokeWeight: 2, strokeColor: "#0000ff"}); //建立多边形覆盖物map.addOverlay(ply); //添加覆盖物pointArray = pointArray.concat(ply.getPath());} addlabel(118.254939,24.624478,"翔安区"); //map.setViewport(pointArray); //调整视野 //addlabel(); }); bdary.get("同安区", function(rs){ //获取行政区域//map.clearOverlays(); //清除地图覆盖物 var count = rs.boundaries.length; //行政区域的点有多少个if (count === 0) {alert('未能获取当前输入行政区域');return ;}var pointArray = [];for (var i = 0; i < count; i++) {var ply = new BMap.Polygon(rs.boundaries[i], {strokeWeight: 2, strokeColor: "#0000ff"}); //建立多边形覆盖物map.addOverlay(ply); //添加覆盖物pointArray = pointArray.concat(ply.getPath());} addlabel(118.102394,24.760121,"同安区"); //map.setViewport(pointArray); //调整视野 //addlabel(); }); bdary.get("海沧区", function(rs){ //获取行政区域//map.clearOverlays(); //清除地图覆盖物 var count = rs.boundaries.length; //行政区域的点有多少个if (count === 0) {alert('未能获取当前输入行政区域');return ;}var pointArray = [];for (var i = 0; i < count; i++) {var ply = new BMap.Polygon(rs.boundaries[i], {strokeWeight: 2, strokeColor: "#0000ff"}); //建立多边形覆盖物map.addOverlay(ply); //添加覆盖物pointArray = pointArray.concat(ply.getPath());} addlabel(117.989833,24.511764,"海沧区"); }); }setTimeout(function(){getBoundary();}, 2000);function addlabel(lon,lat,text) {var opts1 = {position : new BMap.Point(lon,lat), // 指定文本标注所在的地理位置}var label1 = new BMap.Label(text, opts1); // 创建文本标注对象label1.setStyle({color : "red",fontSize : "20px",height : "20px",lineHeight : "20px",fontFamily:"微软雅黑",border:"none"});map.addOverlay(label1); //添加覆盖物}
</script>
这种方法应该还存在许多不足之处,如有更好方法欢迎分享!
百度地图API生成厦门区级行政区划图相关推荐
- 百度地图AK申请注意+百度地图API生成热力图+调用百度地图API自动获取经纬度和地址
文章目录 一.百度地图AK密钥申请 二.调用百度地图API生成热力图 三.调用百度地图API自动获取经纬度和地址 一.百度地图AK密钥申请 点击百度地图API控制台,输入登录账户,即可进入,若账户未完 ...
- 数据视化Echarts+百度地图API实现市县区级下钻
开始 这两天公司有个页面需要做数据可视化的展示,数据视化采用的是Echarts+百度地图API做展示,需要用到县级区级下钻的一个联动效果发现网上关于Echarts做到县区级下钻的资料很少,有的话也不是 ...
- 百度地图API快速调用,一键生成百度地图
对于在网站或者网页之内插入百度地图插件,可能很多编程技术人员都知道如何来做,但是做起来所花费的时间都比较长,那么下面跟大家分享一下如何快速调用百度地图API,一件生成百度地图的方法,这种方法适用于任何 ...
- IOS开发百度地图API入门到精通-用点生成路线,导航,气泡响应
(转)IOS开发百度地图API入门到精通-用点生成路线,导航,气泡响应 IOS百度地图API开发自定义气泡,点击气泡自动生成路线,以及拖拽 IOS百度地图开发POISearch搜索附近停车场,附近加油 ...
- IOS开发百度地图API-用点生成路线,导航,气泡响应
原地址:http://blog.sina.com.cn/s/blog_68661bd80101k4rx.html IOS百度地图API开发自定义气泡,点击气泡自动生成路线,以及拖拽 IOS百度地图开发 ...
- 根据地址生成客户地图及热力图(百度地图API)
先看效果图: 使用百度地图API实现,目的很简单,因为经常会分析客户地图,通过客户居住/工作地址,自动生成标记点和热力图,做销售的朋友都懂,这可能是家常便饭. 要用到两个百度的API <scri ...
- 转:IOS开发百度地图API-用点生成路线,导航,气泡响应
IOS百度地图API开发自定义气泡,点击气泡自动生成路线,以及拖拽 IOS百度地图开发POISearch搜索附近停车场,附近加油站 IOS百度地图视角跳到用户当前位置 IOS百度地图开发实时路况 IO ...
- 【百度地图API】建立全国银行位置查询系统(四)——如何利用百度地图的数据生成自己的标注...
摘要: 上一章留个悬念,"如果自己没有地理坐标的数据库,应该怎样制作银行的分布地图呢?" 答案就是,利用百度地图上的数据. ---------------------------- ...
- 使用百度地图API实现地图生成、标记以及标注
首先你需要引入一段javaScript <script type="text/javascript" src="http://api.map.baidu.com/a ...
- java开发百度地图瓦片_百度地图API:利用瓦片生成工具,自定义背景图片
一.制作地图的准备工作 其实,你只需要准备一些地图的瓦片图,就可以了. 用切片工具,把一张完整的图片(最好大一些,清楚一些),切成小片,可使用 TileCutter工具. 二.了解百度地图API的地图 ...
最新文章
- Oracle 11g sys,system 密码忘记设置解决办法
- 2017阿里云TECH INSIGHT干货分享第六届隆重回归
- 大型网站系统架构演化之路(转)
- IM 融云 之 初始化及登录
- 电路知识--认识原理图(四)
- 干货分享|UI设计可临摹编辑的线框素材,还会觉得交互原型画得丑?
- 03python面向对象编程5
- python-numpy.vectorize()
- [图解tensorflow源码] TF系统概述篇
- python Unicode字符与数值转换
- ZOJ1005 Jugs
- 4通道并行同步模拟输入,1MSps、16Bit数据采集卡
- HCIP-DATACOM H12-831(41-60)
- 旧u盘丢失文件如何恢复
- msql中常用的DDL语句
- 孩子一看学习就上瘾,不信试试看(ZT)
- 【转】[中级]我对『PID算法』的理解 —— 原理介绍
- 电脑关机后自动重启开机,或过一段时间自动重启开机问题解决
- 推荐一个基于vue选择头像的库
- Mathematica 解方程组 (数字方程组含表达式的方程组)