Questions tagged «sql»

结构化查询语言的缩写。从关系数据库检索和处理数据的语法。

1
是否基于PostGIS / PostGresQL中的最大重叠量进行联接?
我在两个表中有两组多边形。这些集合彼此重叠。对于集合A中的每个多边形,我想获取集合B中重叠最多的多边形的ID。我正在使用带有PostGIS扩展名的PostgreSQL。 我对SQL足够了解,因此只能基于对/错条件进行联接。所以这行不通: SELECT a.id as a_id, b.id as b_id, FROM a JOIN b ON max(ST_Area(ST_Intersection(a.geom, b.geom))) 因为max()不能在ON子句中。 ST_Intersects()是对/错测试,因此我可以参加,但是集合A中的多边形通常会与集合B中的多个多边形重叠,因此我需要知道哪个重叠最多。无论重叠的程度如何,ST_Intersects大概只会返回遇到的第一个重叠ID。 这似乎应该可行,但这超出了我。有什么想法吗?

4
ST_Intersection慢查询
我正在尝试在两层之间执行交集: 代表某些道路的折线图层(约5500行) 代表不同兴趣点(约47,000行)周围形状不规则缓冲区的多边形层 最终,我想做的就是将折线剪切到许多(有时是重叠的)缓冲区中,然后对每个缓冲区中包含的道路总长度求和。 问题是事情运行缓慢。我不确定应该花多长时间,但在超过34小时后才中止查询。我希望有人可以指出我的SQL查询出错了,或者可以指出一种更好的方法。 CREATE TABLE clip_roads AS SELECT ST_Intersection(b.the_geom, z.the_geom) AS clip_geom, b.* FROM public."roads" b, public."buffer1KM" z WHERE ST_Intersects(b.the_geom, z.the_geom); CREATE INDEX "clip_roads_clip_geom_gist" ON "clip_roads" USING gist (clip_geom); CREATE TABLE buffer1km_join AS SELECT z.name, z.the_geom, sum(ST_Length(b.clip_geom)) AS sum_length_m FROM public."clip_roads" b, public."buffer1KM" z WHERE ST_Contains(z.the_geom, b.the_geom) GROUP …

