2011-09-09 3 views
0

LocationX가 LocationA와 LocationB 사이에 있는지 확인하려면 어떻게합니까? 그것을 결정하는 안드로이드 방법이 있습니까?Android : 방법 : 위치가 AndroidA에서 LocationA와 LocationB 사이에 있는지 확인하십시오.

업데이트 여기서 LocationX가 BuildingA 또는 BuildingB에 있는지 묻습니다. 두 건물의 왼쪽 위와 아래 오른쪽 좌표가 있습니다.

UPDATE2 하자. LocationX는 사람입니다. 주요 목표는 그 사람이 BuildingA에 있는지 또는 BuildingB에 있는지를 결정하는 것입니다.

UPDATE3 건물 A와 건물 B가 직사각형/사각형이라고 가정 해 보겠습니다. 그래서 위아래 왼쪽 위와 아래 오른쪽 위도와 경도가 필요합니다.

UPDATE4는 나를 @ligi의 응답으로부터 코드를 추가하자. 그러나 아래의 코드는 실패합니다.

Location locationA = new Location("A"); 
locationA.setLatitude(35.70217034224572); 
locationA.setLongitude(139.74359443782043); 
Location locationB = new Location("B"); 
locationB.setLatitude(35.69994863045598); 
locationB.setLongitude(139.74633029101562); 
Location locationX = new Location("X"); 
// TODO result: X:169.661 Y:347.359 
locationX.setLatitude(35.70066307001967); 
locationX.setLongitude(139.74450102446747); 

//distanceAB > (distanceXA + distanceXB - threshold) 
float threshold = 0f; 
float distanceAB = locationA.distanceTo(locationB); 
float distanceXA = locationX.distanceTo(locationA); 
float distanceXB = locationX.distanceTo(locationB); 
boolean result = distanceAB > (distanceXA + distanceXB - threshold); 
assertTrue(result); 
+1

무엇이'LocationX is LocationA and LocationB'를 의미합니까? – Selvin

+0

좌표를 사용하겠습니다. coordinateX는 coordinateA와 coordinateB 사이에 있습니까? 다른 용어가 있습니까? 그것을 제외하고는 그것을 설명하는 방법에 대한 아이디어가 없습니다. 내 사과. – eros

+0

GPS의 Location 개체입니다. – eros

답변

3

계산 3 개 거리 (예를 통해 Location.distanceTo) : distanceAB는 distanceXA, distanceXB 는 다음 사항을 확인하십시오 당신이 일부 fuzzynes의 조금을 소개 할 수 과 (distanceAB == (distanceXA + distanceXB)) 예를 들어 검사에서와 같이 0보다 큰 임계 값 - 사용 사례에 따라 다르다 - 실제 상황이 최적으로 연결되지 않음

업데이트로 인해 문제가 변경된 것으로 나타났습니다. Rect.contains와 함께 - 각 건물에 Rect를 만들고 건물에있는 경우 Rect.contains로 확인하십시오.

+1

이것은 정확히 AB 중간에있는 지점에서만 작동합니다. 따라서 A에 매우 가깝지만 B와는 아주 가까운 지점이 있지만 A와 B 사이의 경로에 놓여있는 경우이 지점은 고려되지 않습니다. AB가 클수록 효과가 더 뚜렷해집니다. –

+0

나는 당신이 틀렸다는 것을 꽤 확신한다. - 간단한 삼각법 – ligi

+0

당신은 절대적으로 옳다. 나는 틀린 것을 읽었다. 죄송합니다. –

1

점 (a, b) 두 점 (X0, Y0)에 의해 정의되는 직사각형에 포함되고, (X1, Y1)의 경우 최소 (X0, X1) < < 최대 (X0, X1) 및 최저 (y0, y1) <b < 최대 값 (y0, y1).

a - y0 = ((y1-y0)/(x1-x0)) * (b - x0) 인 경우 점 (a, b)가 (x0, y0)), 가정 x1! = x0. x0이 x1과 같으면 a가 또한 x0과 같은 경우에만 (a, b)가 라인에 있습니다.

점 (a, b)와 점 (x0, y0) 사이의 거리는 (a-x0)^2 + (b-y0)^2의 제곱근입니다.

+0

최소값과 최대 값은 무엇을 의미합니까? Android의 기능입니까? – eros

+0

두 숫자 중 최소값 (최소값)과 최대 값 (최대 값)을 의미합니다. java.lang.Math는 min 및 max 함수를 제공합니다 (http://developer.android.com/reference/java/lang/Math.html 참조). –

관련 문제