标签: postgis

使用Python INSERT INTO和String Concatenation

在将数据插入我的数据库时,我遇到了一个重大的速度障碍.您可以从下面的代码中看到,我只是构建SQL语句以传递给execute命令.值是正确的,一切都很好,但python解释器似乎是在运行时添加和删除params中的引号.

这是将空间数据插入数据库的正确方法.

INSERT INTO my_table(
            name, url, id, point_geom, poly_geom)
    VALUES ('test', 'http://myurl', '26971012', 
            ST_GeomFromText('POINT(52.147400 19.050780)',4326), 
            ST_GeomFromText('POLYGON(( 52.146542 19.050557, bleh, bleh, bleh))',4326));
Run Code Online (Sandbox Code Playgroud)

这在Postgres查询编辑器中是可验证的......现在,当我在下面运行Python代码时,它会在ST_GeomFromText函数周围添加双引号,然后从id列中删除引号.

INSERT INTO my_table(
            name, url, id, point_geom, poly_geom)
    VALUES ('test', 'http://myurl', 26971012, 
     "ST_GeomFromText('POINT(52.147400 19.050780)',4326)", 
     "ST_GeomFromText('POLYGON(( 52.146542 19.050557, 52.148430 19.045527, 52.149525 19.045831, 52.147400 19.050780, 52.147400 19.050780, 52.146542 19.050557))',4326)");
Run Code Online (Sandbox Code Playgroud)

这导致插入失败,PostGIS声称它不是一个合适的几何.当我打印每个参数在屏幕上查看时,引号没有什么好玩的,所以我认为问题必须在执行命令中.我正在使用Python 2.7 ...任何人都可以帮助如何防止这种疯狂继续下去?

    conn = psycopg2.connect('dbname=mydb user=postgres password=password')
    cur = conn.cursor()
    SQL = 'INSERT INTO my_table (name, url, id, point_geom, poly_geom) VALUES (%s,%s,%s,%s,%s);'
    Data = name, url, id, point, polygon …
Run Code Online (Sandbox Code Playgroud)

python postgis psycopg2

11
推荐指数
1
解决办法
5714
查看次数

MySQL Postgresql/PostGIS

我有4亿行分区的mysql表中的lat/lon坐标.该表每分钟增长2000条记录,旧数据每隔几周刷新一次.我正在探索如何对这些数据进行空间分析.

大多数分析需要查找某个点是否在特定的纬度/经度多边形中,或者哪个多边形包含该点.

我看到了以下解决多边形点(PIP)问题的方法:

  1. 创建一个mysql函数,它接受一个点和一个Geometry并返回一个布尔值.简单但不确定如何使用几何来执行lat/lon坐标上的操作,因为Geometry假设平面而不是球体.

  2. 创建一个mysql函数,它接受自定义数据结构的一个点和标识符并返回一个布尔值.多边形顶点可以存储在表格中,函数可以使用球形数学计算PIP.大量的多边形点可能会导致庞大的表和慢查询.

  3. 将点数据保留在mysql中并在PostGIS中存储多边形数据,并使用app服务器通过将点作为参数在PostGIS中运行PIP查询.

  4. 将应用程序从MySQL移植到Postgresql/PostGIS.这将需要花费大量精力来重写查询和过程.我仍然可以做到这一点,但Postgresql处理4亿行有多好.在Google上快速搜索"mysql 10十亿行"会返回许多结果.Postgres的相同查询不返回相关结果.

想听听一些想法和建议.

mysql gis postgresql postgis geospatial

11
推荐指数
1
解决办法
2201
查看次数

我的PostGIS数据库看起来不错,但GeoDjango认为不是......为什么?

我正在尝试设置一个GeoDjango应用程序来测试我遇到的早期问题.我已经建立了一个postgresql数据库,创建了一个新的Django项目和应用程序,但是当我尝试时./manage.py syncdb我得到了这个:

django.core.exceptions.ImproperlyConfigured:无法确定数据库"django_geotest"的PostGIS版本.GeoDjango至少需要PostGIS 1.3版.是否从空间数据库模板创建了数据库?

我不明白,因为我之前已经完成了GeoDjango的所有安装要求,并django_geotest通过这样做创建了这个数据库:

$ createdb -T template_postgis django_geotest
Run Code Online (Sandbox Code Playgroud)

看起来数据库设置正确:

django_geotest=# SELECT PostGIS_full_version();
                                     postgis_full_version                                          
-------------------------------------------------------------------------------------------------------
 POSTGIS="1.5.3" GEOS="3.2.2-CAPI-1.6.2" PROJ="Rel. 4.7.1, 23 September 2009" LIBXML="2.7.3" USE_STATS
(1 row)
Run Code Online (Sandbox Code Playgroud)

描述数据库,我得到这个:

django_geotest=# \d                
             List of relations
 Schema |       Name        | Type  | Owner 
--------+-------------------+-------+-------
 public | geography_columns | view  | phil
 public | geometry_columns  | table | phil
 public | spatial_ref_sys   | table | phil
(3 rows)
Run Code Online (Sandbox Code Playgroud)

所以现在我不知道接下来要尝试什么...我对postgresql及其模板等的了解并不是那么好.有任何想法吗?谢谢.

django postgresql postgis geodjango

11
推荐指数
2
解决办法
4301
查看次数

ST_Distance的返回值单位

我需要计算它们之间的距离

  1. 所有的建筑和
  2. 所有医院

在从OSM导入的地图中.

我使用以下查询:

SELECT building_id, hospital_id, ST_Distance(building_centroid, hospital_location)
FROM 
(
select planet_osm_polygon.osm_id building_id, ST_Centroid(planet_osm_polygon.way) building_centroid
from planet_osm_polygon
where building = 'yes'
) buildings,
(
select planet_osm_point.osm_id hospital_id, planet_osm_point.way hospital_location
from planet_osm_point  
where amenity = 'hospital') hospitals
Run Code Online (Sandbox Code Playgroud)

我得到奇怪的结果 - 距离总是小于1.

我怎样才能了解报告这些值的单位?

更新1:示例结果:

上面查询的示例结果

更新2:此查询似乎有效

SELECT building_id, hospital_id, ST_Distance_sphere(building_centroid, hospital_location) distance
FROM 
(
select planet_osm_polygon.osm_id building_id, ST_Centroid(planet_osm_polygon.way)  building_centroid
from planet_osm_polygon
where building = 'yes'
) buildings,
(
select planet_osm_point.osm_id hospital_id, planet_osm_point.way hospital_location
from planet_osm_point  
where amenity = 'hospital') hospitals …
Run Code Online (Sandbox Code Playgroud)

postgresql postgis postgresql-9.2

11
推荐指数
1
解决办法
8354
查看次数

将普通Postgres数据库转换为PostGis数据库

我有一个普通的postgres数据库,有很多地理编码数据.这只是纬度和经度两列.

我想将此数据库转换为PostGIs数据库.任何人都可以建议我转换数据库的方法吗?我不想创建一个新的postgis tempalte数据库,然后逐个移动整个数据.

database postgresql postgis

11
推荐指数
1
解决办法
8337
查看次数

PostGIS多边形之间的递归交集

我正在尝试在空间表中的所有多边形之间执行递归交集,并获得结果(多)pololygons以及每个多边形的每个交叉点的信息.

解释它的图像(不是真正的规模): 例

假设A, B, C表格中有正方形.我想A, B, C, A+B, A+C, B+C, A+B+C在输出中有多边形,我需要知道这A+BAB等的交集.

到目前为止,我有一个执行交叉点的查询,但它没有"切断"原始多边形的相交部分.例如:

Polygon A should be      A - (A+B) - (A+C) - (A+B+C)
Polygon A+C should be    A+C - (A+B+C)
Run Code Online (Sandbox Code Playgroud)

我现在为AA+C多边形得到的结果的图像:

目前错误的结果

这是一个测试脚本,使用图像中的方块作为数据.看看这个area专栏,很明显一些递归的ST_Difference丢失了,我只是弄清楚怎么做.欢迎任何想法.

-- Create a test table
CREATE TABLE test (
    name text PRIMARY KEY,
    geom geometry(POLYGON)
);

