2016-11-01 1 views
0

Если я сделать:Как изменить формат результата geojson?

function app(e) { 
    var $tar = e.target.getLatLngs(); 
    alert($tar); 
} 

function onEachFeature(feature, layer) { 
    layer.on({ 
     click: app 
    }); 
} 

Я получаю предупреждение:

LatLng(19.08348, -155.54211), 
LatLng(18.91619, -155.68817), 
LatLng(19.05939, -155.93665), 
LatLng(19.33888, -155.90806), 
LatLng(19.70294, -156.07347), 
LatLng(19.81422... 

Но мне нужно, чтобы получить формат, как:

[19.08348, -155.54211], 
[18.91619, -155.68817], 
[19.05939, -155.93665], 
[19.33888, -155.90806], 
[19.70294, -156.07347], 
[19.81422... 
+1

почему я получил вниз голосование я не знаю ... –

+0

мы не знаю, что такое LatLng. Является ли это подклассом Array? он реализует .x и .y? Если позже, вы можете просто нарисовать '' 'let arr = $ tar.map (lngLat => [lngLat.x, lngLat.y])' '' – user753642

+0

@ user753642 Я не уверен быть честным, просто изучая буклет. То, что я знаю, это то, что я получаю это в предупреждении после щелчка, поэтому я просто спрашиваю что-то вроде: ok, я понял, как это может стать? –

ответ

2

Вы могли бы перебрать массив элементов и вставьте их в новый массив (с желаемым форматом). См один способ сделать это ниже:

ОБНОВЛЕНО НА ОСНОВЕ ЧАТ

$(function() { 
 
    // Assuming a whole bunch of latlngs 
 
    var target = []; 
 

 
    // these would come from your original e.target.getLatLngs(); 
 
    // I am just making some up for this demo 
 
    for (i = 0; i < 10; i++) { 
 
    var latlng = L.latLng(i, i); 
 
    target.push(latlng); 
 
    } 
 

 
    alert(target); 
 

 
    /* you only need the code from here on, right after your own alert(...) */ 
 
    
 
    // will hold the newly formatted values 
 
    var newLatLng = []; 
 

 
    // convert to new format 
 
    /** UPDATED Based on chat comments */ 
 
    $.each(target, function(index, value) { 
 
    if(value.length){ 
 
     $.each(value, function(ind, val) { 
 
     var latLngArr = [val.lat, val.lng]; 
 
     newLatLng.push(latLngArr); 
 
     }); 
 
    }else{ 
 
     var latLngArray = [value.lat, value.lng]; 
 
     newLatLng.push(latLngArray); 
 
    } 
 
    }); 
 

 
    console.log(newLatLng); 
 
    alert(JSON.stringify(newLatLng)); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://unpkg.com/[email protected]/dist/leaflet.js"></script>

+0

, когда я применяю это, я получаю 'LatLng (0, 0), LatLng (1, 1), LatLng (2, 2), LatLng (3, 3), LatLng (4, 4), LatLng (5, 5), LatLng (6, 6), LatLng (7, 7), LatLng (8, 8), LatLng (9, 9) ' –

+0

@ rob.m на начальном оповещении, да, на выходе (для консоли) нет - я также выведу на предупреждение, чтобы проиллюстрировать – ochi

+0

ok спасибо, я вижу их в консоли, но ваш код не получает фактических значений (я знаю, что вы что-то сделали для демоверсии). Но основываясь на моем вопросе, где я действительно получаю значения, как бы реализовать его с вашей стороны? –

3

Если это просто вопрос форматирования, то вы можете просто сделать это:

function app(e) { 
    var $tar = e.target.getLatLngs(); 

    var formattedTar = $tar.map(function(obj) { // Loops through each Latlng object 
     return [obj.lat, obj.lng]; // and returns an array instead 
    }); 

    console.log(formattedTar); 
} 

U бновить:

Если вы хотите напечатать массив, попробуйте вместо этого:

alert(JSON.stringify(formattedTar)); 

Демо:JSFiddle

+0

Я бы хотел использовать это, потому что проще, чем другой ответ, но когда я нажимаю i, я получаю предупреждение. ,,,,,,,,,,,,,,,,,,, ' –

+0

Я добавил JSFiddle, чтобы продемонстрировать печать массива массивов. – technophobia

+0

Я получаю null, null как значения в массивах –