7 votos

¿Cómo muestrear una trama 3D a lo largo de una trayectoria 3D (o una trama 4D a lo largo de una trayectoria 4D)?

Tengo un conjunto de datos rasterizados en 3D de variables atmosféricas (lat x lon x altitud). Me gustaría muestrear este conjunto de datos rasterizados a lo largo de una ruta 3d.

¿Alguna idea de cómo puedo lograr esto, preferiblemente con qgis o postgis o rasdaman?

Editar: En realidad, mis datos son 4d (tiempo x lat x lon x altitud), pero tener una solución 3d ya sería genial.

0 votos

¿Podría explicar el sentido en el que un "polígono" 3D puede ser interpretado como un camino ? ¿Quiere decir que su límite está pensado como un camino, o quizás está preguntando sobre el muestreo de la trama en todo el polígono en sí (incluyendo su interior)? Y cuando se utiliza "polígono", ¿se presupone (como en el sentido matemático convencional) que es planar ?

1 votos

@whuber por supuesto que tienes razón, esto no tiene sentido. Olvídate del polígono, simplemente quiero hacer un muestreo a lo largo de un camino 3d.

0 votos

Es probable que tengas que hornear tu propio interpolación trilineal con arrays NumPy. Tengo una solución de interpolación bilineal para GDAL (2D) si necesitas inspiración.

1voto

huckfinn Puntos 698

¿Algo de interpolación lineal como esto?

    # -----------------------------------------------------------
    # Pseudo code adopted from R
    # -----------------------------------------------------------
    # Linear interpolation of a 3D line segment in a fixed time interval
    # startT Start in Time
    # startX Start in X
    # startY Start in Y
    # startZ Start in Y
    # endT   End in Time
    # endX   End in X
    # endY   End in Y
    # endZ   End in Z
    # steps  if == 0 steps are calculater from by the time interval
    # -----------------------------------------------------------
    dataFrame function sampleLineTime4D(
       int startT, int endT, 
       double startX, double endX, 
       double startY, double endY, 
       double startZ, double endZ, 
       int steps=0) {

      # gradient
      double dt = endT - startT;
      double dx = endX - startX;
      double dy = endY - startY;
      double dz = endZ - startZ;
      if (steps == 0) steps = dt;

      # relative stepsize
      double st = dt / steps;
      double sx = dx / steps;
      double sy = dy / steps;
      double sz = dz / steps;

      # definition of an empty vector set for T X Y and Z
      Vector<double> vx = new Vector();
      Vector<double> vx = new Vector();
      Vector<double> vy = new Vector();
      Vector<double> vz = new Vector();

      # Iteration over te steps
      for (int s=0; s<steps; s++) {
        vt.add(startT+st*s);
        vx.add(startX+sx*s);
        vy.add(startY+sy*s);
        vz.add(startZ+sz*s);
      } # Ende der schleife 

      return (dataFrame(t=rt, x=rx, y=ry, z=rz));
    }

1voto

nmtoken Puntos 1096

Ciertamente podrías cargar estos datos rasterizados en Rasdaman (usando Postgresql como base de datos subyacente), luego usar la interfaz de Petascope para proveer un servicio WCS/WCPS y consultar los datos de esa manera, o usar el lenguaje de consulta interno RASQL para hacer la misma consulta. Ver el Páginas de la Universidad Jacobs para ver ejemplos de uso de Rasdaman para datos multidimensionales.

Los detalles de cómo hacer esto son un poco enrevesados para detallarlos aquí, pero la comunidad de desarrollo de Rasdaman es muy activa, y hay un montón de documentación .

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X