2013-12-03 1 views
0

Надеюсь, вы понимаете мой вопрос, мой английский не слишком хорош.Местоположение в Java и iOS

В любом случае, я работаю над приложением с местоположениями. Его единственное забавное приложение, которое должно помочь мне узнать больше.

Его приложение iOS и сервер - приложение WebObjects/WOnder (Java). То, что я пытаюсь сделать, - это приложение iOS, которое я выбираю для местоположения пользователя, а затем отправляю данные на сервер. А на сервере я получаю точки аннотаций из базы данных. но только отправьте аннотации, находящиеся рядом с местоположением пользователей.

Моя единственная проблема сейчас: я не знаю, как рассчитать местоположения в непосредственной близости от пользователя. Я много искал, но не нашел того, что работает. Только что-то, что дает мне «ограничительную рамку» пользователя.

//To calculate the search bounds... 
//First we need to calculate the corners of the map so we get the points 
CGPoint nePoint = CGPointMake(self.mapView.bounds.origin.x + mapView.bounds.size.width, mapView.bounds.origin.y); 
CGPoint swPoint = CGPointMake((self.mapView.bounds.origin.x), (mapView.bounds.origin.y + mapView.bounds.size.height)); 

//Then transform those point into lat,lng values 
CLLocationCoordinate2D neCoord; 
neCoord = [mapView convertPoint:nePoint toCoordinateFromView:mapView]; 

CLLocationCoordinate2D swCoord; 
swCoord = [mapView convertPoint:swPoint toCoordinateFromView:mapView]; 

Доза у кого есть хорошая идея, как это сделать на Java?

ответ

1

Я использую код C# для расчета расстояния. Я перечисляю все данные в базе данных, и если данные находятся в диапазоне моего расстояния, я добавляю его в массив, а затем передаю его на устройство. В моем коде я предоставляю lat и lon для текущей позиции пользователя и lat и lon для объекта из базы данных. Я также предоставляю единицы K - км и M - мили. Это код C#, но вы можете легко преобразовать его в java:

public double GetDistanceFromLatLong(double lat1, double lon1, double lat2, double lon2, string unit) 
    { 
     double ReturnValue = 0; 
     double theta = 0; 
     double dist = 0; 
     theta = lon1 - lon2; 
     dist = Math.Sin(DegreesToRadians(lat1)) * Math.Sin(DegreesToRadians(lat2)) + Math.Cos(DegreesToRadians(lat1)) * 
       Math.Cos(DegreesToRadians(lat2)) * Math.Cos(DegreesToRadians(theta)); 
     dist = Math.Acos(dist); 
     dist = RadiansToDegrees(dist); 
     ReturnValue = dist * 60 * 1.1515; 

     switch (unit.ToUpper()) 
     { 
      case "K": 
       ReturnValue = ReturnValue * 1.609344; 
       break; 
      case "M": 
       ReturnValue = ReturnValue * 0.8684; 
       break; 
     } 
     return ReturnValue; 
    } 
+0

Спасибо! Я попробую это до ночи, когда я буду дома. Может быть, это глупый вопрос, но как вы проверяете, находится ли координата в диапазоне? – Blurr

+0

Я не делаю никаких проверок, я доверяю координатам, которые я отправляю с устройства (iPhone/iPad), и я просто сравниваю его с датой базы данных (которой я также доверяю). Если расстояние до большого, я просто игнорирую данные. – Greg

+0

Теперь я понял! Я понял «расстояние» неправильно. Это будет отлично работать для меня! Спасибо! – Blurr

Смежные вопросы