2
如何递归地遍历父多边形相交以获取没有重叠的最小(子)多边形?
我在问题上挣扎了几天,意识到当主题是PostGIS(v2.5)中的交叉点时,很多人也陷入困境。因此,我决定提出一个更详细,更通用的常见问题。 我有下表: DROP TABLE IF EXISTS tbl_foo; CREATE TABLE tbl_foo ( id bigint NOT NULL, geom public.geometry(MultiPolygon, 4326), att_category character varying(15), att_value integer ); INSERT INTO tbl_foo (id, geom, att_category, att_value) VALUES (1, ST_SetSRID('MULTIPOLYGON (((0 6, 0 12, 8 9, 0 6)))'::geometry,4326) , 'cat1', 2 ); INSERT INTO tbl_foo (id, …
11 postgis  sql 

3
更改SQL 2008的多边形“手性”(反转多边形顶点顺序)
我有几百个形状(polygons和multipolygons),每个形状都由数以万计的点组成,这些点正试图进入SQL 2008。 不幸的是,我尝试导入的形状是“右旋”的(每个形状的周长围绕其包含的点顺时针绘制)。SQL Server至少对于geography类型采用“左手”形状(围绕内部逆时针旋转)。这意味着SQL假定我要选择除形状之外的整个地球。有人将其描述为“由内而外”的形状。 从MSDN来看,令人沮丧的是没有说要使用哪种环定向: 如果使用geography数据类型存储空间实例,则必须指定环的方向并准确描述实例的位置。 如果您在SQL 2008中使用错误的环向,它将崩溃并显示以下错误(强调我的意思): 用户定义的例程或聚合“地理”的执行过程中发生了.NET Framework错误:Microsoft.SqlServer.Types.GLArgumentException:24205:指定的输入不代表有效的地理实例,因为它超出了一个半球。每个地理实例必须适合一个半球。导致此错误的常见原因是多边形的环方向错误。 导入形状geometry而不是导入形状geography效果很好,但我想使用geography。 在SQL 2012中,解决此问题显得微不足道,但我与2008紧密相关。 我应该如何转换形状?

3
使用ST_Difference删除重叠的功能?
我正在尝试使用PostGis 2.1(和Postgres SQL 9.3)使用ST_Difference创建一组多边形(processing.trimmedparcelsnew),这些多边形不包含另一组多边形(test.single_geometry_1)所覆盖的任何区域。这是我的查询: CREATE TABLE processing.trimmedparcelsnew AS SELECT orig.id, ST_Difference(orig.geom, cont.geom) AS difference FROM test.single_geometry_1 cont, test.multi_geometry_1 orig; 但是生成的多边形尚未修剪,相反,它们似乎在与另一层相交的地方被拆分了。我试过只运行选择而不将结果放在表中以及其他我能想到的东西,但是我似乎无法使该功能正常工作。 我已附上结果图 评论后,我尝试添加WHERE子句。我希望没有交集的宗地,而其他宗地的相交区域被删除(图层test.single_geometry表示要从宗地中删除的污染)。我尝试了一个相交,但是我当然想要非相交,所以我现在尝试分离。我也尝试过将折纸添加到表中,但是ST_Difference的文档(http://postgis.net/docs/ST_Difference.html)确实说它返回了我需要的精确几何图形(表示几何图形A的那部分,不会与几何B)相交,所以我对为什么要在表格中使用原始多边形感到困惑。无论如何,这是我修改后的代码: CREATE TABLE processing.trimmedparcelsnew AS SELECT orig.id, ST_Difference(orig.geom, cont.geom) AS difference, orig.geom AS geom FROM test.single_geometry_1 cont, test.multi_geometry_1 orig WHERE ST_Disjoint(orig.geom, cont.geom); 根据dbaston的回答,我现在尝试: CREATE TABLE processing.parcels_trimmed AS SELECT id, …

2
如何在Sql Server 2012中执行3参数地理转换和投影?
我有一个带有纬度经度(NAD27)列的表。我计算另外两个列X和Y,它们分别代表Web Mercator(WGS84)的位置。 目前,我正在使用Arcmap来完成此任务,方法是将研究区域的推荐地理转换(即3参数(地心)地理转换)应用到NAD27到WGS84。 我想完全在Sql Server 2012中执行此操作。据我所知,Sql Server不支持开箱即用的数据转换。有人知道支持这种地理转换的Sql库吗?我想简单地在Arcmap中使用与当前在Arcmap中使用的系数相同的系数。 我还需要将WGS84经纬度投影到网络墨卡托。我看到这个公式是在javascript中实现的,但是如果有人拥有执行此操作的Sql存储过程,那就太好了。

3
注释掉ArcGIS Desktop中的定义查询?
我在GIS的日常生活中经常使用“定义查询”,但是我发现令ArcMap烦恼的许多事情之一是无法注释掉“定义查询”。我想拥有此选项,因为有时我想打开/关闭“定义查询”,或者我想在一个Shapefile上有多个查询,但一次只能激活一个。 到目前为止,要解决这个问题,我通常只在后台有一个记事本文档,并根据需要复制和粘贴。但是理想的解决方案是使用图层属性中的“定义查询”选项卡来替换此文档。我可能在一个图层上有多个不同的查询,但是全部注释掉了。 据我了解,定义查询是用SQL编写的。要在SQL中发表评论,我相信您可以以:-开头或者在方括号{}中包含一条语句。我已经尝试过这两个: Original: "DATA_AQUISITION" LIKE 'MISSING XSECTION' Dashes: --"DATA_AQUISITION" LIKE 'MISSING XSECTION' Brackets: {"DATA_AQUISITION" LIKE 'MISSING XSECTION'} 最后两个语句返回一个SQL表达式错误,并且不会在ArcMap中绘制。我不是在寻找编程解决方案,因为那将是太多的工作。

4
在SpatiaLite中找到具有点位置的两个表之间的最近邻居?
我今天开始与SpatiaLite玩,已经偶然发现了一个问题。 对于tableOne中存储的每个点位置,我想从tableTwo中选择一个最近的(线性距离)点。 到目前为止,我想出了一个使用VIEW的笨拙解决方案: CREATE VIEW testview AS SELECT A.id , B.myValue, Distance(A.Geometry, B.Geometry) AS distance FROM tableOne AS A, tableTwo AS B WHERE distance < 10000 ORDER BY A.Id, distance; 然后: SELECT * FROM testview WHERE distance = (SELECT MIN(distance) FROM testview AS t WHERE t.id = testview.id) 似乎能胜任。 两个问题: …

1
通过GIST索引获得多边形查询中点的性能
我有两个表:locations(id,region_id,the_geom)和regions(id,the_geom)。对于每个定位点,我想确定其位于的区域: UPDATE locations SET region_id = (SELECT id FROM regions WHERE ST_Within(locations.the_geom,regions.the_geom) ); 在位置点上建立GIST索引是否有意义?我将在区域多边形上建立索引,但是不确定这些点。会加快查询速度吗?

4
可通过ArcGIS工具访问SQL语言的程度如何?
这个问题听起来太多余了…… 无论如何,我被要求探索SQL在ArcGIS中的用法。我们将SDE DB用于所有服务器端存储和数据库管理/大规模编辑。但是,我试图更深入地研究ArcGIS工具中集成SQL的程度。还有就是在一份报告中SQL查询参考指南中的ArcGIS 10的帮助,明确指出SQL语法也没有使用现场计算器工具时的工作。我发现这非常令人失望,因为在计算字段值时能够直接从数据库本身提取和处理信息似乎非常有用。 尝试在ArcGIS中使用SQL时可能遇到的最大限制和陷阱是什么?与SQL集成时,哪些工具具有最佳功能? 如果需要一个示例来使这个问题更清楚,我将尝试跟踪给定区域中特定类型的兴趣点的数量。每个点都有一个描述其类型和区域的属性。我当前的解决方案涉及大量使用游标进行计数和数据检索,但是一位上司指出,简单的SQL查询可以完成所有这些以及更多工作。不幸的是,似乎此功能不存在。 还是?

5
GIS分析以查找重复的几何
我有一个很大的shapefile,其中包含我工作所在的城镇的所有建筑物和房屋(约90,000个要素)。建筑物/房屋的数据由镇的测量工程师保存,并且由于不当做法以及不同测量师对数据的访问,许多建筑物/房屋已被保存两次并在地图上显示为重复项。 其中一些是完全重复的(它们一个出现在另一个之上),而另一些则是在两个对象之间留有间隔的(例如,一个对象在另一个对象内部,请参见所附的屏幕截图)。 我想清理这些数据,以便在城镇中只有正确的建筑物/房屋,所以我的问题是: 我是否可以运行任何GIS分析或SQL表达式来查找所有重复的功能(确切的功能和位于其他功能内的功能)?我同时拥有ArcGIS和QGIS,因此欢迎您提出所有建议。


2
GDAL SQL语法以添加字段put值
我尝试在属性表中创建一个新字段,并在从字符转换为整数后将另一个字段的值放入其中,但无法获得正确的语法。我在MSYS中将其作为shell脚本运行。 cd D:/GIS_DataBase/CorineLC/shps_app_and_extr/ myfile=extr_and_app.shp name=${myfile%.shp} ogrinfo $myfile -sql "ALTER TABLE $name ADD COLUMN code_num int(3)" ogrinfo $myfile -sql "UPDATE TABLE $name SET code_num = CONVERT(code_06 As int(3))" 错误消息(MSYS): Kay@KAY-PC /c/users/kay/desktop/bash $ sh calc_field_shp.sh Warning 6: Unsupported column type 'int'. Defaulting to VARCHAR INFO: Open of `extr_and_app.shp' using driver `ESRI Shapefile' …
9 sql  ogr 

2
查找位于一组坐标内的点
我有一个PostGIS数据库,我想找到某个区域(边界框)内的点。我有两组坐标,从中可以获得构成该框的所有四个矩形点(如果需要)。我有问题的数据列名为“ point”,它也是point类型。 无论如何,是否可以指定四组坐标(纬度/经度)并获取位于框中的所有点。 或指定两个点,让数据库计算出矩形的角,然后在 以防万一我不清楚我想要实现什么。如果我有经度和长字段而不是点,则与“ vanilla” sql等效: SELECT * FROM myTable where lat> xMin AND lat < xMax AND long > yMin and long < yMax 更新的编辑: 我正在尝试Underdark的解决方案。起初我没有ST_MakePoint构造函数(现在我有),但仍然遇到非常相似的错误(只是在另一个字符上)。 SELECT * FROM myTable WHERE ST_Within(ST_MakePoint(point),GeometryFromText('POLYGON((75 20,80 30,90 22,85 10,75 20))',4326)) 我收到此错误: ERROR: function st_makepoint(point) does not exist LINE 1: SELECT * …
9 postgis  sql  point  extents 

1
将Z值分配给PostGIS行的开始和结束
我的PostGIS数据库中有一个折线表,每个折线的开头和结尾都有一个具有反转级别的表。 我的目标是根据反转数据在表格中创建3D线。我知道我可以使用st_makeline重新创建在起点和终点带有3D点的线,但是我希望能够仅在起点和终点的Z值上运行更新。 可以做到这一点,还是重新创建线条更容易。
9 postgis  3d  sql 

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.