首页 > 其他分享 >PostGIS代码操作简介

PostGIS代码操作简介

时间:2025-01-05 17:57:30浏览次数:1  
标签:39364683.77488745748996735 postgres rs 简介 代码 PostGIS 2701504.16208679834380746 p

PostGIS代码操作简介

1. 代码操作POSTGIS的可选方案

  1. jdbc
  2. postgis-java
  3. geotools
  4. gdal

2. JDBC


    public void testJdbc() {
        String sql = "select st_area(st_geomfromtext('MULTIPOLYGON (((39364656.2504190132021904 2701523.9713633288629353, 39364650.82893280684947968 2701491.44244607863947749, 39364683.77488745748996735 2701504.16208679834380746, 39364683.77488745748996735 2701504.16208679834380746, 39364656.2504190132021904 2701523.9713633288629353)))'))";
        DataSource ds = new SimpleDataSource("jdbc:postgresql://localhost:5432/postgres",
                "postgres", "123456");
        Connection connection = ds.getConnection();
        ResultSet rs = connection.createStatement().executeQuery(sql);
        while (rs.next()) {
            System.out.println(rs.getString(1));
        }
        connection.close();
    }

3. PostGIS-Java


    public void testPostgisJava(){
        String wkt = "MULTIPOLYGON (((39364656.2504190132021904 2701523.9713633288629353, 39364650.82893280684947968 2701491.44244607863947749, 39364683.77488745748996735 2701504.16208679834380746, 39364683.77488745748996735 2701504.16208679834380746, 39364656.2504190132021904 2701523.9713633288629353)))";
        Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres",
                "postgres", "123456");
        PGgeometry geom = new PGgeometry(wkt);
        PreparedStatement ps = connection.prepareStatement("select st_area(?)");
        ps.setObject(1, geom);
        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            System.out.println(rs.getString(1));
        }
        connection.close();
    }

4. GeoTools


    public void testGeotools(){
        Map<String, Object> params = new HashMap<>();
        params.put("dbtype", "postgis");
        params.put("host", "127.0.0.1");
        params.put("port", "5432");
        params.put("schema", "public");
        params.put("database", "postgres");
        params.put("user", "postgres");
        params.put("passwd", "123456");
        params.put("preparedStatements", true);
        params.put("encode functions", true);

        String sql = "select st_area(st_geomfromtext('MULTIPOLYGON (((39364656.2504190132021904 2701523.9713633288629353, 39364650.82893280684947968 2701491.44244607863947749, 39364683.77488745748996735 2701504.16208679834380746, 39364683.77488745748996735 2701504.16208679834380746, 39364656.2504190132021904 2701523.9713633288629353)))'))";
        JDBCDataStore jdbcDataStore = (JDBCDataStore) DataStoreFinder.getDataStore(params);
        Statement statement = jdbcDataStore.getConnection(Transaction.AUTO_COMMIT).createStatement();
        ResultSet rs = statement.executeQuery(sql);
        while (rs.next()) {
            System.out.println(rs.getString(1));
        }
        statement.close();
        jdbcDataStore.dispose();
    }

5. GDAL


    public void testGdal(){
        String path = "PG: host=127.0.0.1 port=5432 dbname=postgres user=postgres password=123456 active_schema=public";
        ogr.RegisterAll();
        org.gdal.ogr.Driver driver = ogr.GetDriverByName("PostgreSQL");
        org.gdal.ogr.DataSource dataSource = driver.Open(path, 1);
        String sql = "select st_area(st_geomfromtext('MULTIPOLYGON (((39364656.2504190132021904 2701523.9713633288629353, 39364650.82893280684947968 2701491.44244607863947749, 39364683.77488745748996735 2701504.16208679834380746, 39364683.77488745748996735 2701504.16208679834380746, 39364656.2504190132021904 2701523.9713633288629353)))'))";
        Layer layer = dataSource.ExecuteSQL(sql);
        System.out.println(layer.GetFeature(0).GetFieldAsDouble(0));
        dataSource.delete();
    }

6. Geometry与Geography区别

PostGIS提供了两种主要的空间数据类型:GEOMETRYGEOGRAPHY。这两种数据类型都可以用来存储地理空间数据,如点、线和多边形,但它们在处理这些数据时有一些重要的区别:

  1. 坐标系统GEOMETRY数据类型使用笛卡尔坐标系统(平面坐标系统),而GEOGRAPHY数据类型使用球面坐标系统(经纬度)。这意味着GEOMETRY类型更适合处理本地或区域数据,而GEOGRAPHY类型更适合处理全球数据。

  2. 计算GEOMETRY类型在计算距离、面积和长度时使用的是笛卡尔坐标系统,这可能会导致结果不准确,特别是在处理大范围的数据时。相反,GEOGRAPHY类型在计算这些值时会考虑地球的曲率,因此结果更准确。

  3. 性能GEOMETRY类型通常比GEOGRAPHY类型更快,因为笛卡尔计算通常比球面计算更简单。然而,这种性能差异通常只在处理大量数据时才显著。

  4. 空间函数支持GEOMETRY类型支持更多的空间函数,而GEOGRAPHY类型只支持一部分空间函数。

