2013-07-13 61 views
0

当我使用“center:new google.maps.LatLng”这个命令时,通常我们使用这种格式(22.621177,120.298311)谷歌地图上的坐标代码地址?

但我的来源是7 05.16' N, 171 21.88' E

是否有人知道下一步该怎么做?

function load(User_Id) { 
    var map = new google.maps.Map(document.getElementById("map_canvas"), { 
    center: new google.maps.LatLng(22.601914,120.283186), 
    zoom: 13, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 

var infoWindow = new google.maps.InfoWindow; 
var geocoder = new google.maps.Geocoder(); 


    downloadUrl("db_2_xml.php?id="+User_Id, function(data) { 
    var xml = data.responseXML; 
    var markers = xml.documentElement.getElementsByTagName("markers"); 

    for (var i = 0; i < markers.length; i++) { 
     var vessel = markers[i].getAttribute("vessel"); 


     var geocoder = new google.maps.Geocoder(
     geocoder.geocode(markers[i].getAttribute("GPS"))); 

    var speed = markers[i].getAttribute("speed"); 


     var icon = customIcons[type] || {}; 
     var marker = new google.maps.Marker({ 
     map: map, 
     position: geocoder, 
     icon: icon.icon, 
     shadow: icon.shadow 
     }); 
     bindInfoWindow(marker, map, infoWindow, html); 
    } 
    }); 
+0

欢迎来到堆栈溢出,请你详细解释问题是什么?根据您的问题,您需要将位置从一种格式转换为另一种格式。我确定这里有一些库。 –

+0

通常我们使用这个格式的“22.621177,120.298311”谷歌地图。 但现在,我的系统为我提供了“7 05.16'N,171 21.88'E”这种格式。 我试图强制php使用该格式,但不工作。 –

+0

你在使用什么编程语言? –

回答

0

说明

这听起来像你需要转换从DMS格式7 05.16' N, 171 21.8' E全球位置坐标转换为十进制格式像22.621177, 120.298311。在你的样本中,88秒多于那个位置允许的60。

该功能将完成从DMS转换为十进制格式的难题。它不验证这些值是否在可接受的范围内,也不会将这些额外值传送到下一个更大的单位位置。

活生生的例子:http://ideone.com/h2xwAc

代码

<?php 

function DMS2Decimal($degrees = 0, $minutes = 0, $seconds = 0, $direction = 'n') { 
    //converts DMS coordinates to decimal 
    //returns false on bad inputs, decimal on success 

    //direction must be n, s, e or w, case-insensitive 
    $d = strtolower($direction); 
    $ok = array('n', 's', 'e', 'w'); 

    //degrees must be integer between 0 and 180 
    if(!is_numeric($degrees) || $degrees < 0 || $degrees > 180) { 
      $decimal = false; 
    } 
    //minutes must be integer or float between 0 and 59 
    elseif(!is_numeric($minutes) || $minutes < 0 || $minutes > 59) { 
      $decimal = false; 
    } 
    //seconds must be integer or float between 0 and 59 
    elseif(!is_numeric($seconds) || $seconds < 0 || $seconds > 59) { 
      $decimal = false; 
    } 
    elseif(!in_array($d, $ok)) { 
      $decimal = false; 
    } 
    else { 
      //inputs clean, calculate 
      $decimal = $degrees + ($minutes/60) + ($seconds/3600); 

      //reverse for south or west coordinates; north is assumed 
      if($d == 's' || $d == 'w') { 
       $decimal *= -1; 
      } 
    } 

    return $decimal; 
} 



echo "x: " . DMS2Decimal($degrees = 7, $minutes = 5, $seconds = 16, $direction = 'n'); 

echo "y: " . DMS2Decimal($degrees = 171, $minutes = 21, $seconds = 8, $direction = 'e'); 

输出

x: 7.0877777777778y: 171.35222222222 

插入到你代码

注意这部分答案未经测试,可能在错误的地方。这只是为了展示我将如何处理这个问题。再次注意,没有任何值的验证测试。

function load(User_Id, x, y) { 

// if the x coordinate is not a number then assume it is in DMS format and convert 
    if (!is_numeric(x)) { 
     x = DMS2Decimal(x) 
    } 

// if the y coordinate is not a number then assume it is in DMS format and convert 
    if (!is_numeric(y)) { 
     y = DMS2Decimal(y) 
    } 

    var map = new google.maps.Map(document.getElementById("map_canvas"), { 
     center: new google.maps.LatLng(x,y), 
     zoom: 13, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 

} 
+0

所以,这将是另一个程序。 我不知道如何从MySQL中获取并计算,比放回到MySQL。 –

+0

你的问题在这里遭受一些严重的范围蔓延。从MySql中提取一个运行计算的值并将其返回到MySql实际上是一个完全不同的问题,应该作为一个全新的堆栈溢出问题展示。我更新了我的答案,以显示如何在必要时对x,y值进行测试和转换。 –

0

我很感谢您的回复。 不能使用“功能加载(User_Id,x,y){”..................... //// BTW我使用DM格式而不是DMS。 所以我做了一个不同的改变, 但仍然不成功,并没有错误代码显示。

function load(User_Id) { 

    var map = new google.maps.Map(document.getElementById("map"), { 
    center: new google.maps.LatLng(22.601914,120.283186), 
    zoom: 13, 
    mapTypeId: 'roadmap' 
    }); 
    var infoWindow = new google.maps.InfoWindow; 


    // Change this depending on the name of your PHP file 
    downloadUrl("db_2_xml.php?id="+User_Id,lat,lng, function(data) { 


      // if the x coordinate is not a number then assume it is in DMS format and convert 
if (!is_numeric(lat)) { 
    lat = DM2Decimal(lat) 
} 

//如果y坐标是不是一个号码,然后假设它是在DMS格式和转换 如果(!is_numeric(LNG)){ LNG = DM2Decimal(LNG) }

var xml = data.responseXML; 
    var markers = xml.documentElement.getElementsByTagName("markers"); 

    for (var i = 0; i < markers.length; i++) { 
     var vessel = markers[i].getAttribute("vessel"); 
     var pointss = new google.maps.LatLng(
      parseFloat(markers[i].getAttribute("lat")), 
      parseFloat(markers[i].getAttribute("lng"))); 
     var speed = markers[i].getAttribute("speed"); 
     var course = markers[i].getAttribute("course"); 


     var icon = customIcons[type] || {}; 
     var marker = new google.maps.Marker({ 
     map: map, 
     position: pointss, 
     icon: icon.icon, 
     shadow: icon.shadow 
     }); 
     bindInfoWindow(marker, map, infoWindow, html); 
    } 
    });