当前位置:首页 » 安卓系统 » android坐标转换

android坐标转换

发布时间: 2022-09-09 03:28:53

Ⅰ 请问android手机屏幕上的x/y坐标怎么转换成百度地图上的经纬... 我自己做了一个标注的图标,然后用android

x y坐标对于屏幕对应的位置来讲 都是固定的 而地图的经纬度 由于地图的移动 每个点对应的经纬度不可能一样啊
期待别人有办法解决你的问题

Ⅱ android opengl 已知物体原空间坐标和旋转过的角度,怎么求出它旋转后的空间坐标,并转换成屏幕坐标

讲个思路。
已知空间点,设其向量为V1,已知旋转轴线,设为向量V2(V2以原点为起点)。
设向量V3,V3=V2 X V1,V3为V2与V1的向量积(详情网络),则V3与V2,V1都垂直。设向量V4,V4=V3 X V4,同理,此时V4与V1,V2共面。设未知变量K,V5=K * V3 - V4,则有
| V4 | ^ 2 / | V5 | ^ 2 =cos(A),此时A就是从-V2方向看点逆时针旋转的角度。解K,得V5。设未知数J,k,使J * V4 + K * V2 = V1 ,解得J,K。则J * (V4+v5 ) + K * V2为旋转后的点坐标。
这个应该是空间向量的方法……
另外有线性代数的方法:
设旋转中心向量为(X,Y,Z)方向为A,设矩阵V=(X,Y,Z)T ,U=V/||V||=(X2,Y2,Z2)T,
| 0 , -Z2 , Y2 |
设S=|Z2 , 0 , -X2 | , M=UUT+(COS(A))(I - UUT)+(SIN(A))S
|-Y2, X , 0 |

则R=| M , 0 | 用这个矩阵跟被旋转的点相乘就OK。
| 0, 1|

Ⅲ android手机屏幕上的x/y坐标怎么转换成百度地图上的经纬度

x y坐标对于屏幕对应的位置来讲 都是固定的 而地图的经纬度 由于地图的移动 每个点对应的经纬度不可能一样啊 期待别人有办法解决你的问题

Ⅳ android高德地图坐标系怎么转换成地球坐标系

楼主好,很抱歉,您咨询的开发问题小德帮不上忙哦,请您到高德地图开发者论坛上进行创建工单,咨询问题哦

Ⅳ android 百度地图怎么将获取到的地址转换为坐标

