Próximos post sobre segmentos al punto más cercano (replicando los post de Jose Guerrero en gvSIG)

Seguidores de la programación en PyQGIS conoceréis de sobra el blog de Jose Guerrero, en el que pone una gran cantidad de información sobre el tema de programación en QGIS muy bien explicada, si os interesa el tema totalmente obligatoria su visita.

En próximos post intentaré replicar alguno de sus post como son los de la creación de segmentos que unan las geometrías más cercanas. En gvSIG ahora mismo tengo que utilizar una librería que es jts, creo que directamente desde código no puedo calcular el punto más cercano desde un punto a una línea (refiriéndome a sacar con qué punto de esa línea hace el cálculo).

A falta de que pregunte, (que para eso son estas cosas para aprender, yo el primero), he utilizado la librería jts convirtiendo las geometrías de gvSIG y viceversa. De seguro que esta no es la mejor forma, pero por ahora nos valdrá. Lo veremos en los próximos post.

Ahora, un pequeño ejemplo de como sería utilizar esta librería. Aquí podéis ver su javadoc:

 


from gvsig import *
from geom import *

def gv2jts(geom1):
    import com.vividsolutions.jts as jts
    import com.vividsolutions.jts.io as io
    geomWKT = str(geom1.convertToWKT())
    wktReader = io.WKTReader
    wkt = wktReader()
    gI = wkt.read(geomWKT)
    return gI
    
def main(*args):

    line1 = createGeometry(2)
    line1.addVertex(createPoint(0, 0))
    line1.addVertex(createPoint(10,10))
    line1.addVertex(createPoint(20,10))

    line2 = createGeometry(2)
    line2.addVertex(createPoint(5,0))
    line2.addVertex(createPoint(5,2))
    line2.addVertex(createPoint(6,3))
    line2.addVertex(createPoint(10,0))
    print line1, line2
    print type(gv2jts(line1))

    print line1.convertToWKT()
    print line2.convertToWKT()

    l1 = gv2jts(line1)
    l2 = gv2jts(line2)

    import com.vividsolutions.jts.operation.distance.DistanceOp as DistanceOp
    d = DistanceOp(l1, l2)
    nearestPoints = d.nearestPoints()
    print nearestPoints
    print "Punto de geom 1: ", nearestPoints[0]
    print "Punto de geom 2: ", nearestPoints[1]
    pass

saliendo por consola:

Running script test_jts_nearest.
Curve2D Curve2D
<type 'com.vividsolutions.jts.geom.LineString'>
LINESTRING (0 0, 10 10, 20 10)
LINESTRING (5 0, 5 2, 6 3, 10 0)
array(com.vividsolutions.jts.geom.Coordinate, [(3.5, 3.5, NaN), (5.0, 2.0, NaN)])
Punto de geom 1:  (3.5, 3.5, NaN)
Punto de geom 2:  (5.0, 2.0, NaN)
Script test_jts_nearest terminated.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: