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, 11:27,
#9
RE: NMT z CODGiK. Jak zamienić punkty na linie
Na wyjściu otrzymujesz 1 element zbudowany z wielu punktów. Punkty składowe mają różne wysokości, więc wynikowej wysokości nie można przyjąć bezpośrednio z punktów.

Poniżej masz wersję skryptu z wyliczonymi średnimi wartościami dla linii.

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/nmt-n34107cb1_o.asc'
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]) )
                   wys.append(float(wsp[2]))
               wys_sr = format(srednia(wys),'.2f')
               gotowa_geom = linia.ExportToWkt()
               geom = QgsGeometry.fromWkt(gotowa_geom)
               ob = [i, wys_sr, geom]
               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)])
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.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)
       
       


Wiadomości w tym wątku
RE: NMT z CODGiK. Jak zamienić punkty na linie - przez xmaziax - 06-04-2018, 11:27

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

Skocz do: