Як перетворити вибрану багаточасткову функцію в одночастинні під час редагування в QGIS?


9

Існує кілька запитань та відповідних відповідей щодо того, як перетворити багатошаровий функціональний шар у одночасний, який використовує QGIS:

Але всі рішення, які я бачив, створюють абсолютно новий шар і перетворюють ВСІ багаточастинні геометрії на одиничні.

Отже, питання полягає в тому, як можна під час сеансу редагування вибірково перетворювати багаточастинну функцію в функцію однопартійного без необхідності створення нових шарів?

Це було б протилежним інструменту "об'єднати вибрані функції" і подібним до вибуху в ArcGIS.

Чи є якийсь плагін, що робить це? Як це можна зробити за допомогою консолі python?

Відповіді:


18

Натхнений цим запитанням і відповіддю як приклад того, як "легко" можна зробити власні рішення при використанні Open Source, я спробував створити власний код, щоб вибірково "вибухнути" багаточастинні функції під час сеансу редагування.

Я вперше дослідив API QGIS 1.8 і вийшов із цим кодом, який виконує цю роботу:

layer = qgis.utils.iface.mapCanvas().currentLayer()
remove_list = []

for feature in layer.selectedFeatures():
    geom = feature.geometry()
    # check if feature geometry is multipart
    if geom.isMultipart():
        remove_list.append(feature.id())
        new_features = []
        temp_feature = QgsFeature(feature)
        # create a new feature using the geometry of each part
        for part in geom.asGeometryCollection ():
            temp_feature.setGeometry(part)
            new_features.append(QgsFeature(temp_feature))
        # add new features to layer
        layer.addFeatures(new_features, False)

# remove the original (multipart) features from layer
if len(remove_list) > 0:
    for id in remove_list:
        layer.deleteFeature (id)    

Я не досвідчений програміст, тому код може бути не найефективнішим.

Наступним крутим буде зробити плагін з нього ... Або принаймні, спробуйте!

ОНОВЛЕННЯ:
я зміг створити плагін. Він називається Multipart Split , і його можна знайти в офіційному сховищі QGIS.


1
Чи можна було б виконати цю конверсію Multipart -> Singlepart без QGIS? Чи є спосіб це зробити за допомогою автономного Python? @Alexandre Neto
Ахіл

Зауважте, що це рішення покладається на вибір частини особливостей шару під час редагування на полотні карти. Для перетворення всіх функцій шару (скажімо, формафайлу) в функції однієї частини, я думаю, ви можете використовувати бібліотеку OGR. Подивіться за цим посиланням .
Олександр Нето

Ура! Допомагає .. !!
Ахіл

Я хочу взяти шар, який є одним багаточастинним багатокутником, і перетворити його в одну частину - я не можу знайти код python, щоб це зробити в qgis. Я бачу, що існує команда під інструментами вектор - геометрія - Багаточастинки до одночастин. це те, що я хочу, мені просто потрібен синтаксис python
kflaw

@AlexandreNeto чудовий плагін!
DPSSpatial
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.