20 votos

postgis, extrapolar una línea de

Estoy tratando de extrapolar a partir de un segmento de línea para encontrar un punto en la línea, pero un 3º de la forma 'de nuevo', es decir, tratando de encontrar el punto de new, dado puntos A y B a continuación:

enter image description here

Dada una línea, me pueden interpolar para obtener una posición en un determinado porcentaje a lo largo de ella:

=# select st_line_interpolate_point(
   st_makeline('0101000020E6100000300DC347C49418C03EE8D9ACFAA44A40', 
               '0101000020E6100000FB743C66A03218C0CDCCCCCCCC7C4A40'), 
   0.333);
0101000020E6100000ED45B41D537718C069C6A2E9EC984A40

Traté de introducir un número negativo para encontrar un punto a lo largo de la línea en la dirección opuesta, pero que falla como la interpolación argumento tiene que estar en el rango [0, 1]

Pensé en primer lugar la ampliación de la línea, pero que no utilice el centro de la línea como en el origen, por lo que es inútil para mis propósitos.

22voto

De otra manera, me han resuelto un problema similar anteriormente es dividir en los siguientes pasos.

-- get the points A and B given a line L
A := ST_STARTPOINT(L);
B := ST_ENDPOINT(L);

-- get the bearing from point B --> A
azimuth := ST_AZIMUTH(B,A);

-- get the length of the line A --> B
length := ST_DISTANCE(A,B);
newlength := length + (length * (1/3));   -- increase the line length by 1/3

-- create a new point 1/3 as far away from A as B is from A
newpoint := ST_TRANSLATE(A, sin(azimuth) * newlength, cos(azimuth) * newlength);

EDIT: se fija la asignación de newlength por lo que es 1 1/3 de la longitud, en lugar de 1/3 y cambió de a & B en torno a coincidir con el diagrama.

6voto

matt b Puntos 73770

Lo ha solucionado con:

F = 1.3333
st_affine(A, F, 0, 
             0, F, 
            (F-1)*-st_x(st_line_interpolate_point(st_makeline(A, B), 0.5)), 
            (F-1)*-st_y(st_line_interpolate_point(st_makeline(A, B), 0.5))
          )

Explicación:

(2-d) Escala el punto de inicio por un factor de 1.3333, tomando el punto medio del segmento de línea como en el origen de escala.

Obtener el gráfico de papel!

http://en.wikipedia.org/wiki/Affine_transformation

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