Pytanie w sprawie iphone, cllocation, altitude, gps – Uzyskiwanie wysokości (wysokość od poziomu morza) mojej lokalizacji w zestawie SDK iPhone'a

4

Próbuję uzyskać wysokość mojej lokalizacji w aplikacji. Ale za każdym razem, gdy próbujęaltitude własnośćCLLocation przedmiot, który dostaję0.00 w wyniku.

Poszukałem hasła do mojego zapytania i otrzymałem podobne pytanietutaj itutaj. Ten link mówi, że jeśli uzyskuję dostęp do CLLocation za pomocą wifi lub wieży komórkowej, będzie on zerowy. Nawet jeśli spróbuję to ustawićdesireAccuracy w najlepszym razie nawet nie upewnij się, że aplikacja będzie korzystać z GPS. Mówi także, że jeśli będę w pomieszczeniu, nie będę mógł uzyskać dostępu do GPS.

W wielu przypadkach nie jest pewne, czy aplikacja będzie korzystać tylko z GPS. Chcę mieć jakiś sposób na uzyskanie wysokości z wifi lub wieży komórkowej. Do tego przeszedłem na więcej i dostałemGoogle Earth API ale myślę, że dotyczy to wyłącznie technologii Microsoft .net.

Teraz, zgodnie z tą sytuacją, myślę, że dla rozwiązania mogę utworzyć usługę internetową w technologii Microsoft i przekazać tam swoją lokalizację, a jako odpowiedź mogę uzyskać wysokość, ale nie chcę tego robić.

Czy ktoś może zasugerować mi, jak uzyskać wysokość mojej lokalizacji od ios. Czy jest jakaś dostępna droga? Jeśli tak, proszę nawigować w dobrym kierunku.

Z góry dziękuję.

Edytuj1

użyłemCLLocationManager do aktualizacji lokalizacji i kiedy dostanę swoją lokalizację, potrzebuję wysokości.

Edit2

Zgodnie z odpowiedzią @ fishinear próbowałem następującego kodu:

- (void)viewDidLoad
{
    [super viewDidLoad];
    manager = [[CLLocationManager alloc] init];
    [manager setDesiredAccuracy:kCLLocationAccuracyBestForNavigation];
    [manager setDistanceFilter:kCLDistanceFilterNone];
    [manager setDelegate:self];
    [manager startUpdatingLocation];
// Do any additional setup after loading the view, typically from a nib.
}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    if ([newLocation verticalAccuracy] >= 0) {
        NSLog(@"Altitude = %lf",newLocation.altitude);
    }
    NSLog(@"Vertical Accuracy : %lf",newLocation.verticalAccuracy);
}

verticalAccuracy jest zawsze-1. Nie zmienia się nawet po uruchomieniu aplikacji na 30 minut. Jestem uruchomiony ios 4.3.2 na moim 3GS. Jestem w pomieszczeniu, więc myślę, że nie ma dostępu do GPS nawet przy użyciu tego kodu.

Twoja odpowiedź

2   odpowiedź
0

WidziećAndroid - Uzyskaj wysokość według długości i szerokości geograficznej? istnieje rozwiązanie dla Androida, ale można je łatwo dostosować do systemu iOS.

Odpowiedź brzmi: użyjUSGS Elevation Query Web Service

W górnej części odpowiedzi po prostu wysyłasz żądanie HTML do:

http://gisdata.usgs.gov/xmlwebservices2/elevation_service.asmx/getElevation?X_Value=" + 
             String.valueOf(longitude)   + 
             "&Y_Value=" + String.valueOf(latitude)             
             + "&Elevation_Units=METERS&Source_Layer=-1&Elevation_Only=true"; 

Następnie możesz przeanalizować tekst odpowiedzi między<double>...</double> tagi

Edytować: Wygląda na to, że próbujesz uzyskać podwyższenie poza Stanami Zjednoczonymi.

Interfejs API Google Maps zapewnia usługę Elevation i dokumentację pod adresemhttps://developers.google.com/maps/documentation/javascript/elevation

Próbowałem użyć tego adresu URL i przekazałem wartości xi22.998851594142938 & 72.5317382812553173828125 odpowiednio i odpowiedź jest<double>-1.79769313486231E+308</double>. Co rozumiem przez to? Jak uzyskać wysokość z tym? Kapil Choubisa
dzięki. Twoja edytowana odpowiedź pomogła :)developers.google.com/maps/documentation/javascript/elevation to jest to, czego szukałem. Kapil Choubisa
4

Aby odpowiedzieć na twoje pierwotne pytanie: GPS będzie zawsze używany, jeśli ustawisz pożądaną dokładność na Best lub BestForNavigation i distanceFilter na kCLDistanceFilterNone podczas konfigurowania menedżera CLLocationManager. Następnie otrzymasz wartości wysokości w zdarzeniu CLLocation.

Trwa to jednak chwilę, zanim GPS „zablokuje się” na wystarczającej liczbie satelitów, aby móc zgłosić wysokość. W tym czasie zgłosi zdarzenia CLLocation bez wartości wysokości. Dlatego należy zignorować pierwsze kilka zdarzeń, aż wartość pionowej dokładności będzie dla ciebie wystarczająco dobra. Sprawdź także znacznik czasu, ponieważ czasami pierwsze zdarzenie CLLocation jest stare.

Czy zweryfikowałeś, że dla tej aplikacji usługi lokalizacji są ustawione na „włączone”? Dmorneault
Sprawdź mójedit2 w pytaniu. Zaimplementowałem twoją sugestię, ale to nie zadziałało. Kapil Choubisa
Sprawdź pole verticalAccurce w CLLocation. Wskazuje to dokładność wartości wysokości i jest ujemna, jeśli wysokość nie została określona. fishinear
Ale jak mogę się upewnić, że wartość wysokości jest poprawna wśród kilku wartości, jak powiedziałeś? Kapil Choubisa
Mówisz, że jesteś w domu. W pomieszczeniu GPS może mieć problemy z „dostrzeżeniem” wystarczającej liczby satelitów, aby określić wysokość. Spróbuj najpierw na zewnątrz, jeśli to działa, to jest przyczyna. fishinear

Powiązane pytania