JTS Geometría relación juicio y análisis

 

Juicio de relación

  1. La relación entre geometría es la siguiente:

Igual a:

Las formas geométricas son topológicamente iguales.

Disjunto:

La geometría no tiene puntos en común.

Interseca:

Las formas geométricas tienen al menos un punto común (diferente de disjunto)

Toques:

La geometría tiene al menos un punto límite común, pero no tiene puntos internos.

Cruces:

Las formas geométricas comparten algunos pero no todos los puntos internos.

Con (Dentro):

Las líneas de geometría A están todas dentro de la geometría B.

Contiene:

Las líneas de geometría B están todas dentro de la geometría A (diferente de la inclusión)

Superposiciones:

Las formas geométricas comparten algunos pero no todos los puntos comunes, y tienen su propia área en la intersección.

  1. El siguiente ejemplo muestra cómo usar las operaciones Equals, Disjoint, Intersects, Within:

Código de copia

paquete com.alibaba.autonavi; 

import com.vividsolutions.jts.geom. *; 
import com.vividsolutions.jts.io.ParseException; 
import com.vividsolutions.jts.io.WKTReader; 

/ ** 
 * gemotry 之间 的 关系
 * @author xingxing.dxx 
 * 
 * / 
public class GeometryRelated { 

    private GeometryFactory geometryFactory = new GeometryFactory (); 
    
    / ** 
     * 两个 几何 对象 是否 是 重叠 的
     * @return 
     * @throws ParseException 
     * / 
    public boolean equalsGeo () lanza ParseException { 
        WKTReader reader = new WKTReader (geometryFactory); 
        LineString geometry1 = (LineString) reader.read ("LINESTRING (0 0, 2 0, 5 0)");
        LineString geometry2 = (LineString) reader.read ("LINESTRING (5 0, 0 0)");
        return geometry1.equals (geometry2); // true 
    } 
    
    / ** 
     * 几何 对象 没有 交点 (相邻) 
     * @return 
     * @throws ParseException 
     * / 
    public boolean disjointGeo () lanza ParseException { 
        WKTReader reader = new WKTReader (geometryFactory); 
        LineString geometry1 = (LineString) reader.read ("LINESTRING (0 0, 2 0, 5 0)"); 
        LineString geometry2 = (LineString) reader.read ("LINESTRING (0 1, 0 2)"); 
        return geometry1.disjoint (geometry2); 
    } 
    
    / ** 
     * 至少 一个 公共 点 (相交) 
     * @return 
     * / 
    public boolean intersectsGeo () lanza ParseException {
        WKTReader reader = nuevo WKTReader (geometryFactory); 
        LineString geometry1 = (LineString) reader.read ("LINESTRING (0 0, 2 0, 5 0)"); 
        LineString geometry2 = (LineString) reader.read ("LINESTRING (0 0, 0 2)"); 
        Geometry interPoint = geometry1.intersection (geometry2); // 相交 点
        System.out.println (interPoint.toText ()); // 输出 POINT (0 0) 
        return geometry1.intersects (geometry2); 
    } 

    / ** 
     * 判断 以 x, y 为 坐标 的 点 punto (x, y) 是否 在 geometría 表示 的 Polígono 中
     * @param x 
     * @param y 
     * @param geometry wkt 格式
     * @return 
     * /
    public boolean dentro de Geo (doble x, doble y, geometría de cadena) arroja ParseException { 

        Coordinate coord = new Coordinate (x, y); 
        Punto punto = geometryFactory.createPoint (coord); 

        WKTReader reader = nuevo WKTReader (geometryFactory); 
        Polígono polígono = (Polígono) reader.read (geometría); 
        punto de retorno dentro de (polígono); 
    } 
    / ** 
     * @param args 
     * @throws ParseException 
     * / 
    public static void main (String [] args) lanza ParseException { 
        GeometryRelated gr = new GeometryRelated (); 
        System.out.println (gr.equalsGeo ()); 
        System.out.println (gr.disjointGeo ());
        System.out.println (gr.intersectsGeo ()); 
        System.out.println (gr.withinGeo (5,5, "POLYGON ((0 0, 10 0, 10 10, 0 10,0 0))")); 
    }

}

Código de copia

 

Análisis de relaciones

  1. Existen varios tipos de análisis de relaciones.

Análisis de buffer (Buffer)

Contiene todos los polígonos y polígonos múltiples dentro de una distancia especificada

Análisis de casco convexo (casco convexo)

Casco convexo poligonal que contiene todos los puntos de forma geométrica

Intersección

La operación de intersección A∩B es el conjunto de todos los puntos comunes en el polígono AB

Análisis conjunto (Unión)

La operación conjunta de AUB AB es el conjunto de todos los puntos de AB

Análisis de diferencia (diferencia)

(AA∩B) El análisis de diferencia de la forma AB es el conjunto de todos los puntos en A que no están en B

Análisis de diferencia simétrica (SymDifference)

(AUB-A∩B) El análisis de diferencia simétrica de la forma AB es el conjunto de todos los puntos ubicados en A o B pero no en AB

 

 

 

 

 

 

 

 

 

     2. Veamos ejemplos específicos

Código de copia

paquete com.alibaba.autonavi; 

import java.util.ArrayList; 
import java.util.List; 

import com.vividsolutions.jts.geom.Coordinate; 
import com.vividsolutions.jts.geom.Geometry; 
import com.vividsolutions.jts.geom.GeometryFactory; 
import com.vividsolutions.jts.geom.LineString; 

/ ** 
 * gemotry 之间 的 关系 分析
 * 
 * @author xingxing.dxx 
 * / 
public class Operation { 

    private GeometryFactory geometryFactory = new GeometryFactory (); 

    / ** 
     * crear un Punto 
     * 
     * @param x 
     * @param y 
     * @return 
     * /  
    public Coordinate point (double x, double y) {
        return new Coordinate (x, y); 
    }

 
    / ** 
     * crear una línea 
     * 
     * @return 
     * / 
    public LineString createLine (List <Coordinate> points) { 
        Coordinate [] coords = (Coordinate []) points.toArray (new Coordinate [points.size ()]); 
        LineString line = geometryFactory.createLineString (coords); 
        Linea de retorno; 
    } 

    / ** 
     * 返回 a 指定 距离 内 的 多边形 和 多 多边形
     * 
     * @param a 
     * @param distance 
     * @return 
     * / 
    public Geometry bufferGeo (Geometry a, double distance) { 
        return a.buffer (distance); 
    } 

    / **
     * Devuelve la distancia entre los dos puntos más cercanos en (A) y (B)  
     *
     * @param a 
     * @param b 
     * @return 
     * / 
    public double distanceGeo (Geometry a, Geometry b) { 
        return a.distance (b); 
    } 

    / ** 
     * La intersección de dos objetos geométricos 
     * 
     * @param a 
     * @param b 
     * @return 
     * / 
    public Geometry intersectionGeo (Geometry a, Geometry b) { 
        return a.intersection (b); 
    } 

    / ** 
     * Geometry 
    Fusión de objetos 
     * 
     * @param a 
     * @param b 
     * @return 
     * / public Geometry unionGeo (Geometry a, Geometry b) {
        devolver a.union (b); 
    } 
 
    / ** 
     * Sí en un objeto de geometría A, pero no en un objeto de geometría B
     * 
     * @param a 
     * @param b 
     * @return 
     * / 
    public Geometry differenceGeo (Geometry a, Geometry b) { 
        return a.difference (b); 
    } 


    public static void main (String [] args) { 
        Operación op = nueva Operación (); 
        // 创建 一条 线
        Lista <Coordinate> puntos1 = new ArrayList <Coordinate> (); 
        puntos1.add (punto op. (0, 0)); 
        puntos1.add (punto op. (1, 3)); 
        puntos1.add (punto op. (2, 3)); 
        LineString line1 = op.createLine (puntos1); 
        // 创建 第二 条 线
        Lista <Coordinate> puntos2 = new ArrayList <Coordinate> (); 
        puntos2.add (punto op. (3, 0));
        puntos2.add (op.point (3, 3)); 
        puntos2.add (punto op. (5, 6)); 
        LineString line2 = op.createLine (puntos2); 

        System.out.println (op.distanceGeo (line1, line2)); // out 1.0 
        System.out.println (op.intersectionGeo (line1, line2)); // out GEOMETRYCOLLECTION EMPTY 
        System.out.println (op.unionGeo (línea1, línea2)); // out MULTILINESTRING ((0 0, 1 3, 2 3), (3 0, 3 3, 5 6)) 
        System.out.println (op.differenceGeo (line1, line2)); // out LINESTRING (0 0 , 1 3, 2 3) 
    } 
}
Publicado 19 artículos originales · elogiado 4 · 170,000 vistas +

Supongo que te gusta

Origin blog.csdn.net/u011250186/article/details/105458531
Recomendado
Clasificación