Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何访问谷歌地图API响应数据_Javascript_Google Api_Google Places Api - Fatal编程技术网

Javascript 如何访问谷歌地图API响应数据

Javascript 如何访问谷歌地图API响应数据,javascript,google-api,google-places-api,Javascript,Google Api,Google Places Api,第一次尝试在这里拼凑一些Javascript,因此任何有助于我理解我的问题案例的资源都是非常感谢的 我正试图从以下请求中提取lat和long,以便在另一个请求中使用: var placeSearch, autocomplete; var x = document.getElementById("location"); function initAutocomplete() { // Create the autocomplete object, restricting the sear

第一次尝试在这里拼凑一些Javascript,因此任何有助于我理解我的问题案例的资源都是非常感谢的

我正试图从以下请求中提取lat和long,以便在另一个请求中使用:

var placeSearch, autocomplete;
var x = document.getElementById("location");

function initAutocomplete() {
    // Create the autocomplete object, restricting the search predictions to
    // geographical location types.
    autocomplete = new google.maps.places.Autocomplete(
        document.getElementById('autocomplete'), { types: ['geocode'] });

    // Avoid paying for data that you don't need by restricting the set of
    // place fields that are returned to just the address components.
    autocomplete.setFields(['geometry']);


}

function showPosition() {
    x.innerHTML = "Latitude: " + autocomplete.result.geometry.lat +
        "<br>Longitude: " + autocomplete.result.geometry.lng;
}
/*
    "result" : {
       "geometry" : {
          "location" : {
             "lat" : 51.46588129999999,
             "lng" : -0.1413263
        }
}
*/


// Bias the autocomplete object to the user's geographical location,
// as supplied by the browser's 'navigator.geolocation' object.
function geolocate() {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function (position) {
            var geolocation = {
                lat: position.coords.latitude,
                lng: position.coords.longitude
            };
            var circle = new google.maps.Circle(
                { center: geolocation, radius: position.coords.accuracy });
            autocomplete.setBounds(circle.getBounds());
        });
    }
}
var placeSearch,自动完成;
var x=document.getElementById(“位置”);
函数initAutocomplete(){
//创建自动完成对象,将搜索预测限制为
//地理位置类型。
autocomplete=new google.maps.places.autocomplete(
getElementById('autocomplete'),{types:['geocode']});
//通过限制数据集,避免为不需要的数据付费
//放置仅返回到地址组件的字段。
设置域(['geometry']);
}
函数showPosition(){
x、 innerHTML=“纬度:”+autocomplete.result.geometry.lat+
经度:“+autocomplete.result.geometry.lng;
}
/*
“结果”:{
“几何学”:{
“地点”:{
“lat”:51.465881299999,
“液化天然气”:-0.1413263
}
}
*/
//将自动完成对象偏移到用户的地理位置,
//由浏览器的“navigator.geolocation”对象提供。
函数geologite(){
if(导航器.地理位置){
navigator.geolocation.getCurrentPosition(函数(位置){
变量地理位置={
纬度:位置坐标纬度,
lng:position.coords.longitude
};
var circle=new google.maps.circle(
{中心:地理位置,半径:位置.坐标.精度});
autocomplete.setBounds(circle.getBounds());
});
}
}
当用户选择自动完成的位置时,google api会请求:
https://maps.googleapis.com/maps/api/place/js/PlaceService.GetPlaceDetails
在所选位置上。我可以看到它在此处返回我所需的数据:

显然,
autocomplete.result.geometry.lat
返回一个
location\u search.js:18未捕获类型错误:无法读取未定义的
错误的属性“geometry”,因此我在这里缺少一些知识


谢谢你的帮助。

我最近在我的项目中实现了一些与你的需求非常相似的东西。这很容易,但我花了一段时间才意识到如何实现

基本上,您只需在Autocomplete对象上使用该方法,然后从那里开始。下面是我如何获得纬度和经度的:

let locationInfo = autocomplete.getPlace().geometry.location;
let latitude = locationInfo.lat();
let longitude = locationInfo.lng();
在您的具体情况下,您应该将showPositions功能更改为

function showPosition() {
x.innerHTML = "Latitude: " + autocomplete.getPlace().geometry.location.lat +
    "<br>Longitude: " + autocomplete.getPlace().geometry.location.lng;
函数showPosition(){
x、 innerHTML=“纬度:”+autocomplete.getPlace().geometry.location.lat+
经度:“+autocomplete.getPlace().geometry.location.lng;
}


这能奏效吗?

我最近在我的项目中实现了一些与您的需求非常相似的东西。这很容易,但我花了一段时间才意识到如何实现

基本上,您只需在Autocomplete对象上使用该方法,然后从那里开始。下面是我如何获得纬度和经度的:

let locationInfo = autocomplete.getPlace().geometry.location;
let latitude = locationInfo.lat();
let longitude = locationInfo.lng();
在您的具体情况下,您应该将showPositions功能更改为

function showPosition() {
x.innerHTML = "Latitude: " + autocomplete.getPlace().geometry.location.lat +
    "<br>Longitude: " + autocomplete.getPlace().geometry.location.lng;
函数showPosition(){
x、 innerHTML=“纬度:”+autocomplete.getPlace().geometry.location.lat+
经度:“+autocomplete.getPlace().geometry.location.lng;
}


这能起作用吗?

很有趣,谢谢,这不会触发另一个可以避免的API调用吗?我尝试了您在我的showPosition()函数中留下的代码片段,并接收纬度
function(){return a}
Longitude
function(){return b}
@JamesDowning,我不能肯定,但既然您已经收到了Autocomplete对象中的信息,我想说getPlace()仅检索此信息,而不是执行另一个API调用。我不理解您评论的第二部分,它是否有效,或者您是否获得了意外结果?是的,似乎您是对的,因此正如您所建议的,我调用了
var place=autocomplete.getPlace()
。我似乎只能通过
place.geometry.location;
返回long和lat;
place.geometry.location.lat;
只返回
function(){returna}
,我不知道为什么……我们代码中唯一的区别是您指定了“geocodes”键入。我会尝试删除它,进行一次测试运行,看看它现在是否工作。@JamesDowning,这对您有帮助吗?因为我真的可以使用这些代表点:DInteresting谢谢,这不会触发另一个可以避免的API调用吗?我尝试了您在showPosition()函数中留下的代码片段,并收到Latitude
function(){return a}
Longitude
function(){return b}
@JamesDowning,我不能肯定,但是因为您已经收到了Autocomplete对象中的信息,所以我会说getPlace()仅检索此信息,而不是执行另一个API调用。我不理解您评论的第二部分,它是否有效,或者您是否获得了意外结果?是的,似乎您是对的,因此正如您所建议的,我调用了
var place=autocomplete.getPlace()
。我似乎只能通过
place.geometry.location;
返回long和lat;
place.geometry.location.lat;
只返回
function(){returna}
,我不知道为什么……我们代码中唯一的区别是您指定了“geocodes”键入。我会尝试删除它,进行测试运行,看看它现在是否工作。@JamesDowning,这对你有帮助吗?因为我真的可以使用这些代表点:你真的敢使用自2010年以来就被弃用的,并在2021年永久关闭的Google Maps Javascript API v2(正如标签所暗示的那样)?不,我使用的是v3,我在添加2标签时很粗心。对不起,您真的使用了自2010年以来就被弃用的、将于2021年永久关闭的Google Maps J