空间数据库
时间:2023-05-07 22:39:01 | 来源:网站运营
时间:2023-05-07 22:39:01 来源:网站运营
空间数据库:PostSQL+PostGIS+plv8
使用步骤
pgadmin可视化非结构数据库
=》shapefile文件
聚簇索引
数组+链表+红黑树
*使用红黑树的原因
JDK 1.8 以前 HashMap 的实现是 数组+链表,即使哈希函数取得再好,也很难达到元素百分百均匀分布。
当 HashMap 中有大量的元素都存放到同一个桶中时,这个桶下有一条长长的链表,这个时候 HashMap 就相当于一个单链表,假如单链表有 n 个元素,遍历的时间复杂度就是 O(n),完全失去了它的优势。
针对这种情况,JDK 1.8 中引入了 红黑树(查找时间复杂度为 O(logn))来优化这个问题。
红黑树限制从根到叶子的最长的
可能路径不多于最短的
可能路径的两倍长,结果是这个树大致上是平衡的,以此来减少插入/删除时的平衡调整耗时,从而获取更好的性能,而这虽然会导致红黑树的
查询会比AVL稍慢,但相比插入/删除时获取的时间,这个付出在大多数情况下显然是值得的。
在HashMap中的应用:HashMap在进行插入和删除时有可能会触发红黑树的插入平衡调整(balanceInsertion方法)或删除平衡调整(balanceDeletion )方法,调整的方式主要有以下手段:左旋转(rotateLeft方法)、右旋转(rotateRight方法)、
改变节点颜色(x.red = false、x.red = true),进行调整的原因是为了维持红黑树的数据结构。
参考来自
增大链表索引效率->红黑树结构(平衡二叉树的一种)
空间数据库模型
Point 点 | |
---|
Geometry 几何 | |
Feature 要素 | |
Feature Class 要素类 | 要素的集合,地理对象 |
Geometry
Curve
LineString | Line | LinearRing |
---|
| | 闭合线,不算作面 |
面对象类型
Polygon 多边形
Triangle :一种特殊的Polygon
MultiPoint | MultiLingString | MultiPolygon |
---|
群岛点 | 河流水系分支 | 群岛块 |
ln -s /usr/local/share/postgresql/extension/postgis* /usr/local/Cellar/postgresql/13.1/share/postgresql/extension/ln -s /usr/local/lib/postgresql/postgis-3.so /usr/local/Cellar/postgresql/13.1/lib/postgresqlln -s /usr/local/lib/postgresql/rtpostgis-2.3.so /usr/local/Cellar/postgresql/13.1/lib/
空间参考坐标系
如果在一开始忘记添加空间参考系,可设置set-SRID
GeoJson 爬虫直接存储数据到这个里面
先做个粗判断,再做细(精确拓扑关系)
docker上使用postgis
这里的账号和密码,在docker上删除后可重建新的postgres名和账号和密码
sudo docker run -it --name pgsql -e "POSTGRES_PASSWORD=~" -e POSTGRES_USER=Alex -p 5432 -d postgresdocker ps -a #启动
也选用postgresql集成postGIS好的
docker pull kartoza/postgisdocker start jiang_postgisdocker pull dpage/pgadmin4docker ps #启动docker exec -it f14ca5f1cd9d bashcat /etc/hosts
官网
host.docker.internal
注意这时候我设置的用户名和密码已经是Alex,~
http://localhost:5433/ #也可以网页打开http://172.17.0.2:5433/ #一般是这个
重启后的电脑
进入页面
再次启动才能进去
sudo docker run --name postgrest_tut -p 54321:5432 -e POSTGRES_MULTIPLE_EXTENSIONS=postgis -d -t kartoza/postgis
要在docker中安装虚拟机 LInux
docker container ls
docker run --name my_postgis_server -p 5433:5432 -e POSTGRES_USER=postgres -d mdillon/postgis
geom 就是地理位置(可以是国家也可以是城市)
解决命令后问题
DB Manange
端口占用,杀死端口
PG_MODE=primaryPG_PRIMARY_USER=postgresPG_PRIMARY_PASSWORD=postgres PG_DATABASE=postgisdbPG_USER=pgisdbPG_PASSWORD=postgresPG_ROOT_PASSWORD=postgresPG_PRIMARY_PORT=5433
用Notepad写的.txt转成.listdocker run --publish 5451:5451 / --volume=pgvolume:/pgdata / --env-file=pg-env.list / --name=postgres / --hostname=postgres / --network=pgnetwork / --detach /crunchydata/crunchy-postgres-gis:centos8-13.2-3.0-4.6.2
一行
docker run --publish 5432:5432 --volume=pgvolume:/pgdata --env-file=pg-env.list --name=postgres --hostname=postgres --network=pgnetwork --detach crunchydata/crunchy-postgres-gis:centos8-13.2-3.0-4.6.2
PGADMIN_SETUP_EMAIL=pgadminPGADMIN_SETUP_PASSWORD=pgadminSERVER_PORT=5050
docker run --publish 5050:5050 / --volume=pgvolume:/pgdata / --env-file=pgadmin-env.list / --name=pgadmin / --hostname=pgadmin / --network=pgnetwork / --detach /crunchydata/crunchy-pgadmin4:centos8-13.2-4.6.2
arm64下的postgis
http://localhost:5051/
查看IP