IDEA中操作数据库postgres

        postgres数据库很牛逼,我是学地理相关专业,在数据库中对空间数据支持比较好的当然是postgres了,当然其他数据库也支持,但是没有postgres支持得厉害,为什么?postgres本身对空间数据其实不支持,但是postgres有个特点,就是开源,所以很多牛逼大佬一起搞了一个专门支持空间数据操作的插件叫Postgis,关于怎么安装这个插件请自行百度。

       我使用了不少数据库,不同数据库的管理系统不一样,也就是我们看到的图形化管理界面,比如Mysql数据库一般用Navicat,Sql server一般用Microsoft SQL Server Management Studio,postgres一般用pgAdmin,因为这些图形化管理界面可以很方便我们管理数据库,但是我有点强迫症,这。。。。太多了!能不能全部都放一起,我只要连接不同数据库就可以在同一个地方操作数据库呢?答案来了,IDEA旗舰版就集成了这个功能!

        其实这个功能很强大,以至于IDEA的制造商JetBrains专门搞了一个软件叫:DataGrip,这个功能更加强大,但平时我就经常用IDEA,IDEA旗舰版自身带的数据库功能就已经够我日常用了,为此我就不多下一个软件了。

首先我使用的是IDEA旗舰版,这个版本里面可以实现对不同数据库的连接操作(社区版没有这个功能,就算是插件也无法达到这个效果)支持绝大多数的数据库,具体支持的数据库如下图所示:

具体怎么操作呢?首先打开IDEA,点击左下角这个图标:

 选中“数据库”点击就可以了,根据如下所示进行连接,具体怎么连接,百度直接搜索就右很多详细教程了,这里不展开说了。

 现在对postgres数据库进行操作,我已经创建了3个表了,分别是点线面的shape矢量文件,怎么将空间shape数据转为数据库表?其实在安装postgis插件的时候就已经安装了一个工具叫:PostGIS Shapefile impoex/porter 用来将空间数据转换为数据库表。

 最有意思的是还可以通过显示地理查看器查看空间数据的空间位置信息,这个功能在pgAdmin中也有,不过它加载得更慢,因为pgAdmin本身占用很多内存,但在IDEA的地理查看器中不会有这个问题。

 我们可以看到这个是基于leaflet前端框架渲染的图层,右上角还有一个可以更换底图的插件,非常的方便。

下面开始操作数据库,一般的逻辑事务数据不外乎几个操作,CURD,增删改查, 但是对于空间数据可不止这些。首先我们进入数据查询控制台,这地方我们可以写代码操作数据库,如下图所示:

 

下面是我对空间拓扑关系的函数进行简单的罗列,供大家参考,要系统学习请看postgis官网噢。

select st_astext('01010000006EDD3AF00B435C40671724DDD52B3C40');
--geom转换为wkt
select st_astext('{"type":"Point","coordinates":[113.047603662,28.171232053]}');
--json转换为wkt
select st_asgeojson('POINT(113.047603662 28.171232053099995)');
--wkt转换为json
select st_asgeojson('01010000006EDD3AF00B435C40671724DDD52B3C40');
--geom转换为json
select st_geomfromgeojson('{"type":"Point","coordinates":[113.047603662,28.171232053]}');
--json转换为geom
select st_geomfromtext('POINT(113.047603662 28.171232053099995)');
--wkt转换为geom
select st_geometrytype(geom) from dian where gid=1;
--判断geom的几何类型
select st_geometrytype(geom) from xian where gid=1;
--判断geom的几何类型
select st_geometrytype(geom) from mian where gid=1;
--判断geom的几何类型
select st_length(geography(geom)) from xian where gid=4;
--计算线段的长度且单位转化为米
select st_area(geography(geom)) from mian where gid=4;
--计算矩形的面积且单位转化为平方米
select st_equals((select geom from mian where gid=1),(select geom from mian where gid=1));
--判断两个几何对象是否一样:true
select st_covers((select geom from mian where gid=1),(select geom from xian where gid=1));
--判断geom1是否覆盖geom2:false
select st_within((select geom from dian where gid=1),(select geom from mian where gid=1));
--判断geom1是否处于geom2中:false
select st_union((select geom from dian where gid=1),(select geom from mian where gid=1));
--返回两者的并集,数据格式是geom
select st_disjoint((select geom from dian where gid=1),(select geom from mian where gid=1));
--判断两个对象是否分离:true
select st_centroid((select geom from mian where gid=56));
--获得对象的几何中心点,数据格式是geom
select st_intersection((select geom from mian where gid=56),
    (select st_centroid((select geom from mian where gid=56))));
--返回面对象和面中心点的几何交集,也就是面中心点,数据格式是geom
select st_equals((select st_intersection((select geom from mian where gid=56),
    (select st_centroid((select geom from mian where gid=56))))),
    (select st_centroid((select geom from mian where gid=56))));
--判断两个对象是否一样,第一个对象是面和面中心点的交集,也就是面中心点,第二个对象是面中心的,所以两者相等,返回:true
select st_distance((select geom from dian where gid=3),(select geom from dian where gid=4));
--获取两个对象之间的距离,单位是
select st_astext(st_buffer((select geom from dian where gid = 3), 200));
--设置200米缓冲区并将结果转换为文本格式
select st_astext(st_boundary(geom)) from mian where gid=5;
select st_astext(st_boundary(geom)) from xian where gid=5;
--获取几何对象的边界,面边界=多线,线边界=多点
select st_astext(st_makeline((select geom from dian where gid=56),(select geom from dian where gid=57)));
--使用两个点生成一条线

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不要随地大便

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值