2013-01-24 7 views
1

나는 지정된 점으로부터 2km 이내에있는 특정 거리에있는 점들을 데이터베이스에서 가져오고 싶습니다. 이를 위해 나는이 쿼리 LATITUDE에 sqllite에서 다음 쿼리,여러 점 사이의 거리 찾기

public Cursor GetLoc(int lat, int longi, int dist) 
    { 
     Cursor c = db.rawQuery("SELECT *, ((Math.acos(Math.sin("+ lat +"* PI()/180) * Math.sin("+ LATITUDE +"* PI()/180) + Math.cos("+ lat +"* PI()/180) * Math.cos("+LATITUDE+"* PI()/180) * Math.cos(("+ longi +" - "+LONGITITUDE+") * PI()/180)) * 180/PI()) * 60 * 1.1515 * 1.609344) AS distance FROM " + LOCATION_TABLE +" WHERE distance = " + dist, null); 
     return c; 
    } 

를 사용하고 LONGITITUDE는 LOCATION_TABLE의 열입니다.

이 쿼리는 MySQL의에서 정확한 결과를 제공하지만 여기이 오류를

android.database.sqlite.SQLiteException: near "(" 

문제가 쿼리에 어디에서 얻을 didnt가를 제공합니다. Plz 도움.

+1

데이터베이스에서 데이터를 가져 와서 메모리에 저장 한 다음 계산을 계산하면 더 쉬울 것입니다. sqllite에게 계산을 요구하는 것이 효율적이지 않다는 느낌이 들었습니다. –

+0

또한 간단한 거리 계산을 위해 왜 삼각 함수를 사용하고 있습니까? [피타고라스의 정리] (http://en.wikipedia.org/wiki/Pythagorean_theorem) 여기를 도울 수 ... – Geobits

+0

@ 스텔스 - 랍비, 그런 식으로 알고 있지만 1000 위치가 데이터베이스에 저장되면 프로그램에 영향을 미칩니다. 효율성은 위치가 변경 될 때마다이 기능을 실행해야합니다. 많은 수의 위치가 저장 될 때 이러한 유형의 처리를 수행하는 것이 좋습니다. – user1743317

답변

2

Android 사용자는 Location 클래스의 distanceTo() 메소드를 사용하는 것이 좋습니다. DB에이 작업을 수행하도록 요청하지 않습니다.

자세한 정보 here.