在谷歌地图上绘制行政区域轮廓【结合高德地图的API】
实现思路:
1.利用高德地图行政区域API获得坐标列表
2.将坐标列表绘制在谷歌地图上【因为高德地图和国内的谷歌地图都是采用GCJ02坐标系,所有误差很小,可以不进行坐标误差转换】
注意点:
1.用百度地图的API来绘制行政区域,不太准确,很不推荐。(1)百度地图查询行政区域本身不准确,有的地方本来应该属于该区,被划分到其他区了(2)即使要用百度api,也要注意转换坐标,因为百度,谷歌坐标系不同。贴段转换代码

var x_pi = Math.PI * 3000.0 / 180.0;
//将 BD-09 坐标转换成 GCJ-02 坐标(例如:百度坐标-->谷歌坐标)
function bd_decrypt(bd_lat, bd_lon) {
var x = bd_lon - 0.0065, y = bd_lat - 0.006;
var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
var gg_lon = z * Math.cos(theta);
var gg_lat = z * Math.sin(theta);
var result = {};
result.gg_lon = gg_lon;//纬度
result.gg_lat = gg_lat;//经度
return result;
}

2.高德地图API文档写的很好,推荐使用高德地图
不完美的地方:
1.高德地图API提供的坐标,不能完整的画出一个区的轮廓,比如上海崇明区的被划分成几个小圈,而实际上,应该用一个大圈把崇明区包裹起来
对应的需求,绘制出上海的所有行政区的轮廓,实现效果:

核心代码:

showBoundarys();
//显示行政区域
function showBoundarys() {
//利用高德地图的【行政区划查询】api获取上海包含的所有区
AMap.service('AMap.DistrictSearch', function() {
var opts = {
subdistrict: 2, ////返回下一级行政区。取值2,可以获取到上海的所有区
extensions: 'all', //返回行政区边界坐标组等具体信息
level: 'city' //查询行政级别为 市
};
//实例化DistrictSearch
var district = new AMap.DistrictSearch(opts);
//行政区查询
district.search("上海市", function(status, result) {
var cityArr = result.districtList[0].districtList[0].districtList;
for(var i=0;i<cityArr.length;i++){
showBoundary(cityArr[i].adcode);
}
})
});
} /**
* 用adcode(区域编码)查询,可以唯一定位到具体的地址。
* 用name(行政区名称)可能查出多个地址,不精确
*/
function showBoundary(adcode) {
//利用高德地图的【行政区划查询】api获取每个区的行政区边界坐标点,再根据这些坐标点在谷歌地图上绘制区域轮廓线
//加载行政区划插件
AMap.service('AMap.DistrictSearch', function() {
var opts = {
subdistrict: 0, //返回下一级行政区
extensions: 'all', //返回行政区边界坐标组等具体信息
level: 'district' //查询行政级别为 市
};
//实例化DistrictSearch
var district = new AMap.DistrictSearch(opts);
district.setLevel('district');
//行政区查询
district.search(adcode, function(status, result) {
var bounds = result.districtList[0].boundaries; if (bounds) {
for (var i = 0, l = bounds.length; i < l; i++) {//每个区域可能有分能几个小块,比如金山区除了有一块陆地圈,还有海上独立的三个小岛
var boundsItem = bounds[i];
var triangleCoords = [];
for(var j = 0; j < boundsItem.length; j++){
triangleCoords.push(new google.maps.LatLng(boundsItem[j].lat, boundsItem[j].lng));
}
var bermudaTriangle = new google.maps.Polygon({
paths : triangleCoords,
strokeColor : "#1c49ff",
strokeOpacity : 0.8,
strokeWeight : 1,
// fillColor : "#FF0000",
fillOpacity : 0,
text:"xxxxx"
});
bermudaTriangle.setMap(map);
map.setZoom(9);
} }
});
});
}

参考网址:

在谷歌地图上绘制行政区域轮廓【结合高德地图的API】的更多相关文章
- iOS开发之在地图上绘制出你运行的轨迹
首先我们看下如何在地图上绘制曲线.在Map Kit中提供了一个叫MKPolyline的类,我们可以利用它来绘制曲线,先看个简单的例子. 使用下面代码从一个文件中读取出经纬度,然后创建一个路径:MKPo ...
- 利用百度API(JavaScript 版)实现在地图上绘制任一多边形,并判断给定经纬度是否在多边形范围内。以及两点间的测距功能
权声明:本文为博主原创文章,未经博主允许不得转载. 利用百度API(JavaScript 版)实现在地图上绘制任一多边形,并判断给定经纬度是否在多边形范围内.以及两点间的测距功能. 绘制多边形(蓝色) ...
- R语言绘图:在地图上绘制热力图
使用ggplot2在地图上绘制热力图 ######*****绘制热力图代码*****####### interval <- seq(0, 150000, 25000)[-2] #设置价格区间 n ...
- R语言绘图:在地图上绘制散点图
使用ggplot2在地图上绘制散点图 ######*****绘制散点图代码*****####### options(baidumap.key = '**************') #设置密钥 bei ...
- echarts在地图上绘制散点图(任意点)
项目需求:在省份地图上绘制散点图,散点位置不一定是哪个城市或哪个区县,即任意点 通过查询官网文档,找到一个与需求类似的Demo:https://www.echartsjs.com/gallery/ed ...
- 记录开发基于百度地图API实现在地图上绘制轨迹并拾取轨迹对应经纬度的工具说明
前言: 最近一直在做数据可视化方面的工作,其中平面可视化没什么难度,毕竟已经有很多成熟的可供使用的框架,比如百度的echart.js,highcharts.js等.还有就是3D可视化了,整体来说难度也 ...
- vue & 百度地图:在地图上绘制多边形
<template> <div class="hello"> <div style="margin-bottom:10px"> ...
- 使用Excel VBA编程将网点的百度坐标转换后标注到高德地图上
公司网点表存储的坐标是百度坐标,现需要将网点位置标注到高德地图上,研究了一下高德地图的云图数据模版 http://lbs.amap.com/yuntu/reference/cloudstorage和坐 ...
- 在高德地图上用svg.js绘制简单图形
这段时间做的一个项目,需要在地图上绘制简单的图形.在学习高德地图JS API的过程中,发现高德地图提供的点.线等API并不能满足我的需求,还好它开放了自定义图层CustomLayer,官方说自定义图层 ...
随机推荐
- 关于c++中char*、char ch[]和string区别
一.字符串指针: char* ch="hello"; 这里的"hello"是字符串常量,是不可以改变的,即通过ch[0]="s"会编译出错. ...
- 【leetcode刷题笔记】Minimum Depth of Binary Tree
Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...
- 如何恢复,迁移,添加, 删除 Voting Disks
如何恢复,迁移,添加, 删除 Voting Disks恢复流程 在11gR2 之前,我们可以直接直接使用dd命令对voting disk进行备份.DD示例 备份votedisk盘:[root@raw1 ...
- js变量和函数提升的小结
对于变量和函数一起的提升说法,我比较认同"LittleBear"的说法. 比如: <script> console.log(a)//function a(){} var ...
- jenkins pipline 用法收集
1.下载多个项目 node { stage('clone'){ dir('test1'){ checkout([$class: 'GitSCM', branches: [[name: '*/maste ...
- selenium webdriver frame操作,跳进跳出
如果有两个平级的frame,跳进一个以后操作完成再操作第二个,这种情况要先跳出来,再跳进另外一个frame 跳出语句:browser.switch_to_default_content() #codi ...
- 基于433MHz无线串口,多发一收解决方案
一.无线发展背景 随着科学技术的飞速发展,智能家居.智慧农业.智慧城市如雨后春笋.而这些行业的发展离不开无线的应用. 传统的有线连接不仅仅是成本高,包括布线安装.维护等也是成本巨大.并且机动性也很差, ...
- 利用Ssocks访问国外网站(yutube/google等)
***开源项目:https://github.com/***/ 本例使用的是针对windows系统的c-sharp版本:https://github.com/***/***-windows 运行*** ...
- Javascript作用域和变量提升
下面的程序是什么结果? var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar(); 结果是10: 那么 ...
- Appium 在 Android UI 测试中的应用
原文地址:https://blog.coding.net/blog/Appium-Android-UI Android 测试工具与 Appium 简介 Appium 是一个 C/S 架构的,支持 An ...