• Sábado 4 de Julio de 2020, 22:33

Autor Tema:  Asignacion de cuadrantes a coordenadas geograficas ingresadas  (Leído 1709 veces)

Chewii79

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Asignacion de cuadrantes a coordenadas geograficas ingresadas
« en: Miércoles 18 de Enero de 2017, 23:20 »
0
En mi trabajo manejamos un mapa que esta dividido en cuadrantes o cuadriculas, el tamaño de estas cuadriculas es de 5x5, como se observa en la siguiente imagen:

 El proceso para determinar en que cuadrante se ubica cada coordenada se realiza totalmente a mano, de la siguiente manera: Se toman solo los grados de cada coordenada, posteriormente se ubican en los ejes X e Y y con una regla se trazan las dos lineas, y desde el punto donde se intersectan se ubica dicho cuadrante. Este proceso se realiza a todas las bitacoras de pesca que se registran en el año (este año pasado se registraron cerca de 450 bitacoras entre todas las flotas pesqueras), estas se registran en Excel, y de ahi se comienza el largo proceso para los diferentes informes que se presentan a final de año; mi idea fue realizar un formulario de prueba donde se registren solo las coordenadas geograficas, posteriormente me hace el calculo en numero decimal y lo asigna a una caja de texto, hasta ahi todo esta bien. Para poder asignar los cuadrantes a las coordenadas registradas en las bitacoras, estableci valores de maximos y minimos tanto en la latidud como en la longitud, y de ahi parti para hacer los condicionales, pero no me salio al idea. Aqui les enviar el código html y javascript para hacer dichos calculos.
Código: [Seleccionar]
<html>
<body>
<form name="form1" method="post" action="">
  <p>LATITUD:
        <input type="text" name="lat" id="lat" onKeyUp="masclat(this.value)" >
    LAT_DECIMAL:
   <input type="text" name="latd" id="latd">
  </p>
  <p>LONGITUD:
        <input type="text" name="lon" id="lon" onKeyUp="masclong(this.value)" >
    LONG_DECIMAL:
    <input type="text" name="lond" id="lond" >
  </p>
  <p>QD:
       <input type="text" name="qd" id="qd">
  </p>
</form>
</body>
</html>
Y aqui va el codigo javascript para la mascara de grados y minutos, calculos a decimales y asignacion de cuadrante, en esta ultima funcion utilice como referencia la coordenada 10°28'N y 64°11'O, que se ubica en el cuadrante N° 22.
Código: [Seleccionar]
/****************************VALIDACION DE  LA LATITUD P/FORMULARIOS CON UNA SOLA POSICION********************************/
function masclat(lat){
 var mylat = '';
 mylat = mylat + lat;
 if (mylat.length == 2){
    mylat = mylat + '°';
    document.forms[0].lat.value = mylat;
 }
    if (mylat.length == 5){
        mylat = mylat + '´';
        document.forms[0].lat.value = mylat;
        verifica_coordl();
    }
}     
function verifica_coordl(){ //Funcion que verifica las coordenadas de latitud correctas
 m1= 1;
 var dec=''
 gds = (document.forms[0].lat.value.substring(0,2));
 min = (document.forms[0].lat.value.substring(3,5));
 situacao = ""; // verifica grados y minutos
 if ((gds < 00) || (gds > 25)){
     situacao = "falsa";
 }
     if (( min < 00) ||( min > 59)){
         situacao = "falsa";
     }                  
         if (document.forms[0].lat.value == "") {
             situacao = "falsa";
         }
             if (situacao == "falsa") {
                 alert("Posicion Invalida!");
                 document.forms[0].lat.focus();
              }
            dec = (parseFloat(gds) + (min / 60.0)) * m1;
            document.forms[0].latd.value = dec;     
}
/****************************VALIDACION DE LA LONGITUD P/FORMULARIOS CON UNA SOLA POSICION********************************/
function masclong(lon){
 var mylong = '';
 mylong = mylong + lon;
 if (mylong.length == 2){
     mylong = mylong + '°';
     document.forms[0].lon.value = mylong;
 }
     if (mylong.length == 5){
         mylong = mylong + '´';
         document.forms[0].lon.value = mylong;
         verifica_coordll();
     }
}     
function verifica_coordll(){ //Funcion que verifica las coordenadas de longitud correctas
 m1= -1;
 var dec=''             
 gds = (document.forms[0].lon.value.substring(0,2));
 min = (document.forms[0].lon.value.substring(3,5));                           
 situacao = ""; // verifica grados y minutos
 if ((gds < 00) || (gds > 80)){
     situacao = "falsa";
 }
     if (( min < 00) ||( min > 59)){
         situacao = "falsa";
     }               
         if (document.forms[0].lon.value == "") {
             situacao = "falsa";
         }
             if (situacao == "falsa") {
                 alert("Posicion Invalida!");
                 document.forms[0].lon.focus();
              }
            dec = (parseFloat(gds) + (min / 60.0)) * m1;
            document.forms[0].lond.value = dec;
}
function cuadrantes(){//Esta es la funcion que utilizo para los cuadrantes
l = (document.forms[0].lat.value.substring(0,2));
lo = (document.forms[0].lon.value.substring(0,2));
latgr = parseFloat(l);
longr = parseFloat(lo);
Alert(latgr,longr);
if ((latgr >= 10) || (latgr <= 15) && (longr >= 60) || (longr <= 65)){
document.forms[0].qd.value = 22;
}
}
Que quiero: Extraer solo la parte de los grados de las posiciones para luego poder hacer las comparaciones, de manera q cuando inserte la posicion en grados y minutos (ya sea latitud o longitud) asigne el numero del cuadrante al campo de texto QD. No se si la funcion esta bien programada, pero asi como esta no funciona. Espero puedan ayudarme. Saludos..

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re:Asignacion de cuadrantes a coordenadas geograficas ingresadas
« Respuesta #1 en: Viernes 20 de Enero de 2017, 20:42 »
0
El método es sencillo...

Imagina un array de cuadrantes 1,2,3,4....X
Tu debes guardar los grados como cuadrantes tanto de Latitud como de Longitud, luego tendrías un array de 360*360 = 129.600 elementos... no son demasiados, pero queda limitado al mapa por donde se mueva la flota...

Imaginemios que el mapa, sin embargo solo ocupa desde la posición 22 hasta la 56.
... entonces... Tendrías estas constantes para definir el inicio y el fin... para la Latitud
Código: [Seleccionar]
constante LatitudMinGrado = 22
constante LatitudMaxGrado = 56
constante Latitudes = (LatitudMaxGrado - LatitudMinGrado)

También tendríamos para el mapa unos límites de cordenadas, para la Longitud:
Código: [Seleccionar]
constante LongitudMinGrado= 131
constante LongitudMaxGrado = 187
constante Longitudes = (LongitudMaxGrado - LongitudMinGrado)


Y por tanto tu array tendría:
Código: [Seleccionar]
constante CuadranteMax = (Longitudes  * Latitudes)
ArrayGrados(desde 0 hasta  CuadranteMax -1)

Ahora queda traducir los grados al cuadrante en el array, que es lo que pides...
Código: [Seleccionar]
Function (in Latitud, in Longitud, out Cuadrante)
    si latitud es menor que LatitudMinGrado salir de la funcion (error, avisar con mensaje, etc...)
    si latitud es mayor que LatitudMaxGrado salir de la funcion (error, avisar con mensaje, etc...)
    LatRelativa = (Latitud - LatitudMinGrado)

    si Longitud es menor que LongitudMinGrado salir de la funcion (error, avisar con mensaje, etc...)
    si Longitud es mayor que LongitudMaxGrado salir de la funcion (error, avisar con mensaje, etc...)
    LonRelativa = (Longitud - LongitudMinGrado)
 
    Cuadrante= ((LonRelativa * Longitudes) + LatRelativa)
Fin Function

Y la función inversa para obtener la latitud y longitud dado un cuadrante sería:
Código: [Seleccionar]
Function( in Cuadrante, out Longitud, out Latitud)
    Longitud = ((Cuadrante \ Longitudes) + LongitudMinGrado)
    Latitud = ((Cuadrante mod Longitudes) + LatitudMinGrado)
Fin Function
« última modificación: Viernes 20 de Enero de 2017, 20:45 por Nebire »
«Ma non troppo»
----> ModoVacaciones = False<----

Chewii79

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re:Asignacion de cuadrantes a coordenadas geograficas ingresadas
« Respuesta #2 en: Lunes 23 de Enero de 2017, 17:04 »
0
Amigo Nebire buenos dias desde Venezuela, acabo de ver tu mensaje, afortunadamente solvente al dia siguiente de postear el mensaje, la solucion que consegui fue la siguiente:

Utilice la misma funcion de coordenadas maximas y minimas para la latitud y la longitud que diseñe, solo que la llame justo despues de llamar a la funcion que me verifica la coordenada de la longitud, saque la tabla de maximos y minimos y me dio como queria; aunq no es tan estetica a nivel de codigo, cumple con lo que requiero, de igual forma voy a probar tu codigo para ver como funciona, y tenerlo por ahi. Muchisimas gracias.. Ya se puede dar el tema como cerrado.