繁体   English   中英

Google地图在本地工作,在生产中未居中且位置错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM