如何把地理位置的经纬度unity3d 坐标转换换为unity3d的系统坐标

用户名:qllinhongyu
文章数:29
访问量:116662
注册日期:
阅读量:1297
阅读量:3317
阅读量:442844
阅读量:1128950
51CTO推荐博文
& &在上一篇博文()中介绍了如何用HTML5获取当前用户的地理坐标信息。得到了这么重要的数据,我们就可以通过调用地图接口,实现很多耪ㄌ斓墓δ堋 & &先给大家看个我通过HTML5获取到自己的坐标信息后,再调用百度地图接口定位的截图: & &哎哟我去,第一张图不对啊,这地图上显示的地理位置与我实际的地理位置不符呀!偏离的好远!是百度地图定位不准确吗?其实根本不是百度地图的问题,而是你提供的地理坐标不对!坐标怎么会不对呢?客官别急,让我慢慢道来: & &首先,我这个Demo背景是用HTML5 Geolocation特性通过GPS设备“爱疯”获取来的地理坐标信息(GPS设备获取的坐标),根据相关法律的规定,GPS获取的原始坐标又不能在互联网上对外提供。 & &其次,不同的API提供商可能会使用不同的坐标系,例如google地图、百度地图、soso地图……他们的坐标系都有所差异。 & &简单的说,就是我现在GPS设备获取的坐标,如果要在百度地图中精确定位的话,那就得把GPS原坐标转换为百度地图的坐标系。同理,如果调用的是别家地图API,你也得把坐标转换为他们的体系。 & &那到底该怎么转换坐标呢?放心,API提供商早就为大家准备好了接口。本文就以百度地图为例: & &百度地图官方文档:文档已经写了很清楚,我就不细说了,结合下本文的Demo给大家讲讲我的做法。 & &(1)首先你要成为百度开发者,要获取百度给你的密钥,这样你才可以调用百度的API; & &(2)按照请求参数说明拼写发送http请求的url;发送的请求格式是:服务参数的详情:参数含义取值范围是否必须默认取值coords源坐标格式:经度,纬度;经度,纬度…限制:最多支持100个格式举例:114.,29.;114.,29.是无ak开发者密钥是无sn用户的权限签名否若用户所用ak的校验方式为sn校验时该参数必须。()from源坐标类型取值为如下:1:GPS设备获取的角度坐标;2:GPS获取的米制坐标、sogou地图所用坐标;3:google地图、soso地图、aliyun地图、mapabc地图和amap地图所用坐标4:3中列表地图坐标对应的米制坐标5:百度地图采用的经纬度坐标6:百度地图采用的米制坐标7:mapbar地图坐标;8:51地图坐标否默认为1,即GPS设备获取的坐标to目的坐标类型有两种可供选择:5、6。5:bd09ll(百度经纬度坐标),6:bd09mc(百度米制经纬度坐标);否默认为5,即bd09ll(百度坐标)output返回结果格式json或者xml否json & &(3)接收返回的数据(json或者xml格式),这个返回的格式就是依据之前你发送的url请求中output这个参数来定的,默认返回的是json格式。返回值说明:名称类型含义取值范围statusinit状态码正常0,异常非0,详细见状态码说明resultjson或者xml数组转换结果与输入顺序一致xfloat横坐标yfloat纵坐标例如你发送的url为:则返回的json格式:{
status : 0,
} & & & &废话说了一大堆,还是赶紧上Demo源码:function initdata(){ //页面初始化
if (navigator.geolocation){
navigator.geolocation.getCurrentPosition(showPosition,showError);//HTML5获取GPS设备地理位置信息
document.getElementById("allmap").innerHTML="Geolocation is not supported by this browser.";
function showPosition(position){
var x=position.coords.//获取纬度
var y=position.coords.//获取经度
//转为百度地图坐标
//注意点:1、coords的经度、纬度顺序(可多组坐标转换,以;(分号)隔开)。2、from与to的准确性。3、callback为回调函数
var positionUrl = "http://api./geoconv/v1/?coords="+y+","+x+"&from=1&to=5&ak=你的密钥&callback=getMap";
var script = document.createElement('script');
script.src = positionU
document.getElementsByTagName("head")[0].appendChild(script);
function getMap(data){
//返回的状态码,0为正常;1为内部错误;21为from非法;22为to非法;24为coords格式非法;25为coords个数非法,超过限制
if(data.status!=0){
alert("地图坐标转换出错");
//result为数组
var result = data.
var lon = result[0].x;//经度
var lat = result[0].y;//纬度
// 百度地图API功能
var map = new BMap.Map("allmap");
// 创建Map实例
var point = new BMap.Point(lon,lat);
map.centerAndZoom(point, 14);
map.addControl(new BMap.ZoomControl());
//添加地图缩放控件
var marker1 = new BMap.Marker(point);
// 创建标注
map.addOverlay(marker1);
// 将标注添加到地图中
//创建信息窗口
var infoWindow1 = Window("您当前所处的位置,经度:"+lon+";纬度:"+lat);
marker1.addEventListener("click", function(){this.openInfoWindow(infoWindow1);});
//HTML5获取地理位置信息错误处理
function showError(error)
switch(error.code)
case error.PERMISSION_DENIED:
document.getElementById("allmap").innerHTML="User denied the request for Geolocation."
case error.POSITION_UNAVAILABLE:
document.getElementById("allmap").innerHTML="Location information is unavailable."
case error.TIMEOUT:
document.getElementById("allmap").innerHTML="The request to get user location timed out."
case error.UNKNOWN_ERROR:
document.getElementById("allmap").innerHTML="An unknown error occurred."
} & & & &不搭嘎的结语:嗯,虽然还很菜,但一直在努力,坚持博客分享。文章中若有不足或不正确之处,还望大家指正。 & &本文出自 “” 博客,请务必保留此出处
了这篇文章
附件下载:  
类别:┆阅读(0)┆评论(0)
请输入验证码:百度坐标与GPS坐标转换 -
- ITeye博客
博客分类:
官网这么说的
4.3 百度坐标为何有偏移?
国际经纬度坐标标准为WGS-84,国内必须至少使用国测局制定的GCJ-02,对地理位置进行首次加密。百度坐标在此基础上,进行了BD-09二次加密措施,更加保护了个人隐私。百度对外接口的坐标系并不是GPS采集的真实经纬度,需要通过坐标转换接口进行转换。
百度地图API中,有GPS坐标转百度坐标的功能 /map/wiki/index.php?title=androidsdk/guide/tool这个转换算法百度是不会公开的,而且百度也没有提供百度坐标转成GPS坐标功能,这里我用了取巧的办法。 百度坐标和GPS坐标转换在很近的距离时偏差非常接近。 假设你有百度坐标:x1=116.397428,y1=39.90923 把这个坐标当成GPS坐标,通过接口获得他的百度坐标:x2=116.,y2=39. 通过计算就可以得到GPS的坐标: x = 2*x1-x2,y = 2*y1-y2 x=116.01 y=39.
convertBaiduToGPS befour:(30..577475)
convertBaiduToGPS after:(30..565995)
转换方法如下:
public static LatLng convertGPSToBaidu(LatLng sourceLatLng) {
// 将GPS设备采集的原始GPS坐标转换成百度坐标
CoordinateConverter converter
= new CoordinateConverter();
converter.from(CoordType.GPS);
// sourceLatLng待转换坐标
converter.coord(sourceLatLng);
LatLng desLatLng = converter.convert();
return desLatL
public static LatLng convertBaiduToGPS(LatLng sourceLatLng) {
// 将GPS设备采集的原始GPS坐标转换成百度坐标
CoordinateConverter converter = new CoordinateConverter();
converter.from(CoordType.GPS);
// sourceLatLng待转换坐标
converter.coord(sourceLatLng);
LatLng desLatLng = converter.convert();
double latitude = 2 * sourceLatLng.latitude - desLatLng.
double longitude = 2 * sourceLatLng.longitude - desLatLng.
BigDecimal bdLatitude = new BigDecimal(latitude);
bdLatitude = bdLatitude.setScale(6, BigDecimal.ROUND_HALF_UP);
BigDecimal bdLongitude = new BigDecimal(longitude);
bdLongitude = bdLongitude.setScale(6, BigDecimal.ROUND_HALF_UP);
return new LatLng(bdLatitude.doubleValue(), bdLongitude.doubleValue());
浏览 16636
浏览: 92152 次
来自: 鄂州
写的很好,谢谢分享
在Fragment中使用布局怎么显示不出来
Mybeautiful 写道显然有问题,return Bitm ...
显然有问题,return BitmapFactory.deco ...
加入我工程的时候有个诡异的bug,下拉刷新布局就会覆盖主Vie ...Unity3D的四种坐标系及转换 - 简书
Unity3D的四种坐标系及转换
1, World Space(世界坐标):
我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的。transform.position可以获得该位置坐标。
2, Screen Space(屏幕坐标):
以像素来定义的,以屏幕的左下角为(0,0)点,右上角为(Screen.width,Screen.height),Z的位置是以相机的世界单位来衡量的。
注:鼠标位置坐标属于屏幕坐标,Input.mousePosition可以获得该位置坐标,手指触摸屏幕也为屏幕坐标,Input.GetTouch(0).position可以获得单个手指触摸屏幕坐标。
3.ViewPort Space(视口坐标):
视口坐标是标准的和相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,Z的位置是以相机的世界单位来衡量的。
4, 绘制GUI界面的坐标系:
这个坐标系与屏幕坐标系相似,不同的是该坐标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。
【四种坐标系的转换】
1、世界坐标→屏幕坐标:camera.WorldToScreenPoint(transform.position);这样可以将世界坐标转换为屏幕坐标。其中camera为场景中的camera对象。
2、屏幕坐标→视口坐标:camera.ScreenToViewportPoint(Input.GetTouch(0).position);这样可以将屏幕坐标转换为视口坐标。其中camera为场景中的camera对象。
3、视口坐标→屏幕坐标:camera.ViewportToScreenPoint();
4、视口坐标→世界坐标:camera.ViewportToWorldPoint();涓婁紶鍙戝竷
禄 涓}

我要回帖

更多关于 unity3d 获取经纬度 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信