技术标签: WEB
关于目前(2019)电子设备和电子地图定位的探索,希望可以回答如下几个问题:
答:中国地图采用的坐标系和GPS坐标不是同一个坐标系,所以采用GPS坐标在地图上定位不准。
答:GPS是美国的导航系统,全球通用,手机内置的芯片都是GPS芯片,没有差别。不同的地方是地图有着不同的GPS坐标系。
答:借用百度的说明如下:
WGS84:为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系。
GCJ02:又称火星坐标系,是由中国国家测绘局制定的地理坐标系统,是由WGS84加密后得到的坐标系。
BD09:为百度坐标系,在GCJ02坐标系基础上再次加密。其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标。
链接:http://lbsyun.baidu.com/index.php?title=coordinate
坐标系是在一个系统中的参考坐标系,所以在同一个系统内不存在问题。例如,如果需要获取某一个地图上的位置,通过地图SDK就可以获得地图坐标系的位置,不存在问题。(例如,你一直都是用百度地图,定位也是通过地图定位,那么没有任何问题)如果希望在不同的坐标系上使用,必须经过转换。最好的办法是,统一采用同一个地图,不切换坐标系。例如做国内系统,用百度地图,高德地图都可以。如果做国际项目,那么最好建议采用Google地图,国外地图数据最完整,其次是百度。
Google国内外访问地址,key需要在google账号中申请(目前需要梯子)
国内:https://ditu.google.cn/maps/api/js?key=
国外:https://maps.google.com/maps/api/js?key=
关于坐标系转换,参考百度文档:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/coordtrans
缘起,首先来看一个问题,一个朋友在柬埔寨通过GPS软件获得一个GPS位置,发现和实际位置不准的问题,赶快查询了一下,“果然不准确”。
网上各种方法,代码,工具,理论等等……看来这个问题还很普遍嘛,可是随着我的深入查找资料和验证,发现不对!下面我们听我慢慢细说。
关于坐标系查询,可以通过http://www.gpsspg.com/maps.htm网站查询。同时我可以发现这个网站可以通过国界线区分坐标系的换算,而网上不少代码均是通过经纬度范围简单的判断是否在中国境内,对于中国周边国家会存在问题,估计有问题。不过该网站的谷歌地图坐标有问题,估计是老版本的地图,而且也打不开google地图。
上图为中国云南边境
上图为中国与缅甸交界的地方。
Google地图(国际版)GPS坐标定位工具:
https://www.gps-coordinates.net
该工具可以在google地图(国际版本)上根据GPS定位,而且下发写着坐标系是WGS48。经过实际对比发现Google地图,对于中国境内采用的依然是GCJ-20坐标系。
为了验证Google地图在国内的位置依然是GCJ-20坐标系,我采用下面的方法得出的结论(有兴趣的朋友继续阅读)。
如何判断GPS坐标是WGS-48,还是GCJ-20坐标体系呢?
我发现,通过iPhone的指南针的经纬度,如果直接换算为Google地图的坐标进行设置时发现,和实际位置不相符(国内),通过Android 三款软件进行数据采集发现有相同位置不同软件具有两种经纬度信息:
GPS定位导航采用的GCJ-02坐标
GPS定位工具箱采用的也是GCJ-02坐标
GPS实时海拔采用的是WGS-84,和iPhone指南针相同的数据。
注意:表面上看,并不能确认软件采用的具体坐标系(无法通过数值区分),而是通过比较得出的结论。
我写作位置的GPS位置数据分别如下:
序号 | 采集设备/程序 | 纬度 | 经度 | 纬度 | 经度 |
---|---|---|---|---|---|
1 | iPhone/指南针 | 北纬28°15’18’’ | 东经113°4’27’’ | 28.255 | 113.0741666667 |
2 | iPhone/GPS讯号 | 28.255055 | 113.074167 | ||
3 | 坚果手机/GPS实时海拔 | 北纬28°15’18’’ | 东经113°4’26’’ | 28.255 | 113.0738888889 |
4 | 坚果手机/GPS定位导航 | 28.251874 | 113.079874 | ||
5 | 坚果手机/GPS定位工具箱 | 28.251877 | 113.079878 |
如果把上述地址在https://www.gps-coordinates.net网页上输入,发现可以准确定位的是上表的4,5!是不是1,2,3。上面工具的网站声称采用WGS-48坐标系,而且Google Map英文文档也是采用WGS-48坐标系,那么是否可以推论4, 5就是WGS-48坐标系呢?
经过我的论证,他们恰恰不是WGS-48,而是GCJ-02!
为了论证这个设备的数值到底是哪种坐标系,煞费苦心。
后来发现百度地图的文档上说明,百度采用BD09LL坐标系,而且具有WGS-48,GCJ-02坐标转换接口,所以我对上述采集的数据通过以上两个转换方法对位置进行转换,得到百度的坐标系,然后在百度的坐标定位工具(http://api.map.baidu.com/lbsapi/getpoint/index.html)中定位,确认实际是否位置一致。
经过测试发现如下结论:
序号 | 经度 | 纬度 | WGS48->BD09经度 | WGS48->BD09纬度 | GCJ02->BD09经度 | GCJ02->BD09纬度 | 位置一致坐标类型 |
---|---|---|---|---|---|---|---|
1 | 28.255 | 113.0741666667 | 113.08658610 | 28.25765828 | 113.08069003 | 28.26092783 | WGS48 |
2 | 28.255055 | 113.074167 | 113.08658632 | 28.25771306 | 113.08069031 | 28.26098281 | WGS48 |
3 | 28.255 | 113.0738888889 | 113.08630670 | 28.25766231 | 113.08041105 | 28.26093265 | WGS48 |
4 | 28.251874 | 113.079874 | 113.09232310 | 28.25445936 | 113.08642390 | 28.25770832 | GCJ02 |
5 | 28.251877 | 113.079878 | 113.09232718 | 28.25446229 | 113.08642791 | 28.257711260 | GCJ02 |
curl "http://api.map.baidu.com/geoconv/v1/?coords=113.0741666667,28.255&from=1&to=5&ak=hfyzyfi3dAG8dRE3GBTmiqrvpt6ZEr5j"
curl "http://api.map.baidu.com/geoconv/v1/?coords=113.0741666667,28.255&from=3&to=5&ak=hfyzyfi3dAG8dRE3GBTmiqrvpt6ZEr5j"
注意:http://www.gpsspg.com/maps.htm网站的Google地图已经失效(2019.7)。
关于坐标系的图示理解:
上图解释了,通过相同坐标系就不会有问题。
文章浏览阅读629次。简介Git,目前使用最为广泛的分布式版本控制系统,由Linux之父Linus Benedict Torvalds开发。所谓的分布式版本控制系统,其实是一种管理我们代码的软件。试想,在开发过程中,我们的代码可能会经过多次迭代,版本一多,自然混乱;对于一些用不上但又不敢直接删除的的早期代码,新建文件保存或打上注释标记又太麻烦……此外,在团队协作中每个人的改动、进度的同步也是难以处理的事情。而以..._git status -uno
文章浏览阅读1.1k次,点赞11次,收藏11次。cursor,font,tooltip,focuspolicy,stylesheet的使用
文章浏览阅读957次。本文转载,尊重原创!受益良多!点击打开链接最近,有同事向我多次问及C++关于编译链接方面的问题,包括如下:1:什么样的函数以及变量可以定义在头文件中2:extern "C"的作用3:防止重复包含的宏的作用4:函数之间是怎么链接起来的我认为,这些问题不难,书上基本上都有,但要是没有真正思考过,就凭死记硬背,也就是只能“嘴上说说”而已,遇到问题还真棘手,所以我觉得有_/home/runner/temp/41256961.42894/main.cc: in function ‘int main()’:
文章浏览阅读8.1k次,点赞14次,收藏17次。第一步:查看错误日志打开cmd运行seata-server.bat查看错误信息Error: missing server' JVl at C:\ Program Files (x86)\ Javaljre1. 8. 0_221\ bin\ server \ jvn. d11Please instal1 or use the TRE or TDK that contains these missing components找到出错目录搜索jvm.dll在bin文件夹新_seata-server.batshantui
文章浏览阅读6.4k次。service的实现主要有两种方式,一种是onStart方式,另一种是onBoundd方式。两种方式的关于service的生命周期不一样。前者是和activity的生命周期一样的,后者则不是。activity结束了service可以继续运行。onStart 方法来调用service的话,调用者其实和service是没有关系的,调用者消亡了的话,service是依然可以继续运行的;onB_service的onstart方法
文章浏览阅读302次。数智化转型的目的和核心都是实现业务转型、创新和增长,而我们的基石就是数智化技术。企业做数智化转型,需要什么样的数智化人才?员工要具备哪些能力才能助力企业完成转型?这样的员工该如何培养......首先我们来看下都有哪些数智化人才,以及他们分别需要什么能力。第一类人才是数字化专业人才,他们的主要任务是发现企业业务上的问题、并利用科学技术创造性的解决问题。对于专业人才来说,他需要有技术能力、产品能力、运营能力以及项目管理能力,具体解释为:技术能力:系统或平台规划与设计、开发与建设等_数智化落地,需要专业能力
文章浏览阅读5.3k次,点赞3次,收藏52次。问题描述理发店问题:假设理发店的理发室中有 3 个理发椅子和 3 个理发师,有一个可容纳4个顾客坐等理发的沙发。此外还有一间等候室,可容纳13位顾客等候进入理发室。顾客如果发现理发店中顾客已满(超过 20 人),就不进入理发店。在理发店内,理发师一旦有空就为坐在沙发上等待时间最长的顾客理发,同时空出的沙发让在等候室中等待时间最长的的顾客就坐。顾客理完发后,可向任何一位理发师付款。但理发店只有一本..._设理发店的理发室中有 3 个理发椅子和 3 个理发师,有一个可容纳
文章浏览阅读553次。其实我在TF-IDF和gensim实现主题提取写过LDA关于LDA的理论相关知识以后有机会阐释import numpy as npfrom gensim import corpora,models,similaritiesfrom pprint import pprint #打印出来的更好看1.构建停用词列表def load_stopword(): f_stop=open('stopword.txt') sw=[line.strip() for line in f_stop]
文章浏览阅读9.7k次。ionic5+agular8混合移动开发(一)——环境搭建1、首先安装nodejs,本次安装的是v10.16.02、解决国内连接下载npm包慢,可以配置淘宝镜像3、创建App并运行1、首先安装nodejs,本次安装的是v10.16.01.0 下载nodejs最新稳定版,下载地址如下:https://nodejs.org1.1 安装下载的node-v10.16.0-x64.msi1.2 ..._ionic新建项目指定angular的版本
文章浏览阅读1.5k次。Python人工智能20个小时玩转NLP自然语言处理【黑马程序员】_哔哩哔哩_bilibili目的:对不同的输入图像进行识别并分类。采用CIFAR10数据集,进行单分类任务_.join('%5s' % classes[predicted[j]是啥意思
文章浏览阅读3w次,点赞30次,收藏70次。#1965 cannot open source file "DSP2833x_Device.h"1. 现象2. 原因分析3. 解决措施1. 现象当使用CCS进行编译会出现如下错误。2. 原因分析因为.h文件所存放的地址与CCS中的默认位置不同引起。CCS编译器在其默认存放.h文件的地方寻找文件,但是没有找到,就会报错。源文件引用的.h文件确实不存在,当引用的头文件与意图引起的头文件..._descriptionresourcepathlocationtype #1965 cannot open source file "dsp28
文章浏览阅读1k次。/** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */public static int dip2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpV_public class dporpxutils { public static int dip2px(context context, floa...