2016-08-06 42 views
0

Ich arbeite an einem Projekt, wo ich meine aktuelle Position (City Name) mit Typescript erhalten möchte. Ich möchte einen Service schaffen, der das für mich tun würde. Ich habe den Code unten geschrieben:Angular 2 - Holen Sie sich den Namen des aktuellen Standortes mit Geolocation mit TypeScript

import { Injectable} from '@angular/core'; 
import { Observable } from 'rxjs/Observable'; 
import {Http} from '@angular/http'; 
import 'rxjs/Rx'; 

@Injectable() 
export class CurrentLocationService { 

    constructor(private _http: Http) {} 

    getCurrentLocation(): Observable<any> { 
     return this._http.get('http://ipinfo.io/json?callback=JSON_CALLBACK') 
     .map(response => response.json()) 
     .catch(error => { 
      console.log(error); 
      return Observable.throw(error.json()); 
     }); 
    } 
} 

Aber diese Service gibt die falschen Werte zu mir. Wenn ich http://ipinfo.io/json?callback=JSON_CALLBACK auf der Browser-URL führen die Werte i zurück sind:

"city": "Munich", 
    "region": "Bavaria", 
    "country": "DE", 

, die in meinem Fall wahr sind, aber der Service above zurückkehren würde als Wert Connaught Place, IN, die falsch sind.
Gibt es eine genauere Möglichkeit, um den aktuellen Standort mithilfe eines Dienstes in Typescript zu erhalten.

Antwort

0

Entfernen Sie den Rückruf in der URL. Das funktioniert für mich. Hier ist ipinfo Dokumentation. documentation

getCurrentIpLocation(): Observable<any> { 
     return this._http.get('http://ipinfo.io') 
     .map(response => response.json()) 
     .catch(error => { 
      console.log(error); 
      return Observable.throw(error.json()); 
     }); 
    } 
0

Sie können Ihren aktuellen Standort von Breiten- und Längen finden:

getCurrentLocation(lat,lng): Observable<any> { 
    return this._http.get("http://maps.googleapis.com/maps/api/geocode/json?latlng="+lat+","+lng+"&sensor=true") 
     .map(response => response.json()) 
     .catch(error => { 
     console.log(error); 
     return Observable.throw(error.json()); 
     }); 
    }