Estoy tratando de extrapolar desde un segmento de línea para encontrar un punto en la línea pero un tercio del camino 'atrás', es decir, tratando de encontrar un punto new
, puntos dados A
y B
abajo:
Dada una línea, puedo interpolarla para obtener una posición en cualquier porcentaje en particular:
=# select st_line_interpolate_point(
st_makeline('0101000020E6100000300DC347C49418C03EE8D9ACFAA44A40',
'0101000020E6100000FB743C66A03218C0CDCCCCCCCC7C4A40'),
0.333);
0101000020E6100000ED45B41D537718C069C6A2E9EC984A40
Intenté ingresar un número negativo para encontrar un punto a lo largo de la línea en la dirección opuesta, pero eso falla ya que el argumento de interpolación tiene que estar en el rango [0, 1]
Pensé en escalar primero la línea, pero eso no usa el centro de la línea como el origen, por lo que es inútil para mis propósitos.
fuente
Lo hemos resuelto con:
Explicación:
(2-d) Escale el punto de inicio en un factor de 1.3333, tomando el punto medio del segmento de línea como el origen de la escala.
¡Saca el papel cuadriculado!
http://en.wikipedia.org/wiki/Affine_transformation
fuente
Escribí una función para esto:
Uso:
Tenga en cuenta que esto produce la cadena lineal más larga pero no el punto final.
Código en GitHub Gist (si votas aquí también agradecería una estrella)
Descripción de los parámetros (en caso de que los haya perdido en el comentario de la función sql):
fuente
original_length * head_rate + head_constant
. Si desea que se duplique, la tasa de carga es 2, la constante es 0. En Hungría, normalmente utilizamos la proyección EOV, que se basa en medidores. Entonces, si quiero agregar 2 metros al final de la línea, configuro tail: rate a 1 y tail_constant a 2.