2011-01-25 6 views
2

MKAnnotation 프로토콜을 준수하는 FGLocation이라는 클래스를 정의했으며,이 중 두 개체 사이의 거리를 측정하려고합니다. CLLocation 클래스의 메서드로 정의 된 distanceFromLocation 메서드를 사용할 수있는 것으로 나타났습니다. 아래에서 볼 수 있듯이 계산을 수행하기 위해 두 개의 임시 CLLocation 객체를 만들지 만 더 나은/더 쉬운 방법이 없다고 생각할 수는 없습니다. 누구든지 내가하고있는 일에 대해 의견을 갖고 있습니까? 아니면 어떻게하면 좋을까요?distanceFromLocation 사용 : 없음 없음 CLLocation 개체?

// IS THERE A BETTER WAY TO DO THIS? 
FGLocation *root = [annotations objectAtIndex:counter-1]; 
FGLocation *leaf = [annotations objectAtIndex:counter]; 

CLLocation *rootLocation = [[CLLocation alloc] initWithLatitude:[root coordinate].latitude longitude:[root coordinate].longitude]; 
CLLocation *leafLocation = [[CLLocation alloc] initWithLatitude:[leaf coordinate].latitude longitude:[leaf coordinate].longitude];         
CLLocationDistance thisDistance = [rootLocation distanceFromLocation:leafLocation]; 
[rootLocation release]; 
[leafLocation release]; 

NB : 내 FGLocation 객체가 나는 서브 클래스 CLLocation해서는 안됩니다 문서에서 발견 (아래 참조)으로 정의된다.

@interface FGLocation : NSObject <MKAnnotation> { 

답변

2

내가 무슨 일을하는 것은 공정한 접근 방식은 자주 또는 점의 많은에이 일을하는 경우 재 계산을위한 캐싱 메커니즘/임계 값의 일종을 구현 할 수 있습니다 가능한 제외이라고 생각 . 거리 계산은 비 유클리드 기하학을 정확하게 포함하며 계산 비용이 많이 듭니다. 포인트가 정밀 세계에와 있는지 여부의 위치에 따라 http://en.wikipedia.org/wiki/Haversine_formula

매우 중요합니다, 당신은 또한 유클리드 공간에서 작업하는 척하고 피타고라스의 정리를 활용하여 일을 꾸며 낼 수 있습니다. 필자는 이러한 종류의 체계를 사용하여 대규모 데이터 집합에 대해 거친 필터를 만든 다음 필터를 통과하는 지점에 대해보다 정확한 계산을 수행했습니다.

+0

안녕하세요, 공정한 점,이 단계에는 약 36 점 정도의 점수가 거의 없을 것입니다. 존경에 대한 당신의 권리는 포인트가 모두 매우 지역적이며 (약 50km 범위 내에서) 지구의 곡률에 대해 걱정할 필요가 없으며 공평하게 나는 100m 내에서 매우 정확하다는 것에 대해 귀찮게하지 않을 것입니다. 좋아. 필자의 주된 관심사는 두 가지 임시 CLLocation 객체를 만들지 않고 내 FGLocation 객체에서 직접 distanceFromLocation을 호출 할 수있는 몇 가지 프로 테크닉을 놓치지 않고 계산 방법을 사용했다는 것입니다. 많이 알았습니다. – fuzzygoat

관련 문제