PostGIS代码操作简介
PostGIS代码操作简介
1. 代码操作POSTGIS的可选方案
- jdbc
- postgis-java
- geotools
- 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提供了两种主要的空间数据类型:GEOMETRY和GEOGRAPHY。这两种数据类型都可以用来存储地理空间数据,如点、线和多边形,但它们在处理这些数据时有一些重要的区别:
坐标系统:
GEOMETRY数据类型使用笛卡尔坐标系统(平面坐标系统),而GEOGRAPHY数据类型使用球面坐标系统(经纬度)。这意味着GEOMETRY类型更适合处理本地或区域数据,而GEOGRAPHY类型更适合处理全球数据。计算:
GEOMETRY类型在计算距离、面积和长度时使用的是笛卡尔坐标系统,这可能会导致结果不准确,特别是在处理大范围的数据时。相反,GEOGRAPHY类型在计算这些值时会考虑地球的曲率,因此结果更准确。性能:
GEOMETRY类型通常比GEOGRAPHY类型更快,因为笛卡尔计算通常比球面计算更简单。然而,这种性能差异通常只在处理大量数据时才显著。空间函数支持:
GEOMETRY类型支持更多的空间函数,而GEOGRAPHY类型只支持一部分空间函数。
在选择使用GEOMETRY还是GEOGRAPHY时,你应该根据你的具体需求和数据来决定。如果你需要处理全球数据,并且需要准确的距离和面积计算,那么GEOGRAPHY可能是更好的选择。如果你需要处理本地或区域数据,或者需要使用更多的空间函数,那么GEOMETRY可能是更好的选择。
PostGIS代码操作简介的更多相关文章
- 通过 C# 代码操作 Google 日历
原文:通过 C# 代码操作 Google 日历 本文主题 借助 Google .NET APIs Client Library,通过 C# 代码在 Google 日历中创建会议邀请. 本文背景 最近, ...
- JavaScript后台代码操作HTML TABLE的方法
原文:JavaScript后台代码操作HTML TABLE的方法 var rowNum = 0,fileNum = 0; //行号与列号 var oNewRow; //定义插入行对象 var oNew ...
- 不使用spring的情况下用java原生代码操作mongodb数据库的两种方式
由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常. 主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...
- SVN SVN合并(Merge)与拉取分支(Branch/tag)操作简介
SVN合并(Merge)与拉取分支(Branch/tag)操作简介 合并(Merge) 例子:把对feature_branch\project_name_v3.3.7_branch的修改合并到deve ...
- Java代码操作HDFS测试类
1.Java代码操作HDFS需要用到Jar包和Java类 Jar包: hadoop-common-2.6.0.jar和hadoop-hdfs-2.6.0.jar Java类: java.net.URL ...
- (转)python 列表与元组的操作简介
python 列表与元组的操作简介 原文:https://www.cnblogs.com/QG-whz/p/4782809.html 阅读目录 列表 list函数 列表的基本操作 列表方法 元组 tu ...
- 使用java代码操作Redis
1导入pom.xml依赖 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis ...
- java代码操作Redis
1.导入需要的pom依赖 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEn ...
- Zookeeper学习笔记(三)——java客户端代码操作
Zookeeper客户端java代码操作 上篇博客记录了shell命令操作zookeeper集群的方式,这次尝试采用java代码来操作.通过查阅API,发现并不困难. 1. 首先获得客户端与服务器的连 ...
- Java代码操作zookeeper
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...
随机推荐
- Linux+Nginx+Php+MariaDB+Redis部署
目录 工作机制 系统环境描述 部署Nginx 安装 启动 测试并访问 部署PHP 安装 启动 配置Nginx 测试 部署MariaDB 安装 启动 配置php支持 测试 部署Redis 安装 启动 配 ...
- Oracle的用户如何优雅地达成软件合规目标
企业一旦发展到了一定规模,就会衍生软件100%合规正版化的需求. 而对于使用到Oracle的用户,当然,具体核定的购买数量和off等商务问题,需要客户管理层直接和对应的Oracle销售代表进行商务谈判 ...
- C语言(从入门到入土)
1.C语言整体上需要记住的 总体上必须清楚的: 1)程序结构是三种: 顺序结构 , 循环结构 (三个循环结构), 选择结构 (if 和 switch) 2)读程序都要从main()入口, 然后从最上面 ...
- C#/.NET/.NET Core技术前沿周刊 | 第 11 期(2024年10.21-10.31)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...
- SSM基础知识
SSM整合 前面我们已经把Mybatis.Spring和SpringMVC三个框架进行了学习,那现在我们把这三个框架整合在一起,来完成我们的业务功能开发,具体如何来整合,我们一步步来学习. 流程分析 ...
- 海外模组联网难?那你必须看看APN配置…
做海外的设备,如果忽视了射频的信号质量,肯定是要吃大亏的! 因为国外的4G信号都是比较差的! 所以,海外模组的联网问题,会比国内要多不少. 客户在实际应用中或多或少都会遇到: 网络相关问题:例如:连 ...
- Python网络爬虫之requests模块2
Python网络爬虫之requests模块(2) 今日内容 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 知识点回顾 xpath的解析流程 bs4的解析流程 ...
- Apache Tomcat AJP 实现负载均衡
大部分一开始接触WEB服务器的人可能和我一样对为什么有Apache又有Tomcat服务器感到奇怪(它们还都是Apache开发的呵呵),其实他们不是冗余的服务器,虽然他们都能对外提供WEB服务器,但总的 ...
- Git之message提交
作用 编写格式化的 commit message 能够大大提高代码的维护效率. 比如: 可以提供更多的历史信息,方便快速浏览: 可以过滤某些 commit(比如文档改动),便于快速查找信息: 可以直接 ...
- 一个使用 WPF 开发的管理系统
前言 最近发现有不少小伙伴在学习 WPF,今天大姚给大家分享一个使用 WPF 开发的管理系统,该项目包含了用户登录.人员管理.角色授权.插件管理.职位管理.主页功能(邮件.皮肤.设置)等功能,对于一个 ...