-- Insert test data
INSERT INTO test (name, geom) VALUES 
    ('A', ST_GeomFromText('POLYGON((1 2, 1 6, 5 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql postgis

11
推荐指数
1
解决办法
3602
查看次数

使用自制程序升级到PostGIS 2.1和PostgreSQL 9.3.1时缺少库

在将PostgreSQL从9.2.4升级到9.3.1(通过OS X上的自制程序)的过程中,我遇到了一个奇怪的问题.这是我到目前为止采取的步骤

  • 安装了PostgreSQL,PostGIS和必需的库(没有错误)
  • initdb在新数据库上运行
  • 停止了两台服务器
  • 赛跑 pg_upgrade

pg_upgrade 执行必要的检查,创建旧集群的转储,但是当导入新集群时,我收到以下错误:

> ./pg_upgrade -b /usr/local/Cellar/postgresql/9.2.4/bin/ -B /usr/local/Cellar/postgresql/9.3.1/bin -d /usr/local/var/postgres/ -D /usr/local/var/postgres9.3.1 -u postgres
Performing Consistency Checks
-----------------------------
Checking cluster versions                                   ok
Checking database user is a superuser                       ok
Checking for prepared transactions                          ok
Checking for reg* system OID user data types                ok
Checking for contrib/isn with bigint-passing mismatch       ok
Creating dump of global objects                             ok
Creating dump of database schemas
                                                            ok
Checking for presence of required libraries                 fatal

Your installation references …
Run Code Online (Sandbox Code Playgroud)

postgresql postgis upgrade

11
推荐指数
1
解决办法
2658
查看次数

Postgres Postgis错误:未加载库:/usr/local/lib/libspatialite.5.dylib

在浏览开发中的Postgres-Rails应用程序时,由于PG错误,我遇到了错误输出的页面.我认为我当前的Git分支架构可能与我的数据库不同步rake db:reset.这导致错误(我不能再复制)声称它无法postgis.controlusr/local/Cellar/postgresql/9.3.5/share/postgresql 目录中找到文件(IIRC).在看到我的9.3.4版Postgres的相应目录中存在该控制文件之后,我尝试了很多东西,但最终卸载了我的postgres-9.3.4并且brew已经卸载然后再次安装PostGIS.在某些时候,尽管我每次尝试重置数据库都会继续失败,但错误消息已更改为

错误:无法加载库"/usr/local/Cellar/postgresql/9.3.5/lib/rtpostgis-2.1.so":dlopen(/usr/local/Cellar/postgresql/9.3.5/lib/rtpostgis-2.1.所以,10):未加载库:/usr/local/lib/libspatialite.5.dylib

然后我尝试卸载Postgres并重新安装,但即使这样也无法解决问题.

(注意:我已尝试在Postgres控制台中创建PostGIS的扩展,但这给出了与上面列出的完全相同的错误).

postgresql postgis

11
推荐指数
1
解决办法
2529
查看次数

PostgreSQL中&&的含义是什么?

在PostGIS中,&&两个几何体之间的运算结果是什么?在我看来,&&返回 a boolean,但geometry这次确实返回。在以下示例中,操作在 aLineString和 a之间Polygon

首先,我猜这就是包容和被包容的关系。在我做下面的例子之前,我认为这应该是一个“交集”类型的关系。我对吗?

select ST_geomfromtext('linestring(0.1 0.1,1.9 1.9)', 4326) && st_geomfromtext('POLYGON((0 0,0 1,1 1,1 0,0 0))', 4326)
Run Code Online (Sandbox Code Playgroud)

结果是t代表true.

postgresql postgis

11
推荐指数
1
解决办法
2770
查看次数

如何使用 postgis 将 AWS RDS Postgres 实例从 14 升级到 15?

AWS 添加了对 Postgres 15.2 的支持。在启用 postgis 扩展的情况下升级到此版本失败并显示以下错误消息:

The instance could not be upgraded because there are one or more databases with an older version of PostGIS extension or its dependent extensions (address_standardizer, address_standardizer_data_us, postgis_tiger_geocoder, postgis_topology, postgis_raster) installed. Please upgrade all installations of PostGIS and drop its dependent extensions and try again.
Run Code Online (Sandbox Code Playgroud)

RDS实例已3.1.7安装postgis,并且没有升级扩展的路径。运行精确的升级命令ALTER EXTENSION postgis UPDATE TO "3.1.8";会导致

extension "postgis" has no update path from version "3.1.7" to version "3.1.8"
Run Code Online (Sandbox Code Playgroud)

运行SELECT postgis_extensions_upgrade();应该升级扩展的命令会导致:

Upgrade completed, run …
Run Code Online (Sandbox Code Playgroud)

postgresql postgis amazon-web-services amazon-rds

11
推荐指数
1
解决办法
2063
查看次数