2016-04-24 2 views
0

У меня есть строка местоположения Geo как 25 ° 9'37 "N 55 ° 13'28" E. Использование JavaScript Regex Я хочу извлечь Lat и Lng из указанной выше строки. Спасибо.экстракт Lat/Lng от строки geo loaction

+1

'вар Рез = "25 ° 9'37 \" N 55 ° 13'28 "E \" .match (/ \ D + ° \ d + '\ d + "[NEWS]/g)' –

+0

Я вижу пробел между каждым значением. вы можете просто выполнить разделение строк и использовать значения справа –

+0

@PranavCBalan. Ваше предложение сработало для меня. Большое спасибо за идеальное решение. –

ответ

2

Вашей первая строка может быть «25 ° 9'37» N является минутной формат широты, вы, вероятно, хотите, чтобы извлечь его ценность и преобразовать это десятичное представление степени, это дает возможность дальнейшему расчету по нему. @Stormwind

В соответствии с this BlogPost, формула преобразования

//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 

Regex (простой)

//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

+0

Это утверждение «25 ° 9'37» N означает значение десятичной степени - не широта, вы должен преобразовать его в Latitude ». Это очень неустойчиво. Конечно, это значение широты, минут и даже секунд. Вы частично отвечаете на то, что не задано в вопросе, т. е. как преобразовать эту пару lat/lon minute в десятичные градусы Возможно, это то, чего он в конце концов хочет, но это не так выразительно. Минута lat обычно равна dd ° mm.mm '(где m = 0 ... 59.99 - и секунды не являются современными), тогда как десятичная лат dd.dddd ... ° Для выполнения вычислений на нем используется представление десятичной степени. – Stormwind

+0

@Stormwind Я думаю, что OP ожидал обычных значений широты, таких как '23.23232' _Использование JavaScript Regex Я хочу добавить ct Lat и Lng из вышеуказанной строки_ OP хочет получить __Lat__ от '25 ° 9'37 'N', поэтому ему нужно извлечь графы/мин/сек из строки, затем преобразовать в градус, чтобы получить широту, согласованную? –

+0

Возможно, он хотел, поэтому ваше решение в порядке. Но вы должны исправить свое первое предложение. Это, безусловно, широта, а также «обычная», если таковая имеется, и она не является значением десятичной степени. Они не используют десятичный лат/лон в море, будьте уверены. Ваша первая строка может быть «25 ° 9'37» N - это минутный формат широты, вы, вероятно, захотите извлечь ее значения и преобразовать в десятичное представление, это позволяет провести дальнейшие вычисления на ней »или аналогично. не будь таким вводящим в заблуждение, потому что этот текущий светит по-настоящему красным в моих глазах :-). – Stormwind

Смежные вопросы