2013-12-05 6 views
0

Я использую Mapbox для отображения карты на своей веб-странице. Когда пользователь перемещает маркер, я хочу получить новые координаты lat/lng и сохранить их.Удаление GPS-координат из строки

Чтобы получить LAT/LNG координаты Я использую функцию:

marker.getLatLng() 

который возвращает следующее:

LatLng(51.5096, -0.20256) 

Это хорошо работает, но я хотел бы координаты, разделенные двумя переменными , например:

var lat = 51.5096; 
var lng = -0.20256; 

Как я могу отделить их в JQuery? Я подумал о том, чтобы просто удалить первое вхождение LatLng(, а затем удалить последнее вхождение ), а затем разделить строку запятой. Однако это кажется излишним и хотелось бы знать предпочтительный способ сделать это.

МОЙ РАБОЧИЙ FIX

var latlng = marker.getLatLng(); 
var new_latlng = latlng.toString().split('(').pop().split(')').shift().split(',') 
var marker_lat = new_latlng[0].trim(); 
var marker_lng = new_latlng[1].trim(); 
+3

Зачем это перегиб? 'str.split ('('). pop(). split (')'). shift(). split (',')' – adeneo

+0

@adeneo, не могли бы вы добавить это в качестве ответа. Я действительно использовал ваше предложение и было бы хорошо принять что-то. Когда я говорю «overkill», я имел в виду ** мой метод расщепления был излишним, как это было на 4 строках. Твои казались менее короткими, чем мои, и все было на одной линии, поэтому я использовал это. Я также узнал о появлении и перемещении, что было приятно. Я думал, это то, что я хотел сделать на танцполе. – TheCarver

+0

Я добавил то, что решил использовать в нижней части моего вопроса. – TheCarver

ответ

1

Если строка никоим образом не меняется, но остается неизменной, разделение на самом деле неплохая идея, и с помощью shift() и pop() вы можете сделать все в одной строке:

str.split('(').pop().split(')').shift().split(',') 
+0

Спасибо, Adeneo! – TheCarver

2

Ваш путь не будет излишним и был бы совершенно нормально для обработки строки. Я не вижу там проблемы. В любом случае, если вы хотите сделать что-то более фантазии, не обязательно лучше, вот одно решение:

var str = "LatLng(51.5096, -0.20256)"; 
eval(str); // do try... catch here 

function LatLng(lat,lng){ 
    alert(lat); 
    alert(lng); 
    // do what you want with them 
} 

так, чтобы создать функцию LatLng и Eval Строка

+0

Спасибо за ваши усилия. Я думаю, что вы правы в том, что Regex и Eval стоят дороже строковых функций, поэтому я пошел с предложением Adeneo, используя Pop и Shift, все на одной линии. – TheCarver

1

Используйте регулярное выражение для этого -

var coordArray = "LatLng(51.5096, -0.20256)".match(/LatLng\(([^,]*)\,\s([^,]*)\)/), 
    lat = coordArray[1], 
    long = coordArray[2]; 
+1

Да! Я тоже об этом думал. Eval и RegExp стоят дорого, я думаю, в конце концов, обычные строковые функции были лучшими –

+0

@hRvoed, спасибо за ваши усилия, вы оба. Я думаю, что вы правы в том, что Regex и Eval стоят дороже строковых функций, поэтому я пошел с предложением Adeneo, используя Pop и Shift, все на одной линии. – TheCarver

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