2010年9月27日 星期一

讀取經緯度的小範例

Using Google Maps in Android文章中提到如何在Android手機中設計Google Map的功能。
如果把GPS經緯度資訊放到該文章提到的coordinates變數中。

String coordinates[] = {"1.352566007", "103.78921587"};

那要如何讀取GPS的資訊?我們利用長高科技DMA6410XP及GPS設備,利用其UART的範例讀取GPS的訊號(如第三個圖所示)。




我們利用Hello來解析GPS的格式,其程式如下:

package com.example;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class Hello extends Activity {
String str = "$GPGGA,000339.026,8960.0000,N,00000.0000,E,0,0,,137.0,M,13.0,M,,*4E";
TextView tv;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv=(TextView) findViewById(R.id.text01);
tv.setText("經度: "+getLatitude(str)+"緯度: "+getLongitude(str));
}

private String getLatitude(String str2) {
// TODO Auto-generated method stub
boolean f=false;
int status = 0;
int ptr = 0;
String str1="$GPGGA,";
String result="";
if(str2.length()<50) return result;
for(int i=0; i<str2.length( );i++)
{
if(f){
switch(status){
case 0:
case 1:
case 2:
if(str2.charAt(i)==',') status++;
break;
case 3:
if(str2.charAt(i)==',') status++;
else
result+=str2.charAt(i);
break;
case 4:
return result;

}
}
else
{
if (ptr==7)
f=true;
else {if(str1.charAt(ptr)==str2.charAt(i)) ptr++;
else ptr=0;
}
}
}
return null;
}
private String getLongitude(String str2) {
// TODO Auto-generated method stub
boolean f=false;
int status = 0;
int ptr = 0;
String str1="$GPGGA,";
String result="";
if(str2.length()<50) return result;
for(int i=0; i<str2.length();i++)
{
if(f){
switch(status){
case 0:
if(str2.charAt(i)==',') status++;
break;
case 1:
if(str2.charAt(i)==',') status++;
else
result+=str2.charAt(i);
break;
case 2:
return result;

}
}
else
{
if (ptr==7)
f=true;
else {if(str1.charAt(ptr)==str2.charAt(i)) ptr++;
else ptr=0;
}
}
}
return null;
}

}


3 則留言:

  1. 可以使用split針對","進行字串切割
    這樣可以省去很多字元判斷的麻煩

    private String getLatitude(String str2) {
    // TODO Auto-generated method stub
    String[] splitStr = str2.split(",");
    if(splitStr.length>5){
    return splitStr[4];
    }else{
    return null;
    }
    }

    private String getLongitude(String str2) {
    // TODO Auto-generated method stub
    String[] splitStr = str2.split(",");
    if(splitStr.length>4){
    return splitStr[2];
    }else{
    return null;
    }
    }

    回覆刪除
  2. 感謝小肯尼提供寶貴的程式設計。

    回覆刪除
  3. 我知到有gpsd(open source)元件可以用,透過uart餵GPS NEMA字串,gpsd直接轉成經緯,速度,時間,衛星CN值給你等等.....

    google gpsd

    回覆刪除