使用Excel VBA编程将网点的百度坐标转换后标注到高德地图上
公司网点表存储的坐标是百度坐标,现需要将网点位置标注到高德地图上,研究了一下高德地图的云图数据模版 http://lbs.amap.com/yuntu/reference/cloudstorage和坐标转换服务http://lbsbbs.amap.com/forum.php?mod=viewthread&tid=724,云数据管理平台http://yuntu.amap.com/datamanager/ ,实现了excel文件的导入,现将实现步骤及使用的一些技巧总结一下:
本地数据导出为高德云图导出模版需要的excel文件
因为需要转为高德地图对应的坐标,高德提供了坐标转换的接口服务(http://lbsbbs.amap.com/forum.php?mod=viewthread&tid=724),我想直接使用excel里的vba编程实现坐标的转换。
上面的文件导出后生成excel文件,红色的是模版必填的内容,蓝色的是选填的,为了后面其它应用的需要,我将对应的code和Id也存入到模版中
Excel VBA编程实现坐标转换
高德提供的坐标转换服务接口:http://restapi.amap.com/v3/assistant/coordinate/convert?locations=116.481499,39.990475&coordsys=baidu&output=Json&key=dd21bdd2263294d9e11b4a9f9d5d6c71
只要传入对应的坐标即可返回高德坐标(coordsys可选值:gps;mapbar;baidu),通过浏览器访问将返回如下格式数据,其中locations值就是对应的高德坐标。
根据这个接口,我使用Excel的VBA编程来实现接口请求和坐标转换,具体实现参考下面的截图
需要引用的对象如上图。
Function BytesToBstr(body, code)
Dim objstream
Set objstream = CreateObject("adodb.stream")
objstream.Type =
objstream.Mode =
objstream.Open
On Error Resume Next
objstream.Write body
On Error GoTo
objstream.Position =
objstream.Type =
objstream.Charset = code
BytesToBstr = objstream.ReadText
objstream.Close
Set objstream = Nothing
End Function Function GetGaoDeLocations(XmlStr As String) As String
Dim objHTTP, xmlDOC Set objHTTP = CreateObject("MSXML2.XMLHTTP")
Set xmlDOC = CreateObject("MSXML.DOMDocument")
strWebserviceURL = "http://restapi.amap.com/v3/assistant/coordinate/convert?coordsys=baidu&output=json&key=dd21bdd2263294d9e11b4a9f9d5d6c71&locations=" & XmlStr
objHTTP.Open "GET", strWebserviceURL, False '默认是POST方式
objHTTP.setRequestHeader "Content-Type", "application/json"
objHTTP.send ("")
'objHTTP.send ("{locations:'" & XmlStr & "'}") 'XmlInput是Ws的参数
GetGaoDeLocations = CStr(BytesToBstr((objHTTP.responseBody), "utf-8")) Dim objSC, strJSON, objJS
strJOSN = GetGaoDeLocations
'调用ScriptControl对象
Set objSC = CreateObject("MSScriptControl.ScriptControl")
strJSON = "var o=" & strJOSN & ";"
objSC.Language = "javascript"
objSC.AddCode (strJSON)
Set objJS = objSC.CodeObject.o
GetGaoDeLocations = objJS.locations End Function
VBA里的代码如上,实现接口请求及返回值的处理。
通过拖动实现文本框内容的自动填充,拖动过程中,就自动去调用接口返回对应的高德坐标。
经过一番坐标转换后,需要再将返回值分割成经度和纬度分别填充到X,Y列。关于字符串分割,参考下面的方法:取左侧经度=LEFT(C2,FIND(",",C2)-1),取右侧纬度的=RIGHT(C2,LEN(C2)-LEN(D2)-1)
怎么样可以从一串字符中的某个指定位置的前或后截取指定个数的字符. 如:12345.6789,我要截取小数点前(或后)的3个字符.怎么样操作, 另外,怎么样从右边截取字符,就是和left()函数相反的那个功能. =find(".",a2)
返回在数字中字符(小数点)的位置。 具体公式如下:
字符(小数点)前三位
=MID(A2,FIND(".",A2)-3,3) 字符(小数点)后三个
=MID(A2,FIND(".",A2)+1,3) 字符(小数点)前面的所有数字 =LEFT(A2,FIND(".",A2)-1) 字符(小数点)后面的所有数字 =RIGHT(A2,FIND(".",A2)-2) 以上均为不包括“字符”的情况。其它情况只需改变一下红色数字大小。
Excel文件上传到高德云图
使用Excel VBA编程将网点的百度坐标转换后标注到高德地图上的更多相关文章
- excel VBA 编程
Dim cuttent_columns As Integer Dim care_repeat As Integer Private Sub Workbook_Open() Dim i As Integ ...
- Android 编程 AMapLocationClientOption 类中的 setNeedAddress 方法用处 (高德地图 com.amap.api.location.AMapLocationClientOption 中的类)
最近在用高德地图来写Android App, 其中有一些 方法是不太理解的,这里写一下 对 高德地图 com.amap.api.location.AMapLocationClientOption ...
- Excel VBA 教程
https://www.w3cschool.cn/excelvba/ Excel VBA 编程教程 https://www.yiibai.com/vba VBA教程 http://www.acc ...
- 【百度地图API】建立全国银行位置查询系统(三)——如何在地图上添加银行标注
原文:[百度地图API]建立全国银行位置查询系统(三)--如何在地图上添加银行标注 <摘要>你将在第三章中学会以下知识: 如何在地图上添加带银行logo的标注?(你也可以换成商场logo, ...
- 百度地图和高德地图坐标系的互相转换 四种Sandcastle方法生成c#.net帮助类帮助文档 文档API生成神器SandCastle使用心得 ASP.NET Core
百度地图和高德地图坐标系的互相转换 GPS.谷歌.百度.高德坐标相互转换 一.在进行地图开发过程中,我们一般能接触到以下三种类型的地图坐标系: 1.WGS-84原始坐标系,一般用国际GPS纪录仪记 ...
- 记录开发基于百度地图API实现在地图上绘制轨迹并拾取轨迹对应经纬度的工具说明
前言: 最近一直在做数据可视化方面的工作,其中平面可视化没什么难度,毕竟已经有很多成熟的可供使用的框架,比如百度的echart.js,highcharts.js等.还有就是3D可视化了,整体来说难度也 ...
- js不同地图坐标系经纬度转换(天地图,高德地图,百度地图,腾讯地图)
1.js转换代码 1 //转换常数 2 var x_pi = 3.14159265358979324 * 3000.0 / 180.0; 3 var pi = 3.14159265358979324; ...
- 来吧!带你玩转 Excel VBA
来吧!带你玩转 Excel VBA 从错失良机到艰辛的DOS征程,从坎坷购机自学路到转机起程,从爱好到事业,他从一个完全不懂电脑的人到VBA高级应用者,一切全是自学…… 我是罗刚君,来自四川的一个小县 ...
- 2017-5-29 Excel VBA 小游戏
---恢复内容开始--- 转一个Excel VBA的小游戏,最近对excel有了更深入的了解,功能很强大,也刷新了我对待事情的态度. 一.准备界面 我们先来把游戏界面准备好,选中前4行,行高调成50, ...
随机推荐
- [转]当CPU飙高时,它在做什么
在开发过程中,有时候我们发现JVM占用的CPU居高不下,跟我们的预期不符,这时,CPU在做什么呢?是什么线程让CPU如此忙碌呢?我们通过如下几步,可以查看CPU在执行什么线程. 1.查找jvm进程ID ...
- js 控制随机数生成概率
基本思路:把Math.random()生成的数看着百分比,然后定义每个整数值取值范围. 'use strict'; export default class GL { /** * 构造函数 * @pa ...
- 解决html代码文本复制问题,js技术
实例代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <scr ...
- Dynamics 365-关于Solution的那些事(二)
接着上一篇的说,现在有一个已知前提:Solution的增量特性.然后我们再思考这么一个场景,项目开发过程中,存在多次迭代的情况,每次迭代可能涉及到的solution是同一个,唯一区别的,就是solut ...
- Android 字体适配方案
开发过程中,按照UI设计尺寸做好UI页面,当用户自定义自己的手机字体大小之后UI完全没法看了,这个时候就在想让app字体大小始终一致就好了 下面看一下,出现的问题和解决方案 做个简单的例子,先 ...
- VUE新版扫码下单必选分类设置FAQ
使用场景:商家想要设置某些分类下的商品设置必选,否则不能下单.如某火锅店,商家想要设置汤底这个分类下的商品,顾客扫码下单的时候必须选择一份才能下单,此时 就可以使用这个功能 配置步骤和注意事项如下: ...
- 我们距离AI编程还有多远?
近几年来,人工智能的信息以不同形式霸占着我们的眼球,我们知道AlphaGo.微软小冰.Sophia,了解过自动驾驶.无人机.智能家居等,深知人工智能是在记忆力.学习力.运算力方面都远超人类的存在,但人 ...
- hbase 预分区与自动分区
我们知道,HBASE在创建表的时候,会自动为表分配一个Region,当一个Region过大达到默认的阈值时(默认10GB大小),HBase中该Region将会进行split,分裂为2个Region,以 ...
- mysql 基础sql语句
1.mysqladmin语句: # 查看mysql版本 mysqladmin version # 更改root用户密码 mysqladmin -u root -p原密码 password '新密码 ...
- 【原】无脑操作:EasyUI Tree实现左键只选择叶子节点、右键浮动菜单实现增删改
Easyui中的Tree组件使用频率颇高,经常遇到的需求如下: 1.在树形结构上,只有叶子节点才能被选中,其他节点不能被选中: 2.在叶子节点上右键出现浮动菜单实现新增.删除.修改操作: 3.在非叶子 ...