2014-04-29 3 views
1

Я использовал OpenLayers для создания форматированной широты; например:Преобразование форматированной строки в широту или долготу

OpenLayers.Util.getFormattedLonLat(bounds.top, 'lat'); 

, который производит строку 57°42'32"N. Значение bounds.top равно 57.70889832055789 в десятичных градусах.

Это прекрасно. Но как я могу сделать обратное использование OpenLayers? Если пользователь вводит String как 57°42'32"N, как я могу использовать OpenLayers для преобразования его в десятичные степени, как используется, например, OpenLayers.LonLat или OpenLayers.Bounds?

+0

Каков формат, необходимый для [ввода] (http://dev.openlayers.org/releases/OpenLayers-2.10/doc/apidocs/files/OpenLayers/BaseTypes/LonLat-js.html), например десятичные градусы или некоторые из значений, разделенных символами? – RobG

+0

Десятичные градусы используются для ввода в LonLat. – tbsalling

ответ

2

Это должно быть достаточно, чтобы разобрать строку и вычислить рациональное число от градусы, минуты и секунды, как:

var input = "50° 20' 12''"; 
var coord = input.match(/[0-9]+/g); 
var lat = parseFloat(coord[0]) + coord[1]/60.0 + coord[2]/3600.0 ; 
if(/S|W/i.test(input)) lat *= -1; 

Конечно, вы должны проверить на правильность ввода и инициализировать массив с на 3 поля 0.

+0

Да; это сработает. Но я искал способ использовать OpenLayers для этой цели. Возможно, ваш код должен быть им полезен :-) – tbsalling

+1

Хорошо, не уверен, такого метода еще не существует, но это было бы гораздо более надежным, так как существует множество возможных форматов, в которых может быть LatLong. См. [Http://www.geomidpoint.com/latlon.html](http://www.geomidpoint.com/latlon.html) – SeDav

+1

Вместо * match *, вышесказанное может использовать 'input.split (/ \ D +/g) ', разница в том, что * split * всегда возвращает массив, тогда как * match * может возвращать значение null, но лучше справляется с ведущими и конечными нецифровыми. В любом случае результат должен быть проверен перед использованием. – RobG

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