Angular 2 - 使用TypeScript使用地理位置获取当前位置的名称

时间:2016-08-06 18:46:03

标签: javascript angular typescript angular2-services

我正在开展一个项目,我希望使用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中的服务获取当前位置。

2 个答案:

答案 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());
      });
  }