segundos planas para minutos manualmente gratis grados google geograficas earth decimales coordenadas convertir convertidor como javascript regex geolocation gps geocoding

javascript - planas - Conversión de latitud y longitud a valores decimales



convertir grados minutos y segundos a decimales en excel (7)

Tengo la información del GPS presentada en el formulario:

36 ° 57''9 "N 110 ° 4''21" O

Puedo usar las funciones javascript de Chris Veness para convertir grados, minutos y segundos a grados numéricos, pero primero debo analizar la información del GPS en las cadenas de latitud y longitud individuales (con sufijos NSEW). He leído publicaciones relacionadas sobre stackoverflow, pero no soy un experto en expresiones regulares (ni un programador) y necesito ayuda con la función de análisis. ¿Cuál es la mejor manera de analizar esta cadena en latitud y longitud para usar en la función de conversión?

El resultado de todo esto será un enlace web en el que se puede hacer clic para ver una representación de ubicación en el mapa de Google.


Aquí está mi opinión sobre esto:

function parse_gps( input ) { if( input.indexOf( ''N'' ) == -1 && input.indexOf( ''S'' ) == -1 && input.indexOf( ''W'' ) == -1 && input.indexOf( ''E'' ) == -1 ) { return input.split('',''); } var parts = input.split(/[°''"]+/).join('' '').split(/[^/w/S]+/); var directions = []; var coords = []; var dd = 0; var pow = 0; for( i in parts ) { // we end on a direction if( isNaN( parts[i] ) ) { var _float = parseFloat( parts[i] ); var direction = parts[i]; if( !isNaN(_float ) ) { dd += ( _float / Math.pow( 60, pow++ ) ); direction = parts[i].replace( _float, '''' ); } direction = direction[0]; if( direction == ''S'' || direction == ''W'' ) dd *= -1; directions[ directions.length ] = direction; coords[ coords.length ] = dd; dd = pow = 0; } else { dd += ( parseFloat(parts[i]) / Math.pow( 60, pow++ ) ); } } if( directions[0] == ''W'' || directions[0] == ''E'' ) { var tmp = coords[0]; coords[0] = coords[1]; coords[1] = tmp; } return coords;

}

Esta función no maneja todos los tipos de tipos lat / long, pero maneja los siguientes formatos:

-31,2222,21.99999 -31 13 13 13.75S, -31 13 13 13.75W -31 13 13 13.75S -31 13 13 13.75W -31 13 13 13.75W -31 13.75S 36°57''9" N 110°4''21" W 110°4''21" W 36°57''9"N

Que es lo que necesitaba.


Corrigió las funciones anteriores y convirtió la salida en un objeto.

function ParseDMS(input) { var parts = input.split(/[^/d/w/.]+/); var lat = ConvertDMSToDD(parts[0], parts[2], parts[3], parts[4]); var lng = ConvertDMSToDD(parts[5], parts[7], parts[8], parts[9]); return { Latitude : lat, Longitude: lng, Position : lat + '','' + lng } } function ConvertDMSToDD(degrees, minutes, seconds, direction) { var dd = Number(degrees) + Number(minutes)/60 + Number(seconds)/(60*60); if (direction == "S" || direction == "W") { dd = dd * -1; } // Don''t do anything for N or E return dd; }


Joe, el guión que has mencionado ya hizo lo que quieres. Con él puede convertir lat y long y ponerlo en un enlace para ver la ubicación en el mapa de Google:

var url = "http://maps.google.com/maps?f=q&source=s_q&q=&vps=3&jsv=166d&sll=" + lat.parseDeg() + "," + longt.parseDeg()


Mi versión modificada obliga a las partes de la cadena a Números para que realmente se puedan agregar en lugar de concatenar. También maneja valores decimales que son comunes para el componente Segundos:

function ParseDMS(input) { var parts = input.split(/[^/d/w/.]+/); var lat = ConvertDMSToDD(parts[0], parts[1], parts[2], parts[3]); var lng = ConvertDMSToDD(parts[4], parts[5], parts[6], parts[7]); }

Lo siguiente convertirá su DMS a DD

function ConvertDMSToDD(degrees, minutes, seconds, direction) { var dd = Number(degrees) + Number(minutes)/60 + Number(seconds)/(60*60); if (direction == "S" || direction == "W") { dd = dd * -1; } // Don''t do anything for N or E return dd; }


Para analizar su entrada use lo siguiente.

function ParseDMS(input) { var parts = input.split(/[^/d/w]+/); var lat = ConvertDMSToDD(parts[0], parts[1], parts[2], parts[3]); var lng = ConvertDMSToDD(parts[4], parts[5], parts[6], parts[7]); }

Lo siguiente convertirá su DMS a DD

function ConvertDMSToDD(degrees, minutes, seconds, direction) { var dd = degrees + minutes/60 + seconds/(60*60); if (direction == "S" || direction == "W") { dd = dd * -1; } // Don''t do anything for N or E return dd; }

Así que su aporte produciría lo siguiente:

36°57''9" N = 36.9525000 110°4''21" W = -110.0725000

Las coordenadas decimales se pueden incluir en google maps para obtener puntos a través de GLatLng(lat, lng) ( API de Google Maps )


Tengo algunos NaN en esta función y necesito hacer esto (no me preguntes por qué)

function ConvertDMSToDD(days, minutes, seconds, direction) { var dd = days + (minutes/60) + seconds/(60*60); dd = parseFloat(dd); if (direction == "S" || direction == "W") { dd *= -1; } // Don''t do anything for N or E return dd; }


Usé / d + (/, / d +) y / d + (. / D +) porque puede tener números flotantes

Mi función final:

convertDMSToDD: function (dms) { let parts = dms.split(/[^/d+(/,/d+)/d+(/./d+)?/w]+/); let degrees = parseFloat(parts[0]); let minutes = parseFloat(parts[1]); let seconds = parseFloat(parts[2].replace('','',''.'')); let direction = parts[3]; console.log(''degrees: ''+degrees) console.log(''minutes: ''+minutes) console.log(''seconds: ''+seconds) console.log(''direction: ''+direction) let dd = degrees + minutes / 60 + seconds / (60 * 60); if (direction == ''S'' || direction == ''W'') { dd = dd * -1; } // Don''t do anything for N or E return dd; }