當前位置:首頁 » 安卓系統 » 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));

熱點內容
long在c語言中 發布:2024-05-04 19:54:39 瀏覽:781
svn在本地文件夾 發布:2024-05-04 19:50:21 瀏覽:445
crontab不執行shell腳本 發布:2024-05-04 19:49:38 瀏覽:80
安卓機買哪個好2021 發布:2024-05-04 19:49:38 瀏覽:843
apriori演算法改進 發布:2024-05-04 19:24:08 瀏覽:45
為什麼我要自己寫腳本 發布:2024-05-04 19:19:13 瀏覽:183
手機照片重命名為什麼還有文件夾 發布:2024-05-04 19:19:06 瀏覽:309
安卓手機為什麼連不上iphone的熱點 發布:2024-05-04 19:18:58 瀏覽:209
海量小文件存儲ftp 發布:2024-05-04 19:13:21 瀏覽:274
真我手機如何解除手機密碼 發布:2024-05-04 18:24:44 瀏覽:708