使用QGIS绘制点集的边界?


9

我有一组要更改为多边形的点。

在此处输入图片说明

在此处输入图片说明

我尝试过凹面船体,但没有得到想要的多边形,如下图所示,

在此处输入图片说明

当我使用Denaulay三角剖分时,我需要删除外部三角形。

在此处输入图片说明

有没有一种有效的方法可以做到这一点?

我也尝试过凸包。

在此处输入图片说明


您是否尝试使用矢量->地理处理工具->凸包...或地理处理工具箱->矢量几何工具->凸包?
德米特里·巴里什尼科夫

是的,我确实尝试过。但是,我认为这不适用于我需要的形状。我将更新问题。
斯蒂芬·雅各布

3
您是否在第一张图像上显示了线条或仅显示了点?
radouxju

1
我有一个问题:您的目标是什么?数据代表什么?河?路?恐怕如果您使用“ S”形或扭曲形,即使使用python也无法使用...
Keiko

2
@StephenJacob-您的积分如何排序?如果它们的顺序为顺时针或逆时针,则可以先将点转换为线(例如,使用SAGA的将点转换为线的工具),然后将线转换为多边形(例如,线转换为多边形的工具)。
约瑟夫

Answers:


5

我假设您知道哪些点属于“左”或“右”,因为否则会有很多解决方案。如果是这样,您可以使用delaunay三角剖分,然后选择“中央”三角形。使用此方法,无需按特定顺序排列点。您需要考虑的所有事实是,所需的三角形必须从每一侧接触至少一个点。

打开属性表>通过表达式选择>“代码” = 1

向量>研究工具>按位置选择(新选择,相交)

在此处输入图片说明

打开属性表>反转点的选择(ctrl + R)

向量>研究工具>按位置选择(从选择中删除,不相交)

在此处输入图片说明

矢量>地理处理工具>溶解

在此处输入图片说明


3

我的结果与@radouxju相同。

操作方式:

  1. 选择1条折线[点击选择]
  2. 更新折线表并影响每个要素的编号[字段计算器]
  3. 选择与一条折线相交的点[空间查询工具]
  4. 通过先前受影响的折线值更新所选点[字段计算器]
  5. 保留选择点,然后选择与这些选定点相交的Delaunay三角形[空间查询工具]
    在此处输入图片说明
    在此处输入图片说明

  6. 反转点选择或选择与另一条折线相交的点[通过表达式选择][反转选择]

  7. 从当前选择中删除与其他点不相交的Delaunay三角形[空间查询工具]
    在此处输入图片说明
    在此处输入图片说明

  8. 通过选择合并功能[地理处理工具>溶解]
    在此处输入图片说明
    在此处输入图片说明


重要提示:您必须具有折线才能获得此结果!


感谢@Keiko,您的回答对解释radouxju的回答很有用
Stephen Jacob

不客气@StephenJacob!这只是团队合作!;-)
敬子

1

如果您有使用python的经验,则可以使用Shapely库并根据两行中的点创建一个Polygon。您将需要告诉python这两行的起点和终点是什么。

from shapely.geometry import Point, Polygon, LineString
import geopandas as gpd
import pandas as pd
line1 = [(1,1),(2,1.2),(3,1)]
line2 = [(1,2),(2,2.2),(3,2)]
# you need to reverse the order of one line to make it a polygon
line2reverse = list(reversed(line2))
polgonList2 = line1 + line2reverse
Polygon(polgonList2)

甚至更好:您还可以使用Geopandas来做到这一点。geopandas允许您轻松保存为多种格式,包括shapefile

d = {'identifier' : [1, 2],
 'name' : ["Netherlands", "Germany"],
 "line1": [[(1,1),(2,1.2),(3,1)], [(1,1),(2,1.2),(3,1)]],
 "line2": [[(1.1,2.1),(2.1,2.3),(3.1,2.2)],[(1,2),(2,2.2),(3,2)]]
}

df = pd.DataFrame(d)
def makePolygon(row):
    line2reverse = list(reversed(row["line2"]))
    return Polygon(line1+line2reverse)    
geometries = []

for index, row in df.iterrows():
    geometries.append(makePolygon(row))
crs = {'init': 'epsg:4326'} 
gdf = gpd.GeoDataFrame(df, crs=crs, geometry=geometries)
gdf.to_file('MyGeometries.shp', driver='ESRI Shapefile')

您可以使用geopandas gpd.read_file()函数读取线的几何形状。

一般GIS中多边形顶点的顺序:顺时针或逆时针

https://nbviewer.jupyter.org/gist/rutgerhofste/b01c17aa6851ea577f10c21a4c3717bc


如何将其转换为形状文件?
斯蒂芬·雅各布

1
您可以使用多种工具,但我是geopandas的粉丝。使用gdf.to_file('MyGeometries.shp',driver ='ESRI Shapefile')
RutgerH
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.