将ISO 6709格式的GPS坐标转换为R中的十进制度数

将ISO 6709格式的GPS坐标转换为R中的十进制度数,r,gps,iso,R,Gps,Iso,我们有一台设备,将其GPS坐标作为数值输出,以lat=±DDMM.MMMM&lon=±DDDMM.MMMM的lat/lon格式归档 有没有在R中包含函数(或自定义函数)的包可以将其转换为十进制度数格式?(即:±DD.DDDDDD和±DDD.DDDDDD) 例如,lat&lon(2433.056,-8148.443)将转换为(24.55094,-81.80739)。您可以使用类似于read.csv或read.delim的方法从文件中读取值 然后,要从DDMM.MMMM和DDDMM.MMMM进行转换

我们有一台设备,将其GPS坐标作为数值输出,以lat=±DDMM.MMMM&lon=±DDDMM.MMMM的lat/lon格式归档

有没有在R中包含函数(或自定义函数)的包可以将其转换为十进制度数格式?(即:±DD.DDDDDD和±DDD.DDDDDD)


例如,lat&lon(2433.056,-8148.443)将转换为(24.55094,-81.80739)。

您可以使用类似于
read.csv
read.delim
的方法从文件中读取值

然后,要从DDMM.MMMM和DDDMM.MMMM进行转换,您可以使用如下内容(当然,根据需要修改输入/输出的形式):


convertISO6709这可能不是最优雅的PHP代码,但它确实有效:

function convertISO6709($coord)
{
    $abs_coord = abs($coord);
    $sign = ($abs_coord == $coord) ? 1 : -1;
    $m = 2;
    $dlen = 2;
    $s = 0;
    $seconds = 0;
    switch (strlen($abs_coord)) {
        case 4 :
            break;
        case 5 :
            $dlen = 3;
            $m = 3;
            break;
        case 6 :
            $s = 4;
            break;
    }
    $degrees = substr($abs_coord, 0, $dlen);
    $minutes = substr($abs_coord, $m, 2);
    if ($s != 0) {
        $seconds = substr($abs_coord, $s, 2);
    }
    return ($degrees + ($minutes / 60)  + ($seconds / 3600)) * $sign;
}

我有一个类似的问题,从联邦快递WS获取坐标。我使用此函数从字符串中获取值,如+19.467945-99.14357/:

function convertCoordISO6709($coord)
{
  //$coord example
  //$coord = +19.467945-99.14357/

  $returnArray[0] = 1;//result non 0 means error
  $returnArray[1] = 0;//Lat
  $returnArray[2] = 0;//long

  $coord = trim($coord,"/"); //Strip / sign
  //look for + - sign
  $lat_sign = substr($coord,0,1);  //strip and save the first sign (latitude value)

  $sub_coord = substr($coord,1,strlen($coord));

  if(count(explode("+",$sub_coord)) == 2) //Second value is + for the longitude
  {
    $coords=explode("+",$sub_coord);
    $returnArray[0] = 0;
    $returnArray[1] =  $lat_sign.$coords[0];
    $returnArray[2] =  "+".$coords[1];    
  }
  else //Second value is - for the longitude
  {
    $coords=explode("-",$sub_coord);
    $returnArray[0] = 0;    
    $returnArray[1] =  $lat_sign.$coords[0];
    $returnArray[2] =  "-".$coords[1];      
  }


  return $returnArray;
}

干得不错-不知道“sign”函数,正试图用if语句实现它,与您的问题没有直接关系,但R中有一个完整的系统,可以从lat/long转换为各种投影。请看注释。我查看了“MapProj”和“MapTools”包,但没有看到它们在哪里能够完成上述任务。如果可以,请告诉我。我相信proj4包也有一些设施。我已经有一段时间没做这件事了,但我记得那是一种财富的尴尬。
function convertCoordISO6709($coord)
{
  //$coord example
  //$coord = +19.467945-99.14357/

  $returnArray[0] = 1;//result non 0 means error
  $returnArray[1] = 0;//Lat
  $returnArray[2] = 0;//long

  $coord = trim($coord,"/"); //Strip / sign
  //look for + - sign
  $lat_sign = substr($coord,0,1);  //strip and save the first sign (latitude value)

  $sub_coord = substr($coord,1,strlen($coord));

  if(count(explode("+",$sub_coord)) == 2) //Second value is + for the longitude
  {
    $coords=explode("+",$sub_coord);
    $returnArray[0] = 0;
    $returnArray[1] =  $lat_sign.$coords[0];
    $returnArray[2] =  "+".$coords[1];    
  }
  else //Second value is - for the longitude
  {
    $coords=explode("-",$sub_coord);
    $returnArray[0] = 0;    
    $returnArray[1] =  $lat_sign.$coords[0];
    $returnArray[2] =  "-".$coords[1];      
  }


  return $returnArray;
}