我成功从Google Map Javascript Api获得答案,并尝试访问google.maps.GeocoderResult的值,以从GeocoderGeometry / LatLng中提取纬度和经度
我按照TSD定义实现了response.data [0] .geometry.location.lat(),在Chrome中调试时导致错误:
TypeError: response.data[0].geometry.location.lat is not a function
查看调试器中的对象,有效地显示没有方法lat()或lng()不受支持。
我可以访问response.data [0] .geometry.location.lat来成功获取调试器中的值,但是我的代码不再符合Typescript。
当然我可以投出结果,但仍想了解原因。此外,也许某人有解释和提出解决方案?
祝你好运
对于记录,打字稿定义:
使用chrome调试信息进行更新:
response.data[0].geometry.location.lat() => <not available>
response.data[0].geometry.location.lat: 47.37793800000001
response.data[0].geometry.location: Object
lat: 47.37793800000001
lng: 8.5401898
response.data[0].geometry: Object
location:Object
lat:47.377
lng: 8.5401898
错误的堆栈跟踪:
TypeError: response.data[0].geometry.location.lat is not a function
at interestsParamsCtrl.js:61
at processQueue (ionic.bundle.js:29127)
at ionic.bundle.js:29143
at Scope.$eval (ionic.bundle.js:30395)
at Scope.$digest (ionic.bundle.js:30211)
at Scope.$apply (ionic.bundle.js:30503)
at done (ionic.bundle.js:24824)
at completeRequest (ionic.bundle.js:25022)
at XMLHttpRequest.requestLoaded (ionic.bundle.js:24963)
更新2:要查询API,我执行GET并解析响应
search(searchLocationTerm:string):ng.IPromise<{}> {
var deferred = this.$q.defer();
this.$http.get(Resources.Constants.Default.GOOGLE.API.URL,
{
params: {
address: searchLocationTerm,
key: Resources.Constants.Default.GOOGLE.API.KEY
}
})
.success((response:Communication.IGeocoder) => {
deferred.resolve(response);
}).error((response:Communication.IGeocoder) => {
deferred.reject(response);
});
return deferred.promise;
};
IGeocoder在哪里
export interface IGeocoder {
results:google.maps.GeocoderResult[];
status:google.maps.GeocoderStatus;
}
答案 0 :(得分:0)
您正在通过AJAX发送Web服务请求。请注意,Web服务Geocoding API的响应是文档中指定的JSON对象:
https://developers.google.com/maps/documentation/geocoding/intro?hl=en#GeocodingResponses
您应该使用客户端地理编码服务来获取符合google.maps.d.ts中定义的对象