不知道您说的是不是根据地址信息获得相应的经纬度,如果是的话,我之前做的项目里面写了这样一个方法,希望能帮到您,谢谢。** * 根据传入的字符串获取到相应的经纬度信息 * */ public GeoPoint getGeoPointBystr(Stringstr) { GeoPoint gpGeoPoint = null; if (str!=null) { Geocoder gc = newGeocoder(InServeDetailActivity.this, Locale.CHINA); List addressList =null; try {addressList =gc.getFromLocationName(str, 1); if (!addressList.isEmpty()) { Address address_temp =addressList.get(0); //计算经纬度 doubleLatitude=address_temp.getLatitude()*1E6; doubleLongitude=address_temp.getLongitude()*1E6;System.out.println("经度:"+Latitude);System.out.println("纬度:"+Longitude); //生产GeoPoint gpGeoPoint = newGeoPoint((int)Latitude, (int)Longitude); } } catch (Exception e) { e.printStackTrace(); } } return gpGeoPoint; }如果还有问题,欢迎您继续追问。谢谢。android 网络地图怎么将获取到的地址转换为坐标

Ⅵ 如何在android的驱动程序中对加速度传感器的数据进行方向和坐标的转

一部智能手机或便携设备应具有Wi-Fi 和互联网功能,能够运行应用软件等诸多特征,而且一定会具有内置传感器。高端智能手机可能集成接近传感器,环境光传感器,3
轴加速度计,以及磁力计等多种传感器。 Android 2.3
添加了一些支持多种新型传感器的API,包括陀螺仪、旋转向量、线性加速度、重力和气压传感器等。应用软件可以使用这些新型传感器,将它们组合起来,就可以实现高精确度的高级运动检测功能。

3 轴加速度计或低g 值传感器是Android API
支持的传感器之一,具有特定的坐标系统,可以给应用程序提供标准的接口数据。坐标空间的定义与手机屏幕的默认方向有关,如图1所示。



1. 3 轴加速度计的Android 坐标系统

在Android 坐标系统中,坐标原点位于屏幕的左下角,X 轴水平指向右侧,Y 轴垂直指向顶部,Z
轴指向屏幕前方。在该系统中,屏幕后方的坐标具有负的Z 轴值。Android 加速度计数据定义为:

Sensor.TYPE_ACCELEROMETER

所有数值都采用SI
标准单位(m/s2),测量手机的加速度值,并减去重力加速度分量。

values[0]:x 轴上的加速度值减去Gx
values[1]:y
轴上的加速度值减去Gy
values[2]:z 轴上的加速度值减去Gz

例如,当设备平放在桌上并推着其左侧向右移动时,x
轴加速度值为正。当设备平放在桌上时,加速度值为+9.81,这是用设备的加速度值 (0 m/s2) 减去重力加速度值 (-9.81 m/s2)得到的。


当设备平放在桌上放,并以加速度A m/s2 朝天空的方向推动时,加速度值等于A+9.81,这是用设备加速度值(+A
m/s2)减去重力加速度值(-9.81 m/s2)得到的。

表 1
列出了与设备的各个位置相对应的传感器的加速度值读数。用户可以用下表检查加速度计的方向与系统坐标是否一致。

在 Android HAL 文件中改变 X、Y 和Z 轴的方向

在 HAL
文件中,会有一组宏定义,用于把从传感器中读取的加速度数据转换为标准单位(m/s2)。如以下代码:

// conversion of
acceleration data to SI units (m/s^2)
#define CONVERT_A (GRAVITY_EARTH /
LSG)
#define CONVERT_A_X (-CONVERT_A)
#define CONVERT_A_Y (CONVERT_A)

#define CONVERT_A_Z (CONVERT_A)

在这个宏定义中,常量GRAVITY_EARTH
是一个标准重力加速度值,即9.81m/s2,LSG为一个重力加速度值的最小有效计数值,例如,MMA8452
在正常模式下的读数为1024。因此,CONVERT_A 用于把从加速度传感器中读取的数据,从数字读数转换为标准重力加速度单位。


通过分别修改CONVERT_A_X、CONVERT_A_Y 和CONVERT_A_Z,我们可以轻松地改变X、Y 和Z
轴的方向。如果该轴的方向与系统定义相反,可以使用(-CONVERT_A)来改变其方向。如果方向一致,就使用(CONVERT_A),则保持方向不变。


这个宏定义位于FSL Android 9 (Android 2.2)驱动程序的HAL文件sensor.c 中。对于FSLAndroid 10
(Android 2.3),您可以在’libsensors’文件夹的HAL 文件Sensor.h 中找到它。

在 Android 2.2 HAL
文件中交换X 轴和Y 轴

在某些情况下,X 和Y 轴必须进行交换,以便使传感器数据的坐标与系统坐标保持一致。

对于 FSL
Android 9 (Android 2.2)驱动程序来说,X 轴和Y 轴的交换非常简单。首先,在HAL 文件sensor.c
中,在函数sensor_poll() 中找到以下代码:

switch (event.code) {
case ABS_X:

sSensors.acceleration.x = event.value * CONVERT_A_X;
break;
case
ABS_Y:
sSensors.acceleration.y = event.value * CONVERT_A_Y;
break;

case ABS_Z:
sSensors.acceleration.z = event.value * CONVERT_A_Z;

break;
}

然后,根据如下所示修改代码:

switch (event.code) {
case
ABS_X:
sSensors.acceleration.y = event.value * CONVERT_A_Y;
break;

case ABS_Y:
sSensors.acceleration.x = event.value * CONVERT_A_X;

break;
case ABS_Z:
sSensors.acceleration.z = event.value *
CONVERT_A_Z;
break;
}

在 Android 2.3 的HAL 文件中交换X 轴和Y 轴


Android 2.3 的HAL 文件中交换X 轴和Y 轴会更加复杂些,因为它具有更复杂的HAL文件结构。所有HAL
文件都位于文件夹‘libsensors’中。文件AccelSensor.cpp 中的两个函数需要修改。


首先,修改函数AccelSensor()的代码,如下所示:

if
(accel_is_sensor_enabled(SENSOR_TYPE_ACCELEROMETER)) {
mEnabled |=
1<<accelerometer; if (!ioctl(data_fd, EVIOCGABS(EVENT_TYPE_ACCEL_X),
&absinfo)) {
mPendingEvents[Accelerometer].acceleration.y =
absinfo.value * CONVERT_A_Y;
}
if (!ioctl(data_fd,
EVIOCGABS(EVENT_TYPE_ACCEL_Y), &absinfo)) {

mPendingEvents[Accelerometer].acceleration.x = absinfo.value * CONVERT_A_X;

}
if (!ioctl(data_fd, EVIOCGABS(EVENT_TYPE_ACCEL_Z), &absinfo)) {

mPendingEvents[Accelerometer].acceleration.z = absinfo.value * CONVERT_A_Z;

}
}

然后,修改函数processEvent()的代码,如下所示:

void
AccelSensor::processEvent(int code, int value)
{
switch (code) {

case EVENT_TYPE_ACCEL_X:
mPendingMask |= 1<<accelerometer; mPendingEvents[Accelerometer].acceleration.y = value * CONVERT_A_Y;
break;

case EVENT_TYPE_ACCEL_Y:
mPendingMask |= 1<<accelerometer; mPendingEvents[Accelerometer].acceleration.x = value * CONVERT_A_X;
break;

case EVENT_TYPE_ACCEL_Z:
mPendingMask |= 1<<accelerometer; mPendingEvents[Accelerometer].acceleration.z = value * CONVERT_A_Z;
break;

}
}

完成后,X 轴和Y 轴的数据就互相交换了。

在 Kernel 驱动文件中交换X 轴和Y 轴


X 轴和Y 轴的数据交换可以在底层的Linux 驱动中,在刚开始读取传感器数据时实施。通过这种方法,无论传感器芯片以何种方式安装在PCB
中,或者使用各种不同类型的传感器,HAL 文件都可以保持一致。

对于 Android 2.2 和2.3
来说,执行该操作的最便捷的方式是修改函数report_abs()中的代码。在该函数中,传感器数据通过调用函数mma8452_read_data()读取,如下所示(当使用的传感器为MMA8452Q
时):

if (mma8452_read_data(&x,&y,&z) != 0) {

//DBG("mma8452 data read failed ");
return; }

X 轴和Y
轴可以通过以下方式轻松交换:

if (mma8452_read_data(&y,&x,&z) != 0) {

//DBG("mma8452 data read failed ");
return; }

对于 Android
2.2,MMA8452 的Kernel 驱动文件为mma8452.c;对于Android 2.3,驱动文件是‘hwmon’文件夹中的mxc_mma8452.c。


在 Kernel 驱动文件中改变 X、Y 和Z 轴的方向

传感器数据的方向也可以在Kernel
驱动文件中更改。以下带有注释的语句可以添加到函数report_abs()中,从而改变数据方向:

if
(mma8452_read_data(&y,&x,&z) != 0) {
//DBG("mma8452 data read
failed ");
return;
}
x *= -1; //Reverse X direction
y *= -1;
//Reverse Y direction
z *= -1; //Reverse Z direction

input_report_abs(mma8452_idev->input, ABS_X, x);

input_report_abs(mma8452_idev->input, ABS_Y, y);

input_report_abs(mma8452_idev->input, ABS_Z, z);

input_sync(mma8452_idev->input);

总结

Android
系统已经为加速度计定义了坐标系统,因此用户必须转换从实际传感器中读取的数据,从而与其保持一致。无论是否需要转换,都应检查X、Y 和Z
轴的方向以及X-Y轴坐标。我们可以更改HAL 文件或Kernel 驱动文件来改变轴的方向,或交换X 和Y 轴,但是不要同时修改HAL 文件和Kernel 驱动。

找找

Ⅶ android编程怎么把GPS坐标转换为百度地图坐标

网络地图 Android SDK 或者 iOS SDK 或者各种各样的 API 工具产品,都使用的是网络自己经过加密的坐标体系。
众多开发者在使用过程中,位置点都是通过 GPS 或者其他途径获取的,所以与网络地图所使用的坐标系存在差异。
开发者在将这些空间位置信息运用到地图地图上得时候,需要进行响应的纠偏(坐标转换),Android SDK 为广大开发者早已开放了响应的坐标转换方法,
开发者只需要短短的几行代码就可以实现相应的坐标转换操作了。
具体方法如下:

[java] view plain
// 将google地图、soso地图、aliyun地图、mapabc地图和amap地图// 所用坐标转换成网络坐标
CoordinateConverter converter = new CoordinateConverter();
converter.from(CoordType.COMMON);
// sourceLatLng待转换坐标
converter.coord(sourceLatLng);
LatLng desLatLng = converter.convert();

// 将GPS设备采集的原始GPS坐标转换成网络坐标
CoordinateConverter converter = new CoordinateConverter();
converter.from(CoordType.GPS);
// sourceLatLng待转换坐标
converter.coord(sourceLatLng);
LatLng desLatLng = converter.convert();

Ⅷ android gps坐标转和百度坐标的区别

实现将一组GPS模块获取的经纬度数据在网络地图上绘制轨迹 /** * 标准的GPS经纬度坐标直接在地图上绘制会有偏移,这是测绘局和地图商设置的加密,要转换成网络地图坐标 * * @return 网络地图坐标 */ publicGeoPoint gpsToBai(String data) {//data格式 nmea标准数据 ddmm.mmmmm,ddmm.mmmm 如3030.90909,11449.1234 String[] p = data.split(","); intlat = (int) (((int) (Float.valueOf(p[0]) /100) + (100* (Float//将ddmm.mmmm格式转成dd.ddddd .valueOf(p[0]) /100.0- (int) (Float.valueOf(p[0]) /100)) /60.0)) * 1E6); intlon = (int) (((int) (Float.valueOf(p[1]) /100) + (100* (Float .valueOf(p[1]) /100.0- (int) (Float.valueOf(p[1]) /100)) /60.0)) * 1E6); GeoPoint pt =newGeoPoint(lat, lon); returnCoordinateConvert.fromWgs84ToBai(pt);//转成网络坐标 }

Ⅸ 安卓 高德地图的坐标怎么转换成百度地图的坐标

安卓项目使用了网络地图的定位SDK,web端使用的也是网络地图, 后来发现界面显示网络地图不如高德效果好,web改用高德地图,原本的网络地图坐标是可以直接使用的,由于高德和网络地图的坐标系不一致 要如何转换呢。

补充了下坐标系知识后发现高德使用的坐标系是“gcj02”也就是大家所说的“火星坐标”,

网络使用的是“BD09”因为是网络所用大家习惯称之为“网络坐标” ,如何将bd09转为gcj02呢,突然想到在网络的定位sdk里有这样一段说明(来自网络地图)

设置返回值的坐标类型。
public void setCoorType ( String )
我们支持返回若干种坐标系,包括国测局坐标系、网络坐标系,需要更多坐标系请联系我们,需要深度合作。目前这些参数的代码为。因此需要在请求时指定类型,如果不指定,默认返回网络坐标系。注意当仅输入IP时,不会返回坐标。目前这些参数的代码为

返回国测局经纬度坐标系 coor=gcj02
返回网络墨卡托坐标系 coor=bd09
返回网络经纬度坐标系 coor=bd09ll
网络手机地图对外接口中的坐标系默认是bd09ll,如果配合网络地图产品的话,需要注意坐标系对应问题。


也就是说网络这个定位sdk应该是可以直接返回gcj02坐标的,这样就可以直接在高德上使用了

代码如下

LocationClientOption option = new LocationClientOption();
option.setCoorType("gcj02");//如果是网络坐标参数为 bd0911
看来网络公司对于SDK使用中发现这块要比高德做的好一些,所以才会出现尽管高德地图数据不错但在开发中还是网络地图摘得头彩。

Ⅹ Android百度地图api 百度坐标转GPS坐标如何实现

网络Map API中有GPS坐标换算的AIP

GeoPoint p = new GeoPoint(x, y);
GeoPoint p2 = CoordinateConvert.bundleDecode(CoordinateConvert.fromWgs84ToBai(p));

热点内容
安卓怎么关闭美易订阅 发布:2024-05-18 19:29:16 浏览:642
苹果手机配置代理服务器怎么开 发布:2024-05-18 19:29:07 浏览:229
服务器屏蔽了别人的ip 发布:2024-05-18 19:10:09 浏览:619
怎么获取ins服务器地址 发布:2024-05-18 19:10:03 浏览:30
仙方一般是什么配置 发布:2024-05-18 18:53:43 浏览:159
黑莓安卓手机主题下载到哪里 发布:2024-05-18 18:47:18 浏览:57
汤靖轩编程 发布:2024-05-18 18:46:04 浏览:533
脚本故事梗 发布:2024-05-18 18:29:02 浏览:823
安卓和csharp哪个发展好 发布:2024-05-18 18:09:30 浏览:527
换编程题库 发布:2024-05-18 18:00:58 浏览:562