0

我在使用谷歌地图时遇到了一个特殊的问题。我设置了一个“搜索最近的地方”功能,使用保存在我的数据库中的商店列表(带有纬度和经度)。当用户发布它的地址时,我对其进行地理编码,在地图上将其标记为绿色图标,然后我使用 Haversine 公式根据输入的纬度和经度获取最近的 10 个位置。

然后我在一个 html 表中显示所有位置,并将相关标记放在我的谷歌地图上,并带有适当的信息窗口。

本地一切正常,但是当我在生产服务器上上传时,一切正常,但地图:我的表格已填充,距离已正确计算,源代码(见下文)显示所有变量已正确解释,但地图开始完全缩放在,在太平洋的某个地方(意大利)的中心,放大到我需要滚动鼠标轮很多才能看到一些东西。

然后标记显示在几乎正确的位置 - 除了不存在的绿色位置。此外,当我单击标记时,信息窗口从标记左侧开始 30 或 40 像素,而不是在它的正上方,因为它发生在本地。

我在控制台中没有收到任何错误,生成的源代码在本地版本和生产版本之间完全一样,但是我遇到了这种奇怪的行为。

我不知道会发生什么,我尝试搜索谷歌,但我找不到类似的东西。如果值得的话,生产服务器是 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>    
4

2 回答 2

1

Damien,在欧洲的拉丁语国家(西班牙、意大利,可能还有罗马尼亚),他们在我们使用句点的地方使用逗号,反之亦然:

美国有 1,000 人,拉丁语国家有 1,000 人

美国 1.25,拉丁语国家 1.25

美国为 1,250,125.25,拉丁语国家为 1.250.125,25!

奇怪,但真实!

于 2013-05-29T16:46:01.340 回答
0

事实证明这是一个本地化问题......当 var_dumped 时,坐标被正确解释为float,但在我的语言环境 ( it_IT) 中,浮点数是使用逗号作为分隔符编写的。

所以我只是用

<?php 
setlocale(LC_NUMERIC, 'en_US');
?>

并且数字以点作为小数点分隔符正确打印。(我首先尝试了一个丑陋的str_replace(),这也可以)。

感谢@steven 发现了错误。

于 2013-05-24T10:24:20.620 回答