Questions tagged «postgis»

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

1
PostGIS:如何合并共享相同属性值的连续要素?
我有一个很大的PostGIS表,用于存储线要素。 我想合并彼此连接并具有相同属性值的要素。以下是我想要实现的示例。 不会合并最外面的要素(黑色和蓝色的要素),因为即使它们的属性值相同也不会连续 绿色和红色要素已合并,因为它们同时符合两个条件 仍然保留黄色功能。 您将如何通过SQL查询实现这一目标?

1
QGIS为什么不从.prj文件检测CRS?
我在postgreSQL / postGIS数据库中有许多1公里的六角形网格,覆盖了美国的各个县。每个网格具有CRS EPSG:3857,而县层具有EPSG:3857。在QGIS中使用县查看网格时,一切看起来都很宏伟。 但是...为了与同事共享这些网格,我不得不使用ogr2​​ogr将它们导出到shapefile。在QGIS中查看这些图像时,每个网格看上去都在大约20 km左右移动,并且QGIS自动将CRS设置为EPSG:3395(这不是项目CRS)。 当我从QGIS导出postGIS表作为shapefile 时,.prj文件看起来与ogr2ogr导出的shapefile完全相同,但是postGIS导出的表正确显示。我注意到从QGIS导出shapefile时QGIS会创建一个.qpj文件,因此得出的结论是QGIS忽略了.prj而是在寻找.qpj。为什么没有.qpj的情况下无法读取.prj?其他shapefile(例如来自美国人口普查的shapefile)没有.qpj,但QGIS可以正确显示这些文件。 我想出了一种解决方法,方法是保存default.qpj并为此使用ogr2​​ogr导出的每个文件为此创建一个新的.qpj,但这似乎很麻烦,而且显然不可复制,因为它仅适用于EPSG:3857。 旁注:我正在使用QGIS 2.0.1。 编辑: 这是我使用的ogr2ogr命令: ogr2ogr -f "ESRI Shapefile" /home/matt/data/hex_grid_1 PG:'dbname=mydb user=matt' hex_grid_1 .prj的内容: PROJCS [“ WGS_84_Pseudo_Mercator”,GEOGCS [“ GCS_WGS_1984”,DATUM [“ D_WGS_1984”,SPHEROID [“ WGS_1984”,6378137,298.257223563]],PRIMEM [“ Greenwich”,0],UNIT [“ Degree”,0.017453292519943295] [“ Mercator”],PARAMETER [“ central_meridian”,0],PARAMETER [“ false_easting”,0],PARAMETER [“ false_northing”,0],UNIT [“ Meter”,1],PARAMETER [“ standard_parallel_1”,0.0] ] .qpj的内容: PROJCS …
9 qgis  postgis  ogr2ogr  epsg 

1
优化面查询中的很大点
我有一个地址点的国家数据集(3700万个)和一个洪水泛滥的多边形数据集(200万个),类型为MultiPolygonZ,某些多边形非常复杂,最大ST_NPoints约为200,000。我正在尝试使用PostGIS(2.18)识别洪泛多边形中的地址点,并将其写入具有地址ID和洪灾风险详细信息的新表中。我从地址角度(ST_Within)进行了尝试,但是从洪水区域角度(ST_Contains)开始进行了交换,其理由是存在大面积区域而根本没有洪水风险。两个数据集都已重新投影到4326,并且两个表都具有空间索引。我下面的查询已经运行了3天,并且没有任何迹象表明很快会完成! select a.id, f.risk_factor_1, f.risk_factor_2, f.risk_factor_3 into gb.addresses_with_flood_risk from gb.flood_risk_areas f, gb.addresses a where ST_Contains(f.the_geom, a.the_geom); 有没有更好的方法来运行此?另外,对于这种类型的长时间运行的查询,除了查看资源利用率和pg_stat_activity之外,监视进度的最佳方法是什么? 我的原始查询完成了3天,虽然还可以,但是我在其他工作上步履蹒跚,所以我从来没有花时间尝试解决方案。但是,到目前为止,我刚刚重新访问了该文档并完成了建议。我使用了以下内容: 使用此处建议的ST_FishNet解决方案在英国建立了50公里的网格 将生成的网格的SRID设置为British National Grid并在其上建立空间索引 使用ST_Intersection和ST_Intersects裁剪了我的洪水数据(MultiPolygon)(这里唯一需要注意的是,我必须在geom上使用ST_Force_2D,因为shape2pgsql添加了Z索引 使用相同的网格裁剪我的点数据 在行上创建索引,在每个表上创建col和空间索引 我现在准备运行我的脚本,将遍历行和列的结果填充到一个新表中,直到覆盖全国为止。但是只是检查了我的洪水数据,一些最大的多边形似乎在翻译中丢失了!这是我的查询: SELECT g.row, g.col, f.gid, f.objectid, f.prob_4band, ST_Intersection(ST_Force_2D(f.geom), g.geom) AS geom INTO rofrse.tmp_flood_risk_grid FROM rofrse.raw_flood_risk f, rofrse.gb_grid g WHERE (ST_Intersects(ST_Force_2D(f.geom), g.geom)); 我的原始数据如下所示: 但是剪辑后看起来像这样: 这是一个“缺失”多边形的示例:

2
在PostGIS中特定距离的点之间画线?
我有沿着街道的点的数据,我想将这些点变成简单的彩色线。有什么指针可以解决这个问题,或者有什么算法可以帮助我解决这个问题? 我希望使用PostGIS函数来执行此操作,但是我愿意接受建议,这是来自.shp文件的数据。 Edit1:更新了图片以演示此问题的理想解决方案。 画线纯粹是基于这些点之间的距离,没有别的可用于分组的依据。理想情况下,这将是沿投影线的最大指定距离处的点吗?通过投影线,我的意思是找到第一个点,然后找到最靠近它的下一个,然后投影一条线,并检查该线上是否有任何点与该线上已经存在的任何点具有最大距离。
9 postgis  line 

1
QGIS Server将UPDATE…WHERE NULL发送到WFS层中的postgis
我正在运行Windows Server 2012服务器。 PostgreSQL 9.3.5,64位 POSTGIS 2.1.3 QGIS服务器2.6.1-2 QGIS Desktop 2.8.3和2.12 我正在使用使用QGIS Desktop 2.12的Microsoft Surface Pro 4平板电脑来编辑存储在Postgresql数据库中的某些图层。数位板中的层是QGIS Server服务的WFS层。 当我在图层中插入一些数据以强制将数据发送并存储在服务器中后进行编辑时,有时更新未在数据库中进行。 我可以看到POST http请求可以很好地到达服务器,但是有时我看不到数据库中的提交(更新),而有时它可以正常工作并执行提交。 在QGIS Server的日志中,我可以看到(我在QGIS Desktop中更新了3个功能的数据): //QGIS SERVER RECEIVED HTTP POST FROM QGIS DESKTOP [4852][11:11:19] ********************new request*************** [4852][11:11:19] remote ip: 192.168.144.20 [4852][11:11:19] CONTENT_TYPE: text/xml [4852][11:11:19] HTTP_USER_AGENT: Mozilla/5.0 QGIS/2.8.2-Wien [4852][11:11:19] MAP:D:\OSGeo4W\apps\qgis\bin\alumbrado\alumbrado.qgs [4852][11:11:19] REQUEST:Transaction …

1
从QGIS Python插件添加PostGIS层
我尝试开发一个插件,以从插件中向qgis添加postgis层,作为学习python的一部分。 如果我从qgis中的python控制台运行它,则用于添加postgis图层的代码可以从食谱中获取,并且可以正常工作(如果在对话框result == 1中按了OK按钮,则应该将我的图层添加到qgis中)。 但是,如果我从插件运行它,则会引发消息NameError:未定义名称'QgsDataSourceURI'。为什么从插件运行该错误? 我如何从插件/函数内部添加图层与从Python控制台添加图层有区别吗? def run(self): """Run method that performs all the real work""" # show the dialog self.dlg.show() # Run the dialog event loop result = self.dlg.exec_() # See if OK was pressed if result == 1: # Do something useful here - delete the line containing …

1
PostGIS多边形边缘分析(方向,边缘长度)
我对GIS尤其是PostGIS不太熟悉,因此,如果答案似乎显而易见,请原谅... 我想对许多建筑物进行分析。我感兴趣的一件事是它们的外墙表面以及各自的方向。如下图所示,我希望具有一系列多边形中所有边的长度和(法线)方向。在示例中,我仅突出显示一个表面。 结果表可能是这样的: building_id | edge_id | orientation | edge_length ------------------------------------------------- 1 | 1 | 315 | 10.0 1 | 2 | 45 | 7.0 1 | ... | ... | ... 但是,我不确定这是否是存储结果以进行进一步处理的明智方法(例如,计算从边缘到下一栋建筑物的距离等)。所以我的问题是双重的: 是否有一个有效的PostGIS功能可以分析多边形的边缘?如果没有本地PostGIS功能,我可能会对基于Python的方法感兴趣。 由于多边形的边数可能不同,因此将结果存储在PostGIS表中的聪明方法是什么?

2
如何通过一个表中的特征通过另一表中的特征ST_Split?
我需要通过封闭线和非封闭线串(图层“ lin”)拆分多边形(图层“ pol”)。 不幸的是,运行以下查询没有得到正确的结果。 CREATE VIEW splitted_pol AS SELECT g.path[1] as gid, g.geom::geometry(polygon, SRID) as geom FROM (SELECT (ST_Dump(ST_Split(pol.geom, lin.geom))).* FROM pol, lin ) as g; 在我的示例中,ST_Split应该创建六个多边形(图层“ splitted_pol”)。 有人知道如何在QGIS / PostGIS中使用ST_Split吗?

1
基于线路连通性的PostGIS递归查询
我在查询时遇到困难。我有一个线串网络,每个线串在n_type列中都有一个值。这可能是少数选项之一。我想生成一个新表,该表将具有相同类型并形成连续线的所有线串分组。 之前: 后: 这是我到目前为止所得到的。它返回结果,但它们没有任何意义-类型不匹配,并且返回太多功能。 另请注意,我将“连续”定义为距其邻居5英尺以内且相交的角度小于30度的任何直线。 WITH RECURSIVE all_links (i, pk_uid, n_type, geom) AS ( SELECT 1 AS i, pk_uid, n_type, geom FROM network WHERE n_type != 'none' UNION ALL SELECT a.i + 1, b.pk_uid, b.n_type, b.geom FROM network b, all_links a WHERE b.n_type = a.n_type AND b.geom <#> a.geom <= …
9 postgis 

3
如何使用postgis将等值线转换为等多边形?
我有一张等值线的postgis表,其定义如下: CREATE TABLE myisolines ( gid serial NOT NULL, isotime timestamp without timezone, val numeric(10,4), geom geometry(LineString,4326) ); 在外观上,此线串对象如下所示: 我知道数据的空间范围,因此可以添加一个Bbox,这样LineStrings可以是封闭的。 我想myisopolygons从myisolines具有多边形的表格中创建一个等值多边形表格,该表格不会重叠,而是创建一个连续的曲面,并具有一列等值线val最低val的列,由此形成多边形。我知道它可以由自封闭的等值线(孤岛)形成,也可以由用bbox封闭的等值线形成,在这种情况下,val应从特定的等值线中获取。在视觉上,它应该看起来像这样: 我以为可以以某种方式创建拓扑,然后将面转换为多边形,但是我不知道如何正确地进行。如何才能做到这一点? 另一个选择是在bbox和每个创建的多边形之间递归使用差异函数,但我想这不是正确的方法,而且绝对不快。

2
两个车道的一个标签(osm,qgis,postgis)
我用主要道路和高速公路的符号标记了osm-lines-layer(PostGIS)。虽然主要道路的符号放置适当-彼此之间有足够的距离-但两车道的高速公路上每个车道都标有一个标签(如图中所示)。 是否可以在每个标签中都设置半径之类的东西,而不能放置其他相同类型的标签?还是我只能说:在两条车道的一条车道上贴上标签? 我正在使用qgis。OSM数据通过osm2pgsql导入到PostGIS。 编辑:此新屏幕截图显示了更多详细信息:

2
如何使用PostGIS计算曼哈顿距离?
我正在使用ST_Distance函数计算两个几何图形(火车站和建筑物)之间的距离。由于我知道所有建筑物和所有火车站都在芝加哥,街道网格非常好/完整,所以我想使用曼哈顿(或出租车)距离。 通用的公式是X的差加Y的差,所以Abs(X1-X2)+ Abs(Y1-Y2)。 什么PostgreSQL查询将使这项工作?

1
修复栅格图层:加载PostGIS栅格时,提供程序无效错误?
我像往常一样编译并安装了当前的QGIS母版,并将一些栅格数据导入了具有postgis 2.0.2扩展名的postgres 9.3数据库中。每当我尝试使用数据库管理器将栅格数据导入qgis时,都会收到以下消息: GDAL provider: Cannot get GDAL raster band: Raster layer: Provider is not valid (provider: gdal, URI: PG: dbname=gis host=127.0.0.1 user=xxx password=xxx port=5432 mode=2 schema=public table=elevation 在命令行中,我得到 ERROR 1: Computed PostGIS Raster dimension is invalid. You've probably specified unappropriate resolution. 我不知道在哪里搜索错误。 我刚搬到Postgis 2.1.2,在那里看到了同样的问题。

1
计算球体上的可见度图
我有一个包含一些多边形的PostGIS表(使用地理数据类型存储)。它们代表球形地球上的区域。 对于从所有多边形中选择的每对顶点,我要计算这两个顶点是否彼此“可见”。(有n *(n -1)/ 2个这样的对,其中n是表中所有多边形上唯一顶点的总数。)“彼此可见”是指两个点之间的大圆路径。两个顶点不与表中的任何多边形相交。 什么是最快的计算方式(最好在PostgreSQL / PostGIS中)? 我有一些有效的方法,但是很慢。我只是天真地遍历所有对,看看它们之间的LineString是否与任何多边形相交。(PostGIS的地理数据类型对我来说处理了所有困难的数学工作。)因此,我想知道是否存在一个聪明的数据结构或算法可以加快速度。

4
将不在线上的点(公交车站)(LINESTRING)连接到网络吗?
我需要将巴士站(点)连接到网络层(OSM数据)。这些公交车站不直接位于线路上(请参见屏幕截图),也不应移动其位置。我使用PostGIS,pgrouting和QGIS,并且网络已经可以通过源列和目标列等进行路由。 我主要想在事后做两件事: 使用最短路径分析获得公交车站之间的距离。 使用OSM网络在距公交车站步行距离处创建等时线。 为了获得准确的值,有必要使路线“开始”和“停止”最接近公交车站。在许多情况下,最接近的现有节点将距离太远而无法获得准确的值。但是,不应有通往公交车站实际位置的路线。在我在图片上的示例中,您可以看到停靠点之间的路线应该是什么样子。 是否有可能将最靠近公交车站的新节点自动插入网络(LINESTRING),或者是否可以在仅针对查询设置的“虚拟点”上开始路由(类似于道路QGIS中的图形插件吗?

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.