Нанесення межі набору точок за допомогою QGIS?


9

У мене є набір точок, які я хотів би перетворити на багатокутник.

введіть тут опис зображення

введіть тут опис зображення

Я спробував увігнутий корпус, але не дістаньте запланований багатокутник, як ви бачите нижче,

введіть тут опис зображення

І коли я використовую трикутник Денауела, мені потрібно видалити зовнішні трикутники.

введіть тут опис зображення

Чи є ефективний спосіб зробити те саме?

Я також спробував корпус Convex.

введіть тут опис зображення


Ви намагаєтеся вектор -> Інструменти для геообробки -> опуклий корпус (-ів) ... або панель інструментів для геообробки -> інструменти векторної геометрії -> опуклий корпус?
Дмитро Баришніков

Так, я це спробував. Однак я подумав, що це не стосується потрібної мені форми. Я оновлю питання.
Стівен Яків

3
чи є у вас рядки, показані на першому зображенні, або лише точки?
radouxju

1
У мене питання: яка ваша мета? що представляють дані? річка? дорога? Боюся, що якщо у вас фігури "S" або кручені форми, це не спрацює навіть з python ...
Keiko

2
@StephenJacob - Як упорядковуються ваші бали? Якщо вони мають порядок, що йде за годинниковою або проти годинникової стрілки, то спочатку можна перетворити ваші точки в лінії (наприклад, за допомогою інструменту « Перетворити точки SAGA в лінії »), а потім перетворити лінії в полігон (наприклад, інструмент « Лінії до полігонів »).
Йосип

Відповіді:


5

Я припускаю, що ви знаєте, які точки належать "лівим" чи "правим", тому що в іншому випадку існує багато рішень. Якщо це так, ви можете використовувати триангуляцію делауна з подальшим вибором "центральних" трикутників. При цьому методі немає необхідності мати точки в певному порядку. Все, що вам потрібно врахувати, - це той факт, що потрібні вам трикутники повинні торкатися хоча б однієї точки з кожної сторони.

відкрити таблицю атрибутів> вибрати за виразом> "код" = 1

вектор> інструмент дослідження> вибрати за місцем розташування (новий вибір, перетинатися)

введіть тут опис зображення

відкрити таблицю атрибутів> інвертувати виділення точок (ctrl + R)

вектор> інструмент дослідження> виберіть за місцем розташування (видалити з вибору, роз'єднати)

введіть тут опис зображення

вектор> інструмент для геообробки> розчинити

введіть тут опис зображення


3

У мене такий самий результат, як у @radouxju.

Операції:

  1. Виберіть 1 поліліній [вибрати при натисканні]
  2. Оновіть таблицю поліліній та впливайте на число до кожної функції [калькулятор поля]
  3. Виберіть точки, які перетинає одну полілінію [інструмент просторового запиту]
  4. Оновіть вибрані точки на значення полілінії, яке раніше було порушено [польовий калькулятор]
  5. Зберігайте точку вибору та виберіть трикутники делауна, що перетинає ці вибрані точки [інструмент просторового запиту]
    введіть тут опис зображення
    введіть тут опис зображення

  6. Інвертуйте вибір точки або виберіть точки, які перетинають іншу полілінію [виділення за виразом] або [інвертувати виділення]

  7. Вилучіть із поточного вибору трикутники делауна, які не розходяться з іншими точками [інструмент просторового запиту]
    введіть тут опис зображення
    введіть тут опис зображення

  8. Об’єднайте функції, вибравши [інструмент для геообробки> розчинення]
    введіть тут опис зображення
    введіть тут опис зображення


ВАЖЛИВО : ВАМ ПОВИННІ мати полілінії для отримання цього результату!


Дякую @Keiko, ваша відповідь була корисною інтерпретацією відповіді radouxju
Stephen Jacob

Запрошуємо @StephenJacob! Це була просто командна робота! ;-)
Кейко

1

Якщо у вас є досвід роботи з python, ви можете використовувати бібліотеку Shapely і створити Полігон з точок у двох рядках. Вам потрібно буде повідомити 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 дозволяє легко зберігати в декількох форматах, включаючи форм-файли

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 ().

Порядок багатокутних вершин загалом ГІС: за годинниковою або проти годинникової стрілки

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


Як перетворити це у файл форми?
Стівен Яків

1
Можна використовувати декілька інструментів, але я прихильник геопанд. Використовуйте gdf.to_file ('MyGeometries.shp', driver = 'ESRI Shapefile')
RutgerH
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.