在谷歌地图上绘制行政区域轮廓【结合高德地图的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,官方说自定义图层 ...
随机推荐
- 数据库的join查询
假设我们有两张表. Table A 是左边的表. Table B 是右边的表. 其各有四条记录,其中有两条记录是相同的,如下所示: id name id name -- ---- -- ---- 1 ...
- 如何查看myeclipse是否激活
myEclipse---->Subscription information--->Subscription expiration date 看这个日期到什么时候!另外建议别用太高版本的M ...
- 【leetcode刷题笔记】Search a 2D Matrix
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...
- C易位构词(华师网络赛)(错排)
Time limit per test: 2.0 seconds Memory limit: 256 megabytes 易位构词 (anagram),指将一个单词中的字母重新排列,原单词中的每个字母 ...
- 2017-2018-1 20179203 《Linux内核原理与分析》第六周作业
攥写人:李鹏举 学号:20179203 ( 原创作品转载请注明出处) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/US ...
- nodejs调试:node-inspector
基于Chrome浏览器的调试器 既然我们可以通过V8的调试插件来调试,那是否也可以借用Chrome浏览器的JavaScript调试器来调试呢?node-inspector模块提供了这样一种可能.我们需 ...
- influxdb api
https://influxdb-python.readthedocs.io/en/latest/examples.html
- VUE之使用百度地图API
利用vue创建点餐系统,在点餐系统中需要知道商家地址信息,这时就需要借用百度地图API. 步骤一:申请百度地图密钥: 步骤二:在index.html中添加百度地图JavaScript API接口: & ...
- 初始String
--------------siwuxie095 使用频繁操作繁琐的数据有哪些? 对于基本数据类型:int.ch ...
- assert.ok()
测试 value 是否为真值. 相当于 assert.equal(!!value, true, message). 如果 value 不为真值,则抛出一个带有 message 属性的 Assertio ...