前言

近来由于工作需要,需要提取某些城市的经纬度坐标,稍微搜索了一下,发现百度地图和高德地图都提供了相关的函数和例子.那么剩余的工作也就比较简单了,保存坐标,然后转换为WGS坐标,这样才能和现有的GPS数据以及地图匹配.

主要问题和解决方法

本地保存文件跨浏览器支持

由于安全的原因,JavaScript本地保存文件的方式通常都只有IE支持的ActiveXObject/Open方法,每次都要提示不安全和允许运行,非常麻烦.好在其他浏览器目前都支持标签实现文件下载的方法.经测试最新的Google Chrome, Mozilla Firefox,百度浏览器,360浏览器下都可以运行.不说废话,直接上代码:

function Download() {

// IE

if(/msie/i.test(navigator.userAgent)) {

var w = window.open("", "导出", "height=0,width=0,toolbar=no,menubar=no,scrollbars=no,resizable=on,location=no,status=no");

var filename = document.getElementById("filename").value ;

var content = document.getElementById("content").value;

w.document.charset = "UTF-8";

w.document.write(content);

w.document.execCommand("SaveAs", false, filename+'.txt');

w.close();

}

// Firefox/Chrome/Safari/Opera

else {

var filename = document.getElementById("filename").value ;

var content = document.getElementById("content").value;

str = encodeURIComponent(content);

document.getElementById("SaveChrome").download = filename+'.txt';

var aLink = document.getElementById("SaveChrome") ;

aLink.href = "data:text/csv;charset=utf-8,"+str;

aLink.click();

}

}

跨浏览器保存文件

经纬度转换

这个话题感兴趣的朋友可以自己搜索火星坐标相关转换,精度在1m范围的网上提供有服务可以免费使用.自写程序经验证精度在6m 以内.

百度地图方法

关键函数是 BMap.Boundary() 生成的类,调用它的方法get就可以通过名称获得县或市级以上的行政区域.

function getBoundary() {

var bdary = new BMap.Boundary();

var name = document.getElementById("districtName").value;

bdary.get(name, function (rs) { //获取行政区域

var fileName = "";

var newFileObject = fso.CreateTextFile(folderName + "\\" + name + ".txt", true);

map.clearOverlays(); //清除地图覆盖物

var count = rs.boundaries.length; //行政区域的点有多少个

for (var i = 0; i

var ply= newBMap.Polygon(rs.boundaries[i], { strokeWeight: 2, strokeColor: "#ff0000" }); //建立多边形覆盖物

map.addOverlay(ply); //添加覆盖物

map.setViewport(ply.getPath()); //调整视野

}

newFileObject.write(rs.boundaries[0]);

newFileObject.Close();

});

}

百度提取方法

高德地图

关键代码通过阅读示例文件可以发现在下拉列表返回里面有边界值的出现.

