Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
NMT z CODGiK. Jak zamienić punkty na linie
06-04-2018, 16:00,
#11
RE: NMT z CODGiK. Jak zamienić punkty na linie
Nie wspominałeś, że to ma być 3D.

Teraz skrypt zwraca geometrię 3D, zarówno do pliku wczytanego do QGIS (tam dodałem jeszcze atrybuty  min h i max h), jak i do dxf - musisz sobie ustalić ścieżki, nazwy plików itp.

Kod:
from osgeo import ogr
from itertools import takewhile
from qgis.core import *
from qgis.PyQt.QtCore import *
from numpy import mean as srednia


#sciezka do pliku z tekstem
plik = 'h:/python/asci/N-34-80-C-d-2_z.asc'
plik_dxf = 'h:/python/asci/N-34-80-C-d-2_z.dxf'
obiekty = []
i = 1
with open(plik) as f:  
       for line in f:
           if line.startswith('Start'):
               data = takewhile(lambda x: not x.startswith("End"),f)
               linia = ogr.Geometry(ogr.wkbLineString)
               wys = []
               for wiersz in data:
                   wsp = wiersz.split(' ')
                   linia.AddPoint(float(wsp[1]),float(wsp[0]), float(wsp[2]) )
                   wys.append(float(wsp[2]))
               wys_sr = format(srednia(wys),'.2f')
               wys_max = format(max(wys),'.2f')
               wys_min = format(min(wys),'.2f')
               gotowa_geom = linia.ExportToWkt()
               geom = QgsGeometry.fromWkt(gotowa_geom)
               ob = [i, wys_sr, geom,wys_max, wys_min]
               obiekty.append(ob)
           i += 1

warstwa_liniowa = QgsVectorLayer("LineString?crs=epsg:2180", 'test', "memory")
pr = warstwa_liniowa.dataProvider()
warstwa_liniowa.startEditing()
pr.addAttributes([QgsField('ID', QVariant.Int)])
pr.addAttributes([QgsField('WYS', QVariant.Double)])
pr.addAttributes([QgsField('MAX_WYS', QVariant.Double)])
pr.addAttributes([QgsField('MIN_WYS', QVariant.Double)])
warstwa_liniowa.commitChanges()

caps = warstwa_liniowa.dataProvider().capabilities()
if caps & QgsVectorDataProvider.AddFeatures:
   feat=QgsFeature(warstwa_liniowa.pendingFields())
   for  feature in obiekty:
       feat.setAttribute('ID', feature[0])
       feat.setAttribute('WYS', feature[1])
       feat.setAttribute('MAX_WYS', feature[3])
       feat.setAttribute('MIN_WYS', feature[4])
       feat.setGeometry(feature[2])
       warstwa_liniowa.addFeatures([feat])
       (res, outFeats) = warstwa_liniowa.dataProvider().addFeatures([feat])

warstwa_liniowa.commitChanges()
warstwa_liniowa.updateExtents()
QgsMapLayerRegistry.instance().addMapLayer(warstwa_liniowa, True)
QgsVectorFileWriter.writeAsVectorFormat(warstwa_liniowa, plik_dxf, "utf-8", warstwa_liniowa.crs(), "DXF", skipAttributeCreation=True)
       
       
09-04-2018, 08:37,
#12
RE: NMT z CODGiK. Jak zamienić punkty na linie
Niestety nie przyszło mi do głowy, żeby zaznaczyć, że potrzebuję 3D...

W każdym razie zmaziax: Panowie czapki z głów! Wszystko działa jak należy. Wspaniała robota.

Dziękuję jeszcze raz,
Emeryt


Podobne wątki
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Konwersja poligonów na punkty (centroidy) Omega933 1 3 595 15-02-2021, 18:05
Ostatni post: jerresso
  punkty gps i dodanie nowego atrybutu czarna1991 4 14 804 30-12-2017, 11:03
Ostatni post: xmaziax
  CODGiK Punkty adresowe zmniejszenie pliku XML Loozak 5 19 226 13-10-2016, 13:09
Ostatni post: pelekPL
  Punkty na warstwach nikivor 1 10 499 17-02-2014, 00:59
Ostatni post: Roland_z_Gilead
  Punkty na linie nieznany 1 12 702 31-07-2013, 13:49
Ostatni post: [wiki]
  Punkty na poligony rewelator 3 25 579 09-10-2012, 14:36
Ostatni post: rewelator
  Jak podzielić linie,shp RobertF 1 11 533 18-05-2012, 00:37
Ostatni post: robert
  jak narysować linię telefoniczną ? tomsik 3 18 177 11-05-2012, 14:43
Ostatni post: sebaq
  Interpolacja - linie strukturalne, linie nieciągłości gregsa 4 23 064 22-09-2011, 13:41
Ostatni post: gregsa
  Jak zamienić miejscami współrzędne x,y w tabeli georeferencji koberek 1 11 030 15-04-2011, 13:25
Ostatni post: tomalos

Skocz do: