'bikemate lite'에 해당되는 글 1건

  1. 2013.02.06 BikeMate Lite 데이터를 BikeMate GPS로 옮기기..

자전거를 타면서 이동 경로를 기록하기 위해 BikeMate란 어플을 사용해왔다.

BikeMate는 무료인 Lite 버전과 유료인 GPS 버전이 있는데,


Lite 버전을 사용하다가 맘에 들어 GPS 버전을 구입하게 되었다.

그런데, Lite 버전에서 저장된 데이터를 GPS 버전으로 옮기고 싶은데,

공식적으로 이런 기능이 제공되질 않았다.

그래서 그동안 Lite 버전과 GPS 버전을 둘 다 설치해 두었었는데,

이번에 데이터 옮기는 방법을 알게 되어 공개한다.


필요한 툴:

iFunbox

SQLite Database Browser


자신의 환경에 맞는 버전을 준비한다.


iFunbox 를 통해 iPhone에 연결을 하고 앱 관리 화면에서 BikeMate GPS와 BikeMate Lite 를 찾는다.

어플을 열고 Documents 폴더 아래에 있는 내용을 PC로 각각 복사하고,

만약을 위해 백업을 해 둔다.(별도의 폴더에 복사하거나, 압축)


Documents 폴더의 파일 중

data.bikeapp 과 totaldata 두 파일이 데이터 저장에 사용된 듯 하다.

totaldata는 운동일지 화면에서 볼 수 있는 전체 운동 기록 내용이고,

data.bikeapp은 모든 데이터가 저장되어있다.


데이터는 SQLite라는 데이터 베이스를 사용하고 있다.


SQLite Database Browser를 이용하여 해당 파일들을 읽으면,

저장된 내용을 확인할 수 있다.


메뉴 중 Export를 사용하여 데이터 베이스를 sql 파일로 저장한다(Database to SQL file)

저장된 SQL파일은 텍스트 편집기를 사용하여 내용을 확인하고 편집할 수 있다.


totaldata는 다음과 같은 형태로 되어있다.

BEGIN TRANSACTION;

CREATE TABLE TotalData(id integer primary key, totaltime text, totaldistance integer, totalcalorie integer);

INSERT INTO TotalData VALUES(0,100076,229773.933594,6384);

COMMIT;

각 값은

100076 : 총 운동시간

229773.933594 : 총 이동거리

6384 : 전체 소모 칼로리

이다.


Lite 버전과 GPS 버전의 각 값을 합산해서 수정한 뒤 다른 이름으로 저장한다.

totaldata는 내용이 간단하므로 SQLite Database Browser 에서 직접 수정해도 무방하다.




data.bikeapp 은 모든 기록을 담고 있는 데이터 베이스 이므로 운동을 오래 했다면 양이 방대할 것이다. 

따라서 이를 편집하는데 많은 시간이 소모될 수 있다.


data.bikeapp은 다음과 같은 형태로 되어있다.

BEGIN TRANSACTION;

CREATE TABLE ContainMashupRoute(id integer primary key, contain bit, tempcontain bit);

INSERT INTO ContainMashupRoute VALUES(0,1,1);

INSERT INTO ContainMashupRoute VALUES(1,1,1);

INSERT INTO ContainMashupRoute VALUES(2,1,1);

.

.(생략)

.

CREATE TABLE FileInfo (id INTEGER primary key, filename text, starttime text, endtime text, avgspeed text,  maxspeed text, elapsedtime text, comment text, totaldistance text, author text, indexid integer, containcheck integer, calorie integer, completefile integer, unixtime integer);

INSERT INTO FileInfo VALUES(0,'제목','2012-04-08T00:51:24Z','2012-04-08T02:03:22Z',12.93,38.75,'01:10:31','',15.198,'작성자',1,0,433,1,4231);

INSERT INTO FileInfo VALUES(1,'제목','2012-04-08T02:23:19Z','2012-04-08T03:55:54Z',12.09,27.52,'01:32:14','',18.632,'작성자',1,0,534,1,5551);

INSERT INTO FileInfo VALUES(2,'제목','2012-04-14T08:03:49Z','2012-04-14T09:16:31Z',15.40,39.59,'01:12:22','',18.573,'작성자',1,0,531,1,4342);

.

.(생략)

.

CREATE TABLE PhotoInfoTemp (id integer primary key autoincrement, filename text, timestamp text, latitude text, longitude text, description text, imagefile blob, notgps integer, indexid integer, fileid integer);
INSERT INTO PhotoInfoTemp VALUES(1,'Photo0','2012/04/19 22:07:03',00.00,000.000,'인라인스케이트장',NULL,NULL,1,4);
INSERT INTO PhotoInfoTemp VALUES(2,'Photo1','2012/04/19 22:07:24',00.0000,000.000,'',NULL,NULL,1,4);

.

.(생략)

.

CREATE TABLE "GpsInfo0" (id INTEGER PRIMARY KEY AUTOINCREMENT, latitude TEXT, longitude TEXT, altitude TEXT, timestamp TEXT, file_id INTEGER, photoid integer, filename text, comment text, photodate text, photoindex integer, photoname text, calorie integer, speed text);
INSERT INTO GpsInfo0 VALUES(1,00.000000,000.000000,00.000000,'2012-04-08T00:51:52Z',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,2.079368);
INSERT INTO GpsInfo0 VALUES(2,00.000000,000.000000,00.000000,'2012-04-08T00:51:53Z',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,2.401604);
INSERT INTO GpsInfo0 VALUES(3,00.000000,000.000000,00.000000,'2012-04-08T00:51:54Z',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,2.896223);
INSERT INTO GpsInfo0 VALUES(4,00.000000,000.000000,00.000000,'2012-04-08T00:51:55Z',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3.490555);

.

.(생략)

.

CREATE TABLE sqlite_sequence(name,seq);
INSERT INTO sqlite_sequence VALUES('GpsInfo0',3589);
INSERT INTO sqlite_sequence VALUES('GpsInfo1',4700);
INSERT INTO sqlite_sequence VALUES('GpsInfo2',3654);

.

.(생략)

.

COMMIT;

데이터 수정이 필요한 테이블들만 정리를 했다.

ContainMashupRoute 테이블은 메쉬업으로 데이터 공유를 할 때 쓰는 정보인듯하고,

FileInfo 테이블은 앱의 이동경로 목록 창에서 보여지는 내용들이다.

PhotoInfoTemp 테이블은 앱을 이용해 찍은 사진과 관련된 내용들이고,

GpsInfo0 테이블은 이동경로 목록의 첫번째 경로에 해당하는 GPS 로그이다.

sqlite_sequence 는 각 이동경로에 로그가 얼마나 많이 저장되어있는지 기록해 놓은 듯 하다.


가장 먼저 할일은 FileInfo 테이블을 보고 날짜 순으로 정렬을 하는 것이다.

일반적으로 Lite 버전을 먼저 사용하고 GPS 버전을 나중에 사용하는 것일테니,

Lite 버전은 그대로 GPS 버전의 내용은 빨간색 ID번호를 순서에 맞게 변경해 주면 된다.


그 다음은 ContainMashupRoute 테이블과 sqlite_sequence 테이블을 위에서 수정한 것과 동일하게 통합 후 ID(빨간색 숫자)를 수정한다


사진의 경우는 Documents 폴더에 사진파일이 저장되고, 해당 파일의 이름이 PhotoInfoTemp 테이블의 두번째 필드에 기록되어있다.(Photo0, Photo1 등)

FileInfo 와 마찬가지로 날짜 순서대로 번호를 수정해 주면 될 듯 하다.

(이동경로 기록 중 찍은 사진의 경우 어떤 방식으로 저장되는지 확인 불가)

(아마도 사진의 ID(파란색 숫자)가 GpsInfox 테이블의 photoid에 기록될 것으로 예상)



GpsInfox 테이블의 경우 각 경로의 GPS 로그를 기록한 것이기 때문에 데이터 양이 상당히 많다.(x는 각 경로의 ID번호)

따라서 텍스트 편집기의 "찾아 바꾸기" 기능을 이용하는 것이 편하다.

팁이라면, GpsInfo0 테이블의 처음에 커서를 두고, 검색 방향을 아래로, 끝까지 찾은 후 처음으로 돌아가기 기능은 끄고,

단어단위로, 큰 번호 순으로 수정하면 된다.

(예, "GpsInfo10" -> "GpsInfo15")


다음은 SQLite Database Browser를 실행하고 sql 파일을 Import 하면 데이터 베이스가 생성된다.

내 경우에는 에러가 발생했는데, 데이터에는 문제가 없는 것으로 확인됐다.

저장 버튼이 활성화 되지 않는 경우 아무 데이터나 직접 수정 후 되돌려 놓고, 저장하면 된다.


수정된 data.bikeapp 파일과 totaldata 파일을 다시 iFunbox 를 이용해 BikeMate GPS의 Documents 폴더로 복사하면 된다.

※만약 Lite 버전에서 찍은 사진도 옮기는 경우 테이블을 변경한 것과 마찬가지로 파일명도 변경해야 하는 것을 잊지 말아야 한다.


다음은 데이터를 옮기기 전 스샷과 옮긴 후 스샷


    

<통합 전>                                                     <통합 후>


    

<통합 전 Lite 버전>                                       <통합 전 GPS 버전>



<통합 후 GPS 버전>


Posted by mahnee
이전버튼 1 이전버튼

블로그 이미지
온갖 자작과 공학 전반에 걸쳐 관심이 많은 ..
mahnee
Yesterday
Today
Total

달력

 « |  » 2024.11
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함