在选择使用GEOMETRY还是GEOGRAPHY时,你应该根据你的具体需求和数据来决定。如果你需要处理全球数据,并且需要准确的距离和面积计算,那么GEOGRAPHY可能是更好的选择。如果你需要处理本地或区域数据,或者需要使用更多的空间函数,那么GEOMETRY可能是更好的选择。

标签:39364683.77488745748996735,postgres,rs,简介,代码,PostGIS,2701504.16208679834380746,p
From: https://www.cnblogs.com/znlgis/p/18653569

相关文章

  • GeoJSON代码示例
    GeoJSON代码示例1.读取GeoJSON文件1.1实现思路graphTDA[读取GeoJSON文件]-->B[读取GeoJSON文件内容]B-->C[解析GeoJSON文件内容]C-->D[构建SimpleFeatureCollection]D-->E[返回SimpleFeatureCollection]1.2代码示例publicstaticSim......
  • FileGDB代码示例
    FileGDB代码示例返回1.读取FileGDB图层1.1实现思路graphTDA[注册OGR]-->B[设置中文路径支持]B-->C[打开数据驱动]C-->D[打开数据源]D-->G[获取图层]G-->H[读取图层信息]1.2代码示例publicLayerreadGdbLayer(StringdriverName,......
  • vue3-openlayers基础知识简介
    vue3-openlayers基础知识简介OpenLayers3Primeropenlayers6:入门基础(一)openlayers入门教程一、基础概念介绍地图(Map)OpenLayers的核心部件是Map(ol.Map)。它被呈现到对象target容器(例如,网页上的div元素)。所有地图的属性可以在构造时进行配置。ol/Map类是OpenLayers......
  • uniapp - 详解使用高德地图在地图上实现绘制边界/点聚合/行政区域高亮等功能,Uniapp高
    效果图在uni-app手机h5网页网站/支付宝微信小程序/安卓app/苹果app/nvue等(全平台兼容)开发中,实现各端都兼容的“安装使用高德地图并实现点聚合/地图绘制边界部分高亮显示”,高德地图点聚合标记及高德地图绘制行政边界等,标点窗体信息展示,在高德地图上标点及卡片气泡框面板......
  • 【Java 代码审计入门-06】文件包含漏洞原理与实际案例介绍
    【Java代码审计入门-06】文件包含漏洞原理与实际案例介绍0x00写在前面为什么会有这一些列的文章呢?因为我发现网上没有成系列的文章或者教程,基本上是Java代码审计中某个点来阐述的,对于新人来说可能不是那么友好,加上本人也在学习Java审计,想做个学习历程的记录和总结,因此......
  • 分析师关注度、分析师跟踪、研报关注度(2001-2023年)原始数据、参考文献、代码do文件、
    分析师关注度、分析师跟踪、研报关注度(2001-2023年)原始数据、参考文献、代码do文件、最终结果 https://download.csdn.net/download/2401_84585615/90025540           https://download.csdn.net/download/2401_84585615/90025540      ......
  • 数据挖掘算法之【8k 字详解FpGrowth算法】—— 附加python代码案例
    大家好,我是摇光~,用大白话讲解所有你难懂的知识点之前用大白话讲了Apriori算法,如果不懂Apriori算法,可以去看这篇文章:7k字详解Apriori算法我们在说Apriori算法的时候,讲过他的缺点,因为要对数据库做频繁的遍历,会产品大量的候选项集,增加计算的复杂性。比如长度为1的频......
  • 安全框架SpringSecurity进阶【详解,附有图文+示例代码】
    文章目录十二.SpringSecurity进阶12.1认证流程12.2简单实现(无权限)思路分析准备工作导入依赖添加Redis相关配置Redis使用FastJson序列化RedisCache缓存Redis配置类响应类JWT工具类WebUtils工具类数据库准备实体类yml配置文件实现配置密码加密器12.3自定义登录接口12.......
  • 基于多目标蜣螂优化算法NSDBO求解微电网多目标优化调度的Matlab代码
    一、非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度问题简介 非支配排序的蜣螂优化算法(Non-dominatedSortingDragonflyAlgorithm,NSDBO)是一种用于求解多目标优化问题的算法。它主要用于解决微电网多目标优化调度问题。NSDBO算法基于蜣螂优化算法(DragonflyAlgor......
  • paddleocr 识别的核心部分的代码
    Lib\site-packages\paddleocr\tools\infer\predict_system.py(用的python39目录里边的库def__call__(self,img,cls=True,slice={}):time_dict={"det":0,"rec":0,"cls":0,"all":0}ifimgisNone:logg......