我正在开展一个项目,我希望使用City Name
获取当前位置(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());
});
}
}
但是,这个Service
会向我返回错误的值。当我在浏览器URL上执行http://ipinfo.io/json?callback=JSON_CALLBACK
时,我得到的值是:
"city": "Munich",
"region": "Bavaria",
"country": "DE",
在我的情况下是正确的,但上面的服务将返回值Connaught Place, IN
,这是错误的
是否有更精确的方法来使用Typescript
中的服务获取当前位置。
答案 0 :(得分:1)
删除网址中的回调。这适合我。 这是ipinfo文档。 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());
});
}
答案 1 :(得分:0)
您可以按纬度和经度找到当前位置:
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());
});
}