试验GPT写一段postgis的两空间图层相交运算的java代码算法

试验GPT写一段postgis的两空间图层相交运算的java代码算法

写一段postgis的两空间图层相交运算的java代码算法

回答
2023/4/22 下午5:38:48

以下是一段基于PostGIS进行两空间图层相交运算的Java代码。这里以多边形为例。

import org.postgresql.util.PGobject;
import org.postgis.Geometry;
import org.postgis.PGgeometry;
import org.postgis.Polygon;

import java.sql.*;

public class SpatialIntersection {
    
    
    public static void main(String[] args) {
    
    
        try (Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/mydb", "postgres", "mypassword")) {
    
    
            // 连接数据库
            Statement statement = connection.createStatement();
            // 创建geometry类型表
            statement.executeUpdate("CREATE TABLE IF NOT EXISTS states(id SERIAL PRIMARY KEY, state_name VARCHAR(50), state_geom geometry)");
            statement.executeUpdate("CREATE TABLE IF NOT EXISTS cities(id SERIAL PRIMARY KEY, city_name VARCHAR(50), city_geom geometry)");
            // 插入数据
            String stateName1 = "California";
            Polygon stateGeom1 = new Polygon(
                    new org.postgis.Point[]{
    
    
                            new org.postgis.Point(-124, 42),
                            new org.postgis.Point(-114, 42),
                            new org.postgis.Point(-114, 32),
                            new org.postgis.Point(-124, 32)
                    }
            );
            String stateName2 = "Nevada";
            Polygon stateGeom2 = new Polygon(
                    new org.postgis.Point[]{
    
    
                            new org.postgis.Point(-119, 42),
                            new org.postgis.Point(-114, 42),
                            new org.postgis.Point(-114, 36),
                            new org.postgis.Point(-119, 36)
                    }
            );
            statement.executeUpdate("INSERT INTO states(state_name, state_geom) VALUES ('" + stateName1 + "', '"
                    + toPGgeometryString(stateGeom1) + "');");
            statement.executeUpdate("INSERT INTO states(state_name, state_geom) VALUES ('" + stateName2 + "', '"
                    + toPGgeometryString(stateGeom2) + "');");
            String cityName = "Los Angeles";
            Polygon cityGeom = new Polygon(
                    new org.postgis.Point[]{
    
    
                            new org.postgis.Point(-118.5968, 34.281),
                            new org.postgis.Point(-118.4241, 34.3033),
                            new org.postgis.Point(-118.3258, 34.0506),
                            new org.postgis.Point(-118.4953, 34.0266),
                            new org.postgis.Point(-118.5968, 34.281)
                    }
            );
            statement.executeUpdate("INSERT INTO cities(city_name, city_geom) VALUES ('" + cityName + "', '"
                    + toPGgeometryString(cityGeom) + "');");
            // 进行空间相交计算
            ResultSet resultSet = statement.executeQuery(
                    "SELECT state_name, city_name " +
                            "FROM states, cities " +
                            "WHERE ST_Intersects(states.state_geom, cities.city_geom)"
            );
            // 输出结果
            while (resultSet.next()) {
    
    
                String stateNameResult = resultSet.getString(1);
                String cityNameResult = resultSet.getString(2);
                System.out.println(stateNameResult + " contains " + cityNameResult);
            }
        } catch (SQLException e) {
    
    
            e.printStackTrace();
        }
    }

    // 将Geometry对象转换为PGgeometry字符串
    private static String toPGgeometryString(Geometry geom) throws SQLException {
    
    
        PGgeometry pgGeom = new PGgeometry();
        pgGeom.setGeometry(geom);
        return new PGobject(pgGeom).getValue();
    }
}

这段代码首先通过JDBC连接到PostgreSQL数据库,并在其中创建了两个geometry类型的表states

—the—end—

猜你喜欢

转载自blog.csdn.net/hsg77/article/details/130307886