2013-04-09 3 views
4

SQLite 데이터베이스에서 위도와 경도를 저장하는 데 문제가 있습니다. 일부 위치 (123.123999, 123.123999)를 저장할 수 있으며 데이터베이스에 저장됩니다. 그러나 그것을 읽고 싶으면 (123.124, 123.124)와 같은 둥근 위치를 얻습니다. 이 SQL 세그먼트에 의해 생성안드로이드 - SQLite 데이터베이스에 위치 저장

내 테이블 :

CREATE TABLE locs(id INTEGER PRIMARY KEY AUTOINCREMENT, lat DOUBLE, lng DOUBLE, num INTEGER) 

그리고 querys 결과 :

SELECT * FROM locs WHERE lat = 123.124; //RETURN NO ROWS 
SELECT * FROM locs WHERE lat = 123.123999; //RETURN 1 ROW 

그래서 내가 데이터에 대한 쿼리를 수행 할 수 숫자를 사용할 수 없습니다.

나는이 문제를 다루는 첫 번째 것이 아니라고 생각합니다. 왜냐하면 그것은 기본적인 것입니다. 하지만 SQLite 데이터베이스에서 작동하는 답변을 찾지 못했습니다.

db에서 올바른 번호를 읽고 쓸 수있는 방법은 무엇입니까?

당신은 쿼리 값 주위에 엡실론을 정의해야합니다
+0

검색하는 방법을 코드에 추가하십시오. – Sajmon

답변

2

어떻게 db에서 올바른 번호를 읽고 쓸 수 있습니까?

빠른 솔루션을 제안합니다.

좌표를 저장하는 형식을 알고 있으므로 e.q. 따라서 숫자를 TEXT으로 저장 한 다음 TEXT으로 검색하고 간단한 작업을 DOUBLE으로 다시 수행하여 문제를 해결할 수 있습니다.

CREATE TABLE locs(
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    lat TEXT, 
    lng TEXT, 
    num INTEGER 
) 
+0

liitle 비트 추한 솔루션,하지만 작동 ... – nrofis

0

, 즉

SELECT * FROM locs WHERE lat BETWEEN value-epsilon AND value+epsilon; 

당신은 당신의 필요에 따라 엡실론을 변경할 수 있습니다. 이 예에서는 1e-3로 충분합니다.

다른 옵션은 값을 삽입 할 때 값을 반올림하는 것이지만 길 아래로 필요한 정보는 잃게됩니다.

+0

내 진짜 중요한 문제는 가치가 반올림된다는 것입니다. 그들은이 문제에 대한 해결책을 어떻게 생각하지 않았는가 ... 123.1235도 123.124로 반올림되기 때문에 첫 번째 방법으로 1e-3이 필요합니다. – nrofis

+0

맞습니다. 게시물에서 수정되었습니다. 그러나 만약 당신이 둥근 값을 얻는다는 사실이 당신을 염려하는 것이라면, 그것을 검색하는 데 사용하는 코드를 게시해야합니다. – scf

+0

나는이 라운드가 실제 위치에 어떻게 영향을 미치는지, 미터는 내 코드가 무엇인지, 그 잘못인지는 모르겠다. (난 그냥지도에 포인트를 표시) – nrofis

관련 문제