博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GPS坐标换算为百度坐标
阅读量:5334 次
发布时间:2019-06-15

本文共 3739 字,大约阅读时间需要 12 分钟。

转自博文《GPS坐标换算为百度坐标》:

  查看 百度地图API > 常见问题 下看到这么一条关于 坐标体系:

  4.1 坐标体系是否遵循国家对地理信息保密要求?

  百度对外接口的坐标系,都是经过国家测绘局加密处理,符合国家测绘局对地理信息保密要求。

  4.2 百度采用何种坐标体系?

  百度地图api中采用两种坐标体系,经纬度坐标系和墨卡托投影坐标系。前者单位是度,后者单位是米,具体定义可以参见百科词条解释:

  和。

  4.3 百度坐标为何有偏移?

  国际经纬度坐标标准为WGS-84,国内必须至少使用国测局制定的GCJ- 02,对地理位置进行首次加密。百度坐标在此基础上,进行了BD-09二次加密措施,更加保护了个人隐私。百度对外接口的坐标系并不是GPS采集的真实经 纬度,需要通过坐标转换接口进行转换。      

  4.4 如何从其他体系的坐标迁移到百度坐标?

  坐标转换接口非公开。请将您的公司名称、项目名称、项目简介、联系人和联系方式,发邮件至mapapi@baidu.com咨询。有专人为您解答。

  也就是说由于受到国家一些法律法规限制,所有的电子地图服务提供商都需要给地图 数据加上偏移和加密,所谓的地图数据加密偏移,其实就是用一个偏移算法对地图的经纬度做一个加减偏移量,从而达到与实际地图不一致。这个偏移算法本身是没 有什么规律可言的,每家地图服务商都有一套自己的加密偏移算法,既然算法上没有什么规律可言,但是对于算法中生成的偏移量是否有规律呢?这个是可以肯定 的,但是偏移算法中生成的偏移量是有规律而言的。偏移量的规律很难得到,要是能拿到这个偏移量,就可以说是破解了某一个地图服务商的地图加密。

   所以百度对外提供的坐标系是百度自己的坐标系,而手机GPS获得的是原始坐标,两者不在一个坐标系上,所以有很大的误差,我测试了一下,误差在千米之 外。所以必须得把两者换成统一坐标系。换成原始GPS坐标在国内原则上是违法的,所以只能统一成各个地图运营商自己的坐标系,比如百度坐标系或者 google坐标系。

  如何转换成百度坐标系:官方文档给的是:坐标转换接口非公开。于是我开始搜搜“GPS坐标转换为百度坐标”结果不负有心人呐终于找到了解决方案,特来此贴出来我整理的代码。

  百度地图坐标转换接口如下:  

  BMap.Convertor.translate(gpsPoint,0,translateCallback);     //真实经纬度转成百度坐标

  其中gpsPoint var gpsPoint = new BMap.Point(经度,纬度); ( GPS坐标)    0:代表GPS,也可以是2:google坐标    translateCallback:回掉函数

     下面是完整的测试GPS坐标转换百度坐标JS源码

 

GPS转百度

找到百度的API转换方法为:

    

    其中:

    from: 来源坐标系   (0表示原始GPS坐标,2表示Google坐标)
      to: 转换后的坐标   (4就是百度自己啦,好像这个必须是4才行)
        x: 经度
            y: 纬度
            返回的结果是一个json字符串:
           {"error":0,"x":"MTIxLjUwMDIyODIxNDk2","y":"MzEuMjM1ODUwMjYwMTE3"}

            其中:

            error:是结果是否出错标志位,"0"表示OK
            x: 百度坐标系的经度(Base64加密)
            y: 百度坐标系的纬度(Base64加密)

在WP8中测试源码都已加注释,不再一一解释,直接上源码

前台XAML页面:

后台XAML.cs

using System;using System.Collections.Generic;using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Navigation; using Microsoft.Phone.Controls; using Microsoft.Phone.Shell; using System.IO; using Newtonsoft.Json; using Windows.Devices.Geolocation; using System.Text; using System.Windows.Media.Imaging; namespace Crystal.Phone.App.Page { public partial class BaiduMapConvert : PhoneApplicationPage { public BaiduMapConvert() { InitializeComponent(); } private async void btnConvert_Click_1(object sender, RoutedEventArgs e) { Geolocator geo = new Geolocator(); //判断是否开启了GPS定位 if (geo.LocationStatus == PositionStatus.Disabled) { MessageBox.Show("尚未开启位置服务!"); return; } Geoposition pos = await geo.GetGeopositionAsync(); //获取当前纬度 string Latitude = pos.Coordinate.Latitude.ToString(); //获取当前经度 string Longitude = pos.Coordinate.Longitude.ToString(); //百度坐标转换API string path = "http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=" + Longitude + "&y=" + Latitude + ""; //WebClient请求 WebClient client = new WebClient(); string strResult = await client.UploadStringTaskAsync(path,""); MapConvert mapConvert = new MapConvert(); mapConvert=JsonConvert.DeserializeObject
(strResult); string lon = mapConvert.x; string lat = mapConvert.y; //进行Base64解码 byte[] xBuffer = Convert.FromBase64String(lon); string strX = Encoding.UTF8.GetString(xBuffer,0,xBuffer.Length); byte[] yBuffer = Convert.FromBase64String(lat); string strY = Encoding.UTF8.GetString(yBuffer,0,xBuffer.Length); //生成静态图片 string imgSrc = string.Format("http://api.map.baidu.com/staticimage?center={0},{1}&width=300&height=300&zoom=16&markers={2},{3}&markerStyles=l,A", strX, strY, strX, strY); //显示图片 BitmapImage bitmapImage = new BitmapImage(new Uri(imgSrc, UriKind.Absolute)); imgLocation.Source = bitmapImage; } } public class MapConvert { public string error { get; set; } public string x { get; set; } public string y { get; set; } } }

转载于:https://www.cnblogs.com/limeiky/p/5818601.html

你可能感兴趣的文章
python标准库学习7
查看>>
有意思的代码片段
查看>>
德银:预计中国房地产行业在2018年面临“严重调整”
查看>>
jQuery选中元素与样式改变
查看>>
subline应用之python
查看>>
C8051开发环境
查看>>
VTKMY 3.3 VS 2010 Configuration 配置
查看>>
255. Verify Preorder Sequence in Binary Search Tree
查看>>
01_1_准备ibatis环境
查看>>
java判断网页的编码格式
查看>>
NYOJ_58最少步数(queue+BFS)
查看>>
windows中修改catalina.sh上传到linux执行报错This file is needed to run this program解决
查看>>
[fowarding]Ubuntu jsp平台使用JDBC来连接MySQL数据库
查看>>
angular学习笔记---通过angular/cli建一个新的项目
查看>>
mysql desc esc 基本命令总结
查看>>
matlab命令文档【全】
查看>>
扎瓦男孩决定编写一个酒店管理系统
查看>>
poj2138 Travel Games
查看>>
Spark概述
查看>>
iray摘抄
查看>>