在谷歌地图上绘制行政区域轮廓【结合高德地图的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 ...
- 【leetcode刷题笔记】Construct Binary Tree from Preorder and Inorder Traversal
Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that ...
- freeMarker(十六)——FAQ
学习笔记,选自freeMarker中文文档,译自 Email: ddekany at users.sourceforge.net 1.JSP 和 FreeMarker ? 我们比较 FreeMarke ...
- 【跨域】Access-Control-Allow-Origin
- 基于libRTMP的流媒体直播之 AAC、H264 推送
这段时间在捣腾基于 RTMP 协议的流媒体直播框架,其间参考了众多博主的文章,剩下一些细节问题自行琢磨也算摸索出个门道,现将自己认为比较恼人的 AAC 音频帧的推送和解析.H264 码流的推送和解析以 ...
- codeforces914G Sum the Fibonacci
题目大意:给定一个长为$n$($n\leq 10^6$)的序列S,定义一个合法的五元组$(a,b,c,d,e)$合法当且仅当 $$ ( S_a \mid S_b ) and S_c and ( S_d ...
- ACM学习历程—HDU1023 Train Problem II(递推 && 大数)
Description As we all know the Train Problem I, the boss of the Ignatius Train Station want to know ...
- EXPLAIN 命令
MySQL EXPLAIN 命令详解 MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的.这条命令并没有提 ...
- Asp.net工作流workflow实战(一)
最近开发一个项目用到了工作流引擎,之前研究过微软的workflow所有就用它了,距离上次用有一段时间了,好多东西有点模糊了,就在此处一遍写代码一遍回忆. 首先,在我的项目中新建了.netframwor ...
- Java中是构造器创建对象吗?
首先,这里说明” Java中是构造器创建对象 “这句话是完全错误的. Java中构造器的作用主要是为了初始化变量的值...其实在执行构造器之前,Java对象所需要的内存空间,已经产生了... 一般可以 ...