amapAdcode.search = function(adcodeLevel, keyword, selectId) {//查询行政区划列表并生成相应的下拉列表

var me = this;

if (adcodeLevel == 'district'||adcodeLevel == 'city') {//第三级时查询边界点

this._district.setExtensions('all');

} else {

this._district.setExtensions('base');

}

this._district.setLevel(adcodeLevel); //行政区级别

this._district.search(keyword, function(status, result) {//注意,api返回的格式不统一,在下面用三个条件分别处理

var districtData = result.districtList[0];

if (districtData.districtList) {

me.createSelectList(selectId, districtData.districtList);

} else if (districtData.districts) {

me.createSelectList(selectId, districtData.districts);

} else {

document.getElementById(selectId).innerHTML = '';

}

map.setCenter(districtData.center);

me.clearMap();

me.addPolygon(districtData.boundaries);

高德提取方法

其中的districtData.boundaries 就是我们需要的.调试了一下,大胆猜测果然是实现了Tostring() 方法的一个对象. "104.639106,26.863388,104.644771,26.861842,104.64767,26.854997,104.647748..." 很明显的就是我们需要的gcj坐标.

总结

至此,基本也就没有什么问题了,剩余的工作就是解析得到的文件.需要提取全国的数据也就是循环读取全国城市列表文件了.(通常搜索cityname,电脑里面都会找到的,原因,呵呵,猜测是迅雷,QQ之类的IP定位需要吧.)

重要的一点,推荐使用高德地图,原因就是百度地图得到的行政规划有问题,不包含县级市.最典型的就是贵州省,很多地市都是分离的,是带岛或洞的复杂多边形.百度在这里完败.关于怎么处理这里复杂的多边形以支持在MapWinGIS显示和处理,下次会写一篇笔记.

python取省边界_提取行政区边界经纬度坐标(高德+百度)相关推荐

  1. 根据经纬度确定行政区域_基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标...

    前言 近来由于工作需要,需要提取某些城市的经纬度坐标,稍微搜索了一下,发现百度地图和高德地图都提供了相关的函数和例子.那么剩余的工作也就比较简单了,保存坐标,然后转换为WGS坐标,这样才能和现有的GP ...

  2. python 输出纯音频_提取视频中的音频python三行程序搞定

    写在开头 身处数据爆炸增长的时代,各种各样的数据都飞速增长,视频数据也不例外.我们可以使用 python 来提取视频中的音频,而这仅仅需要安装一个体量很小的python包,然后执行三行程序! 语音数据 ...

  3. python取元素_python 如何提取对象内的元素

    python 菜鸟一枚,手上有 一个对象如下 Message(MessageMediaDocument(document=Document(id=620850100255067285, access_ ...

  4. python取列表中位数_详解Python如何获取列表(List)的中位数

    前言 中位数是一个可将数值集合划分为相等的上下两部分的一个数值.如果列表数据的个数是奇数,则列表中间那个数据就是列表数据的中位数:如果列表数据的个数是偶数,则列表中间那2个数据的算术平均值就是列表数据 ...

  5. python取列表中位数_在Python中查找列表的中位数

    Python 3.4有statistics.median : 返回数字数据的中位数(中间值). 当数据点数为奇数时,返回中间数据点. 当数据点的数量是偶数时,通过取两个中间值的平均值来插值中值: &g ...

  6. python取相反数_笔试题python基础总结

    #python a = [1, 2, 3] b=a a.append(4) b.append(5) print(a,b) 输出: [1, 2, 3, 4, 5] [1, 2, 3, 4, 5] > ...

  7. python取反操作_在python中对于bool布尔值的取反操作

    背景 根据公司业务的需求,需要做一个对于mysql数据库的大批量更新.脚本嘛也是干干单单.使用了redis的队列做缓存,可以异步并发的多任务进行更新. 有点难受的地方在于,请求访问时,因为一些网速,速 ...

  8. 用python制作词频图_提取词频,制作词频云图

    [python]代码库import jieba import matplotlib as mpl import matplotlib.pyplot as plt from wordcloud impo ...

  9. python聚类dbscan案例经纬度_用DBSCAN聚类经纬度坐标

    用基于密度的聚类算法,计算坐标点聚集地,很好用. import pandas as pd import numpy as np from sklearn.cluster import DBSCAN f ...

最新文章

  1. Android Studio对于Java8特性的支持
  2. UA MATH523A 实分析1 集合论基础2 序关系与Zorn引理
  3. 电脑计算机无法找到脚本文件夹,win10系统开机出现无法找到脚本文件的设置办法...
  4. 在线计算机多功能,一种多功能组合计算机制造技术
  5. 自动化用户特定实体的访问控制
  6. python使用opencv会蓝屏_Opencv和DirectShow一起做蓝屏抠像
  7. 事业单位入编和没入编的区别是什么?
  8. [转]Windows环境中使用版本管理工具 Git
  9. SLAM_信息矩阵协方差矩阵
  10. atitit.错误:找不到或无法加载主类 的解决 v4 qa15.doc 艾提拉总结 attilax总结 1.1. 修改此java文件,让他启动编译,还是不能生成了新的class, 1 1.2. 查
  11. ARM开发6.3.4 基础实训( 4 ) 两个 LED 显示二位数(动态显示)--LPC21XX
  12. html表单代码有哪些,HTML常用代码有哪些
  13. 使用WePE对无法启动的系统文件进行操作
  14. SEGGER_RTT_printf()函数实现打印浮点、负数-示例
  15. 微信公众号开发清理缓存
  16. 高级语言 和 低级语言 的区别
  17. coldfusion_ColdFusion组件-简介
  18. Android UnitTest
  19. 过滤器与拦截器的区别?
  20. 算法中的一些数学问题分享,ICG游戏

热门文章

  1. (01背包扩展) 算法提高 金明的预算方案
  2. 【OpenCV】 ⚠️实战⚠️ 女子深夜久久不能入眠,300行写出全能扫描王! ☢️建议手收藏☢️
  3. 有关前端性能优化—DNS解析优化的方法?
  4. 软件测试需要什么思维,做软件测试需要学习什么
  5. 小白如何自学编程? 看完这篇这些雷和坑千万不要踩!
  6. python远程聊天_Python实现多人在线匿名聊天的小程序
  7. C#(十三)之字符串string
  8. 古往今来中国最经典的50句名言
  9. 这可能是你能找到最全面的数据预处理介绍
  10. Echarts与bmap结合使用百度地图系统自带的12个个性化模板mapStyle列表