1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标

基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标

时间:2023-11-02 13:48:45

相关推荐

基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标

web前端|js教程

JavaScript,高德地图,百度地图

web前端-js教程

基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标_javascript技巧

微信小程序签到源码,vscode如何调试小程序,ubuntu 怎么重启,tomcat缓存文件在哪,爬虫软件报价,php过滤乱码,seo正确优化方法推广渠道,淘宝网站asp源码下载,虚拟币交易网站模板lzw

前言

安卓侧滑源码,vscode 安装 组件,ubuntu域,tomcat 部署 安全,sqlite不支持日期,小米三插件,前端四大框架,抖音直播爬虫采集软件,php的执行过程,seo营销技巧视频,社交网站代码,网页 计算器,服务明星模板lzw

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

asp制作考试系统源码,ubuntu下载地址 大学,tomcat加入到服务器,python豆瓣爬虫程序,centos7安装php7.5,seo前景问题lzw

主要问题和解决方法

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

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

function Download() {// IEif(/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/Operaelse {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 < count; i++) {var ply = new BMap.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(ase);}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显示和处理,下次会写一篇笔记.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。