Questions tagged «postgis»

PostGIS是PostgreSQL对象关系数据库的扩展,增加了对地理对象的支持。

1
在线串上时,在随机鱼网的像元中以彼此指定的距离创建点
我们有一个陆地协议,在该协议中,我们收到一个1x1公里网孔的鱼网。一些单元格是随机选择的。我们需要在每个单元格中放置4个点,这些点也必须在路上。如果可能,则每个像元的每个点的最小距离必须为500m,否则,我们希望最大距离。 在第一次尝试中,我们使用ST_CreateFishnet将每个像元划分为四个500x500 m像元,然后将点放在子像元的质心,然后放在最近的道路(ST_ClosestPoint)上。我们得到了一些不错的结果,但是在下面的示例中,您可以看到点5离点6太近了,可以在左路上移动。 WITH r1 AS ( -- only sub-cells which intersects random cells SELECT id_maille, ROW_NUMBER() OVER() AS id_grille, fishnet_500.geomgrille FROM fishnet_500 JOIN t_mailles ON ST_Intersects(ST_Buffer(t_mailles.geom,-200), fishnet_500.geomgrille) -- buffer < 0 to not select neightbours ) , r2 AS ( -- cut roads in every cells SELECT id_maille, id_grille, …


2
查找缺少索引的PostGIS表?
最近,我环顾四周pg_stat_user_tables,很惊讶地发现我的一些空间桌子上有大量连续扫描。当然,这些表缺少空间索引。 如何找到带有未索引几何列的所有表?

1
在PostGIS中沿中心线计算平行线
我在PostgreSQL数据库中有街道(道路中心线)和建筑物多边形表。示例场景如下: 问题: 我需要在街道和两侧最近的建筑物多边形周围50米缓冲区的交点处计算沿着街道的平行线。所需的输出方案是: 我尝试过的 我的方法是: 1) Generate 50m buffer around street layer 2) get the intersection of buffer and polygons 3) Compute the distance 4) Draw offset curves (parallel lines) at both sides of street layer 5) Merge both curves to get parallel lines at the intersection 这是我的尝试: WITH street_buffer …

3
从多个几何创建溶解的缓冲区(按共享属性和空间交集合并)
我必须根据多点输入功能创建溶解的缓冲区。在下面的示例中,输入表包含4个功能。要素#2由两个点几何组成。创建缓冲区后,我得到了4个多边形几何: 有没有一种将结果分组的方法?点#1和的缓冲区#2已溶解,应为单个多面要素(a)。 到目前为止,我所做的是: -- collect all buffers to a single multi-polygon feature -- dissolve overlapping polygon geometries CREATE TABLE public.pg_multibuffer AS SELECT row_number() over() AS gid, sub_qry.* FROM (SELECT ST_Union(ST_Buffer(geom, 1000, 8))::geometry(MultiPolygon, /*SRID*/) AS geom FROM public.multipoints) AS sub_qry; 编辑: -- create sample geometries CREATE TABLE public.multipoints ( gid serial …

1
QGIS保存postgis表错误:无结果缓冲区
我在PostGIS上有一个多边形层,当我尝试使用QGIS添加特征时,在保存编辑时会出错。 这是错误通知“无结果缓冲区”。 我在这里发现了类似的情况:添加功能时出现PostGIS错误:没有结果缓冲区。但这并没有给我解决的答案。有任何想法吗 ?
10 qgis  postgis 

3
如何创建将序列添加到PostGIS中唯一标识符列的QGIS处理脚本?
有人可以帮助我创建QGIS处理脚本,以将序列添加到PostGIS中现有的唯一标识符列(类型:整数)吗? 这将非常有帮助,例如,作为错误#6798的解决方法。不幸的是,我没有任何Python经验。 CREATE SEQUENCE /*input_schema*/./*input_table*/_/*uic*/_seq OWNED BY /*input_schema*/./*input_table*/./*uic*/; SELECT SETVAL('/*input_schema*/./*input_table*/_/*uic*/_seq', (SELECT MAX(/*uic*/) FROM /*input_schema*/./*input_table*/)); ALTER TABLE /*input_schema*/./*input_table*/ ALTER COLUMN /*uic*/ SET DEFAULT nextval('/*input_schema*/./*input_table*/_/*uic*/_seq'::regclass);

2
PostGIS-在直线或多边形内获取点
我需要获取直线或多边形的中心点才能制作marker我的应用。这样,当您单击标记时,就会显示几何图形(直线或多边形)。我曾经ST_Centroid使它工作。 结果是我所期望的,使某些多边形或线的质心超出了几何形状。我想要这些线或多边形是在几何体内部获得“最中心点”。 我怎样才能做到这一点?有解决方案吗?

3
在PostGIS中添加其他几何列?
我正在将许多地理数据集导入PostGIS,而它们具有不同SRID的。(有些有EPSG:3857,有些EPSG:4326,有些其他)。 我想另外创建一个geometry column,例如。the_geom_mercator使用SRID EPSG:3857,并将原始geom列保留SRID在其中。 如何使用PostGIS功能做到这一点?

