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 为什么Google Maps.getCenter()返回无效坐标?_Javascript_Google Maps_Google Maps Api 3_Mobile Safari_User Agent - Fatal编程技术网

Javascript 为什么Google Maps.getCenter()返回无效坐标?

Javascript 为什么Google Maps.getCenter()返回无效坐标?,javascript,google-maps,google-maps-api-3,mobile-safari,user-agent,Javascript,Google Maps,Google Maps Api 3,Mobile Safari,User Agent,从昨天(2019年2月13日)开始,在一个拥有来自世界各地用户的流量相对较高的网站上,在UTC下午5点左右,我们开始收到带有无效坐标的AJAX回调 我们有Javascript,它可以检测地图何时空闲,然后将坐标发送到服务器进行反向地理编码器查找。以下是一个简化: google.maps.event.addListener(mapObject, 'idle', function() { $.ajax({ url: '/geo/reverse/lookup', type: 'GE

从昨天(2019年2月13日)开始,在一个拥有来自世界各地用户的流量相对较高的网站上,在UTC下午5点左右,我们开始收到带有无效坐标的AJAX回调

我们有Javascript,它可以检测地图何时空闲,然后将坐标发送到服务器进行反向地理编码器查找。以下是一个简化:

google.maps.event.addListener(mapObject, 'idle', function() {
  $.ajax({
    url: '/geo/reverse/lookup',
    type: 'GET',
    dataType: 'json',
    data: { 
      lat: mapObject.getCenter().lat(), 
      lng: mapObject.getCenter().lng() 
    }
  })
});
多年来,这种做法一直没有出现任何问题。但昨天我们开始接收无效的lat/lng坐标。这导致我们用来运行反向地理编码器查找的系统抱怨。大多数无效坐标包含的经度值大于
180

我们无法在内部复制该问题。但我有预感这与浏览器有关。也许发布了一个新的浏览器版本,它以不同的方式处理GMAPSJS。所以我们开始研究坏请求的用户代理。大多数浏览器都报告agent
Mozilla/5.0(iPhone;CPU iPhone OS 12_1_2,如Mac OS X)AppleWebKit/605.1.15(KHTML,如Gecko)Version/12.0 Mobile/15E148 Safari/604.1
,但并非所有请求都是Mobile Safari,因此我不确定这是浏览器还是Gmaps问题


我希望有人能对此有所帮助,或者这将有助于类似情况下的其他人。

API 3.35和3.36版的
getCenter
方法似乎存在问题。版本3.34运行良好

我无法获得大于90的纬度值,但只需将地图向左或向右(在一个方向上)平移几次即可显示超出-180/180度范围的经度值

我开了一家商店

函数初始化(){
var mylatng=new google.maps.LatLng(46.2,6.17);
变量映射选项={
缩放:2,
中心:myLatLng,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
var map=new google.maps.map(document.getElementById(“地图画布”),mapOptions);
google.maps.event.addListener(映射'idle',函数(){
document.getElementById('lat')。value=map.getCenter().lat();
document.getElementById('lng')。value=map.getCenter().lng();
});
}
初始化()
正文{
字体系列:Arial;
字体大小:10px;
}
#地图画布{
高度:150像素;
边缘底部:10px;
}


Lat:Lng:
我用版本3.35和3.36进行了检查,并且 看起来getCenter()并没有按照这种方式包装,但在v3.34中并没有这样做

这在2011年也发生过

函数初始化(){
var mylatng=new google.maps.LatLng(46.2,6.17);
变量映射选项={
缩放:2,
中心:myLatLng,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
var map=new google.maps.map(document.getElementById(“地图画布”),mapOptions);
google.maps.event.addListener(映射'idle',函数(){
//document.getElementById('lat')。value=map.getCenter().lat();
//document.getElementById('lng')。value=map.getCenter().lng();
var center=map.getCenter();
var wrapped=new google.maps.LatLng(center.lat(),center.lng());
document.getElementById('lat').value=wrapped.lat();
document.getElementById('lng').value=wrapped.lng();
});
}
初始化()
正文{
字体系列:Arial;
字体大小:10px;
}
#地图画布{
高度:150像素;
边缘底部:10px;
}


Lat:Lng:
我必须执行此功能才能修补Google地图的漏洞:

const fixCoordinates = (coordinate: number) => {
  let fixedCoordinate = coordinate;
  while (fixedCoordinate > 180) fixedCoordinate -= 360;
  while (fixedCoordinate < -180) fixedCoordinate += 360;
  return fixedCoordinate;
};
const fixCoordinates=(坐标:编号)=>{
设fixedCoordinate=坐标;
而(固定坐标>180)固定坐标-=360;
而(固定坐标<-180)固定坐标+=360;
返回固定坐标;
};

提供一个可以重现我们可以测试的问题和示例数据的解决方案怎么样?如果没有这些,我想不出任何人能帮上什么忙。@Upsidown先生-不幸的是,我们无法重现这个问题。那么你就没有任何问题了?那样的话,我想你可以删除这个问题。不,我们还有这个问题。在当地繁殖是不可能的。我希望来自SO社区的人或者遇到过同样的问题,或者能够帮助我们理解如何重现它,因为它只发生在我们用户浏览器的一小部分上。谢谢。昨天我们开始收到无效的纬度/液化天然气坐标-你怎么知道的?你能不能记录一些东西,看看这是怎么发生的/什么时候发生的以及为什么发生的?好的,我们刚刚通过
https://maps.googleapis.com/maps/api/js?v=3&key=XXXXX
-将对此进行测试并返回给您。为找到这个问题干杯<代码>v=3
不再报告为有效的访问方式。您应该使用
每周
季度
或特定版本
v=3
退回到季度版本,即3.35,并且有相同的问题。我已经在我们的环境中复制了这个版本。我们将明确定义v3.34,然后在几周后回来查看google是否发布了一个补丁,这样我们就可以每周发布一次。