Estoy usando Leaflet y estoy tratando de crear una polilínea y puntos de marcador, pero da latitud y longitud opuestas, así que tengo que intercambiarlos. Crear un marcador es fácil porque solo tiene un par de latitud y longitud, pero crear una polilínea es complicado porque tiene muchos puntos.
A continuación se muestra lo que estoy usando actualmente para intercambiar latitud y longitud por puntos de marcador.
var splitObj = objVal.toString().split("],["); var latlng = splitObj.map(function(x) { var couple= (/\d+.\d+, \d+.\d+/g).exec(x).toString(); var splitted = couple.split(", "); return "["+splitted[1]+","+splitted[0]+"]"; }); latlng.join();Resultado:
['[[a, b], [c, d], [e, f]]'] // este es el objVal
expectativa:
['[[b,a], [d,c], [f,e]]']
la realidad:
['[licenciado en Letras]']
map sobre la matriz y, para cada matriz interna, devuelva una nueva matriz después de intercambiar los elementos.
const data = [[124.432841, 8.3963], [124.496898, 8.3963], [124.571937, 8.40898]]; const result = data.map(arr => { return [arr[1], arr[0]]; }); console.log(result);Suponiendo que la entrada es una cadena de valores similares a una matriz anidada, la siguiente solución puede ayudar a transformar/intercambiar valores de latitud y longitud.
Fragmento de código
const inpVal = ['[[a, b], [c, d], [e, f]]']; // helper method to strip first & last char of a string const stripFirstLast = s => s.slice(1, s.length - 1); // helper method to swap lat & longitutde values const swapLatLon = ([lat, lon]) => [lon, lat]; // place holder to safe-keep value of input const tmp = stripFirstLast(inpVal[0]) .replaceAll('], ', '] | ') .split(' | '); // calculate the result const res = ["[" + tmp.map( x => '[' + swapLatLon( stripFirstLast(x).split(', ') ).join(', ') + ']' ).join(', ') + "]" ]; // console-log to validate/verify console.log( 'input: ', inpVal, '\nresult: ', res );Explicación
Los comentarios en línea explican el enfoque utilizado.
Intercambiar con valores reales (y no cadenas)
Esta es una réplica casi exacta de la solución/respuesta de Andy con solo un cambio en lugar de manejar la matriz interna como
arr, el iterador accede directamente a los valores de latitud y longitud. Creo que hace que la solución sea un poco más fácil de leer.
// Previous solution where the orig data was not taken as a string const swapLoLa = arr => arr.map(([lon, lat]) => [lat, lon]); const orig = [[124.432841, 8.3963], [124.496898, 8.3963], [124.571937, 8.40898]]; console.log( 'orig arr: ', orig, '\nswapped arr: ', swapLoLa(orig) );