2
用线切割线串吗?
我正在检查按点切割线串的最佳方法。 场景是:很多街道,需要用相交点切开的线段,例如: 我有 线串(完全未切分)表 st_intersection点表 我需要获取由交点表剪切的独立线串段。 我正在使用PostGIS函数,并发现了几种方法,但是每种方法都给我带来了某种问题。 这是我已经测试过的: 1个 折线表:1行,st_memunion 1200行折点表:1700行(点) 不好的是:确实需要大量时间和内存刷新。无法同时创建多个表,导致内存无法处理。结果是脏乱的。而不是给我正确的行号,我需要稍后进行清理(在这里很好地解释了在相交点处分割线) CREATE TABLE lines_with_messy_result AS ( SELECT ((ST_DUMP(ST_SPLIT(a.geom,b.ix))).geom) as geom FROM st_union_lines a INNER JOIN lots_of_points b ON ST_INTERSECTS(a.geom, b.ix) ); --then need to clean this up create table lines_segments_cleaned as ( SELECT DISTINCT ON (ST_AsBinary(geom)) geom FROM lines_with_messy_result …

1
在可及区域上建立多边形
我目前在等时线和基础算法领域中工作。现在引起问题的不是等位线本身的计算,而是结果的可视化。 我的等时线算法的结果是点和边。实际上,我确实有一个可行的解决方案,但是对于3873个边缘和1529个节点而言,事情似乎要花很多时间(在装有2015 Core i7 CPU和相当快的SSD的Lenovo T440s笔记本电脑上大约需要2.0秒)。而不是几秒钟,我想要的更像是msec :-)。 也许有人可以帮助我减少构建可视化可到达区域的多边形所需的计算时间。 但是等一下……第一件事! 这是等边线的计算结果, 这些边线是我的可视化效果: 这些边线存储在PostGIS数据库表中,是简单的线串。 我要向用户显示的内容如下所示: 请注意图片最南端和最东端的断开区域。这些应绘制为单独的区域(因此此处不允许合并:-) 目前,我正在使用此查询: SELECT ST_AsGeoJson(St_Transform(ST_Multi(ST_Collect(polygons)), 4326)) AS coverage FROM ( SELECT ST_MakePolygon(ST_ExteriorRing(ST_GeometryN(segments, generate_series(1, ST_NumGeometries(segments))))) AS polygons FROM ( SELECT ST_Union(ST_Buffer("GEOMETRY", 20, 'quad_segs=2')) AS segments FROM my_edges AS a ) AS b ) AS c 我已经做了一些实验,并且阅读了很多文档,但是我找不到更好的解决方案。 在我眼中,最大的问题是ST_Union的用法(如docs中所述,此功能可能很慢)。有趣的是,用ST_Collect替换它似乎会减慢ST_Buffer的计算,因此以下所有查询甚至花费更长的时间,尽管它不会填充边缘之间的区域(它只会在线条周围创建缓冲区): SELECT ST_AsGeoJson(St_Transform(ST_Multi(ST_Collect(polygons)), …

2
如何创建动态领导线?
除了QGIS“移动标签”工具之外,我还尝试使用PostGIS视图创建动态引线。 CREATE VIEW leader_line AS SELECT gid, ST_MakeLine(geom, ST_SetSRID(ST_MakePoint(xcord_label, ycord_label), SRID))::geometry(linestring, SRID) AS geom FROM point WHERE xcord_label IS NOT NULL; 这适用于所有标签,WHERE ST_X(geom) < xcord_label但会为标签创建错误的引出线WHERE ST_X(geom) > xcord_label。 有谁知道如何正确放置标签的引线WHERE ST_X(geom) > xcord_label?有什么方法可以引用标签的xmax坐标吗?

2
ST_Distance不使用索引进行空间查询
即使对于最简单的查询,我也无法在PostgreSQL 9.3.5上运行PostGIS 2.1来使用空间索引。在整个数据集为800万点(人口数电网从这里)。该表创建为 CREATE TABLE points ( population DOUBLE PRECISION NOT NULL, location GEOGRAPHY(4326, POINT) NOT NULL ) CREATE INDEX points_gix ON points USING GIST(location); 查询很简单 SELECT SUM(population) FROM points WHERE ST_Distance( location, ST_GeographyFromText('SRID=4326; POINT(0 0)') ) < 1000 PostgreSQL总是使用Seq扫描,我尝试了10000点的子集-仍然是Seq扫描。有任何想法吗?

1
Postgis数据库查询优化
我有一组DTED格式的栅格,可以使用raster2pgsql命令行工具将其加载到PostGIS数据库中。 每个栅格都简单地存储在一行中,并由rid和一个栅格格式的值来描述。 现在,我想创建一个数据库函数,该函数接受点的经度和纬度,并返回与该点相对应的像素值。 我的问题是,由于数据库在Odroid板上工作,因此需要花费很多时间(3-4秒)。 我知道我处理的数据集很大(栅格覆盖了整个英国地区),但是由于我对PostgreSQL和PostGIS不太熟悉,我怀疑它可以更快地完成。 到目前为止,这是我所做的: SELECT ST_Value(rast, ST_GeomFromText(CONCAT('POINT(', $1, ' ', $2, ')'), 4326)) FROM ( SELECT * FROM rasters WHERE rast && ST_GeomFromText(CONCAT('POINT(', $1, ' ', $2, ')'), 4326) ) x; $1和$2分别为long和lat。

5
根据点将线划分为不重叠的子集
给定一张具有线几何形状的表,并在单独的表中捕捉到该线的一个或多个点,我想在每条线与一个点相交的位置处使用一个或多个相交点来分割每条线。 例如,一条直线L沿直线几何顺序依次具有三个相交点A,B和C。我想将L作为四个不同的几何返回:从L的起点到A,沿着L的从A到B,沿着L的从B到C,以及从C到L的终点。 过去,我经常使用shape来完成此任务,这是一个线性引用问题(http://sgillies.net/blog/1040/shapely-recipes/)。但是,在这种情况下这是不切实际的,因为它有数百万条线和点。相反,我正在寻找使用PostgreSQL / PostGIS的解决方案。 注意,点被限制在一条线上。此外,一个点可以有效地位于一条线的起点或终点,在这种情况下,无需拆分该线(除非存在其他与同一条线的起点或终点不一致的点)。子线需要保留其方向和属性,但是点要素的属性无关紧要。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.