[英]Google maps works locally, on production it's not centered and positions are wrong
我在使用Google地图时遇到了一个特殊的问题。 我使用数据库中保存的商店列表(经度和纬度)设置了“搜索最近的地点”功能。 当用户发布地址时,我会对它进行地址解析,然后在地图上将其标记为绿色图标,然后我会根据输入的经度和纬度使用Haversine公式提取最近的10个位置。
然后,我在html表格中显示所有位置,并使用适当的信息窗口在Google地图上放置相对标记。
在本地一切正常,但是当我在生产服务器上上传时,除了地图之外,其他一切都正常:我的表已填充,距离已正确计算,源代码(如下所示)显示所有变量均已正确解释,但地图开始完全缩放在某个地方在太平洋中心(insted的意大利的),所以放大,我需要看到的东西之前很多滚动mouswheel。
然后,标记将显示在ALMOST的正确位置上-除了绿色的位置以外(绿色不存在)。 此外,当我单击标记时,信息窗口从标记的左侧开始30或40像素,而不是在标记上方的右侧开始,因为它是局部发生的。
我在控制台中没有看到任何错误,生成的源代码在本地版本和生产版本之间完全相同,但是我遇到了这种奇怪的行为。
我不知道会发生什么,我尝试搜索google,但找不到类似的东西。 如果值得的话,生产服务器是Linux机器,即php 5.3.2,位于“第三级”,表示linux机器,即url看起来像http://lnx.mydomain.com/ 。
有人知道会发生什么吗?
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=[myapikey]&sensor=false&language=it"></script>
<script>
var locations = [
['location1', 45.4592775, 9.1599699, ' PIAZZA VESUVIO 14, 20144'],
['location2', 45.4534901, 9.170425, ' P.LE STAZIONE PORTA GENOVA 5 / 3,']
];
var infowindow = new google.maps.InfoWindow();
var map;
function initialize() {
var mapOptions = {
zoom: 10,
center: new google.maps.LatLng(45,4510239, 9,1606903),
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById('mappa'),mapOptions);
var startMarker = new google.maps.Marker({
position: new google.maps.LatLng(45,4510239, 9,1606903),
map: map,
title: 'user inserted address here'
});
google.maps.event.addListener(startMarker, 'click', (function(startMarker){
return function(){
infowindow.setContent('user inserted address here');
infowindow.open(map, startMarker);
}
})(startMarker));
startMarker.setIcon('http://maps.google.com/mapfiles/ms/icons/green-dot.png');
var marker;
for (i = 0; i < locations.length; i++) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(locations[i][1], locations[i][2]),
map: map,
title: locations[i][0],
animation: google.maps.Animation.DROP,
});
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
infowindow.setContent('<div class="default-text">'+locations[i][0]+'<br /><br />'+locations[i][3]+'</div>');
infowindow.open(map, marker);
}
})(marker, i));
}
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
达米恩(Damien)在欧洲的拉丁语国家(西班牙,意大利,也许是罗马尼亚)中,在使用句点的地方使用逗号,反之亦然:
美国为1,000,拉丁美洲国家为1,000
在美国为1.25,在拉丁语国家为1.25
美国为1,250,125.25,拉丁语国家为1.250.125,25!
奇怪,但是真实!
原来这是一个本地化问题...当var_dumped时,一个坐标正确地解释为float
,但是在我的语言环境( it_IT
)中,使用逗号作为分隔符来编写float
。
所以我只是用
<?php
setlocale(LC_NUMERIC, 'en_US');
?>
和数字已正确打印,并以点作为小数点分隔符。 (我首先尝试使用难看的str_replace()
,它也可以工作)。
感谢@steven发现错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.