안드로이드 마켓 -> 여행 -> 스마트 트랙커


위치정보를 실시간으로 저장하여 지도해 보여주거나 파일로 저장을 제공하는 어플입니다.

네비게이션 GPS 시뮬레이션을 위해서 제작하게 되었는데...

혹시 자신의 필요하신분들이 있지 않을까 해서 올려봤습니다.(광고좀 많이 눌러 주세요 ㅋㅋㅋ)


참고로 파일로 저장하면 loc(로케이션 매니저 데이터 양식-자체정의),

NMEA 표준 규격으로 저장을 시켜 줍니다.


위치정보를 이용한 어플을 만드시는 분들은 이어플을 이용하여 저장한 데이터를 이용하면

따로 밖에 나가지 않고도 테스트가 가능할 것 같네요.


참고로.. 파일 파싱 소스와... 로딩 소스를 올려 드립


public Thread GPSLoggerThread(){

return new Thread() {

public void run() {

BufferedReader bufferReader = null;

StringBuffer stringBuffer = new StringBuffer();

while(true){

// read 

// gpsLoggerFile

if(!bGPSLoggerMode || bStopCollecting){

try {Thread.sleep(1000);} catch (InterruptedException e) {;}

continue;

}

FileReader fileReader = null;

try {

fileReader = new FileReader (gpsLoggerFile);

bufferReader = new BufferedReader(fileReader);


if(gpsLoggerFile.endsWith(".nmea")){

gpsLoggerFileType = GPSLOGGER_TYPE_NMEA;

}else if(gpsLoggerFile.endsWith(".loc")){

gpsLoggerFileType = GPSLOGGER_TYPE_LOC;

}

gpsLoggerIndex = 0;

// first line reading

stringBuffer.append(bufferReader.readLine());

// clear buffer

stringBuffer.delete(0, stringBuffer.capacity());

stringBuffer.setLength(0);

while(bufferReader.ready() && bGPSLoggerMode){

stringBuffer.append(bufferReader.readLine());

String rawString = stringBuffer.toString();

if(gpsLoggerFileType == GPSLOGGER_TYPE_NMEA){

NmeaParser currNmeaParser = new NmeaParser();

NmeaParser nextNmeaParser = new NmeaParser();

if(rawString.indexOf(GPRMC, 0) == -1){

// clear buffer

stringBuffer.delete(0, stringBuffer.capacity());

stringBuffer.setLength(0);

continue;

}

nextNmeaParser.parse(rawString);

updateWithNewLocation(nextNmeaParser.getLongitude(), nextNmeaParser.getLatitude()

, nextNmeaParser.getAltitude(), nextNmeaParser.getAccuracy()

, nextNmeaParser.getBearing(), nextNmeaParser.getSpeed()

, nextNmeaParser.getTime());

// clear buffer

stringBuffer.delete(0, stringBuffer.capacity());

stringBuffer.setLength(0);

long gap;

gap = (long)(nextNmeaParser.getTime() - currNmeaParser.getTime())/gpsLoggerSpeedTimes;

if(gap > 3000){

gap = 1000;

}

currNmeaParser.copy(nextNmeaParser);

try {Thread.sleep(gap);} catch (InterruptedException e) {;}

gpsLoggerIndex++;

}else{

LocationParser currLocationParser = new LocationParser();

LocationParser nextLocationParser = new LocationParser();

nextLocationParser.parse(rawString);

updateWithNewLocation(nextLocationParser.getLongitude(), nextLocationParser.getLatitude()

, nextLocationParser.getAltitude(), nextLocationParser.getAccuracy()

, nextLocationParser.getBearing(), nextLocationParser.getSpeed()

, nextLocationParser.getTime());

// clear buffer

stringBuffer.delete(0, stringBuffer.capacity());

stringBuffer.setLength(0);

long gap;

gap = (long)(nextLocationParser.getTime() - currLocationParser.getTime())/gpsLoggerSpeedTimes;

if(gap > 3000){

gap = 1000;

}

currLocationParser.copy(nextLocationParser);

try {Thread.sleep(gap);} catch (InterruptedException e) {;}

gpsLoggerIndex++;

}

}

bufferReader.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}; 

}