从Geo loaction字符串中提取Lat / Lng

时间:2016-04-24 06:11:42

标签: javascript regex

我有一个Geo位置字符串为 25°9'37“N 55°13'28”E 。使用JavaScript Regex我想从上面的字符串中提取Lat和Lng。 感谢。

1 个答案:

答案 0 :(得分:2)

  

您的第一行可能是“25°9'37”N是纬度的分钟格式,您可能想要提取它的值并转换为它的十进制度表示,这样可以对其进行进一步计算。 @Stormwind

根据this博文,转换公式为

//latitude formula
([LATITUDE_DEG])+([LATITUDE_MIN]/60)+([LATITUDE_SEC]/3600))*
IF [Latitude_Direction]="South" THEN -1 ELSE 1 END

//longitude
([LONGITUDE_DEG]+([LONGITUDE_MIN]/60)+([LONGITUDE_SEC]/3600))*
IF [Longitude_Direction]="West" THEN -1 ELSE 1 END

正则表达式(简单)

//latitude
25°9'37"N
/(\w+)°(\w+)'(\w+)"(\w+)/
`25`, `9`, `37`, `N`

//regex from @PranavCBalan also works well
/(\d+)°(\d+)'(\d)+"([NEWS])/
`25`, `9`, `37`, `N`

纬度解决方案(简单) - 请注意,此解决方案容易出错,因为它是在5分钟内写的,所以要小心

var lat_str = "25°9'37\"N"; //escaped string
lat_str = lat_str.replace('\"', '"'); //little trick
var matches = lat_str.match(/(\w+)°(\w+)'(\w+)"(\w+)/); //regexify
var lat_deg = parseInt(matches[1]); //degrees
var lat_min = parseInt(matches[2]); //minutes
var lat_sec = parseInt(matches[3]); //seconds
var lat_dir = matches[4];           //direction

var latitude = (lat_deg+(lat_min/60)+(lat_sec/3600))*(lat_dir === 'N' ? 1 : -1);

//25.160277777777775

经度解决方案

//same as latitude (except direction check), do it as your homework

有关详细信息,请参阅Converting Latitude/Longitude from Degrees/Minutes/Seconds to Decimal Degrees