Рисование границы множества точек с использованием QGIS?


9

У меня есть набор точек, которые я хотел бы изменить в многоугольник.

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

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

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

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

И когда я использую триангуляцию Денауля, мне нужно удалить внешние треугольники.

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

Есть ли эффективный способ сделать то же самое?

Я также попробовал выпуклый корпус.

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


Вы пробуете Vector -> Инструменты геообработки -> Выпуклая оболочка (и) ... или Инструменты геообработки -> Инструменты векторной геометрии -> Выпуклая оболочка?
Дмитрий Барышников

Да, я попробовал это. Тем не менее, я думал, что это не относится к форме, которая мне нужна. Я обновлю вопрос.
Стивен Джейкоб

3
у вас есть линии, показанные на вашем первом изображении или только точки?
Radouxju

1
У меня вопрос: какова ваша цель? что представляют данные? река? Дорога ? Я боюсь, что если у вас есть S-образные или скрученные формы, это не сработает даже с питоном ...
Keiko

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

Ответы:


5

Я предполагаю, что вы знаете, какие точки принадлежат «левому» или «правому», потому что в противном случае есть много решений. Если это так, вы можете использовать триангуляцию Делоне с последующим выбором «центральных» треугольников. При использовании этого метода нет необходимости располагать точки в определенном порядке. Все, что вам нужно учитывать, - это то, что треугольники, которые вам нужны, должны касаться хотя бы одной точки с каждой стороны.

открыть таблицу атрибутов> выбрать по выражению> "код" = 1

вектор> исследовательский инструмент> выбор по местоположению (новый выбор, пересечение)

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

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

вектор> исследовательский инструмент> выбрать по местоположению (удалить из выбора, разделить)

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

вектор> инструмент геообработки> растворить

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


3

У меня тот же результат, что и у @radouxju.

Операции:

  1. Выберите 1 полилинию [выберите при нажатии]
  2. Обновите свою таблицу ломаных линий и укажите число для каждой функции [полевой калькулятор]
  3. Выберите точки, которые пересекают одну полилинию [инструмент пространственного запроса]
  4. Обновить выбранные точки по значению полилинии, ранее затронутому [полевой калькулятор]
  5. Сохраните точку выбора и выберите треугольники Делоне, которые пересекают эти выбранные точки [инструмент пространственного запроса]
    введите описание изображения здесь
    введите описание изображения здесь

  6. Инвертировать выделение точек или выбрать точки, которые пересекают другую полилинию [выбор по выражению] или [инвертировать выделение]

  7. Удалите из текущего выделения треугольники Делоне, которые не пересекаются с другими точками [инструмент пространственных запросов]
    введите описание изображения здесь
    введите описание изображения здесь

  8. Объединить объекты путем выбора [инструмент геообработки> распустить]
    введите описание изображения здесь
    введите описание изображения здесь


ВАЖНО : Вы ДОЛЖНЫ иметь полилинии для получения этого результата!


Спасибо @Keiko, твой ответ был полезен для интерпретации ответа Радукью
Стивен Джейкоб

Всегда пожалуйста @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)

Еще лучше: вы также можете использовать геопанды для этого. геопандас позволяет легко сохранять в нескольких форматах, включая шейп-файлы

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')

Вы можете прочитать геометрию линии, используя функцию геопанда 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.