[OSGeo-Brasil] Passando de 2D para 3D

jorge.destri jorge.destri em labtrans.ufsc.br
Terça Março 19 13:23:37 PDT 2013


Preciso converter o conteúdo de um shapefile de 2D para 3D.
Na internet, peguei umas dicas e cheguei a esse código python:

from osgeo import ogr
shapefile = ogr.Open('/home/jorge/temp/42MUE250GC_SIR.shp', 1)
layer = shapefile.GetLayer(0)

i = 0
for feat in layer:
    i += 1
    geom = feat.GetGeometryRef()

    #geom.SetCoordinateDimension (3)

    ring = geom.GetGeometryRef(0)
    points = ring.GetPointCount()
    #para teste
    if i > 292:
        j = 0
        for p in xrange(points):
            j += 1
            lon, lat, z = ring.GetPoint(p)
            ring.SetPoint( p, 1on, 1at, 5 )

            #para confirmar a altereção
            lon, lat, z = ring.GetPoint(p)
            print( i, j, lon, lat, z )

            layer.SetFeature(feat)
shapefile.Destroy()

Na execução ele mostra os pontos alterados com elevação 5, mas quando 
executo novamente, a coordenada Z está zerada. Se altero a longitude ou 
a latitude a mudança persiste.
Tentei usar o comando comentado : geom.SetCoordinateDimension (3), mas 
também ele não persiste.
Acredito que talvez tenha que mudar a geometria para wkbLineString25D 
ou wkbMultiPoint25D ou wkbMultiLineString25D ou wkbMultiPolygon25D ou 
wkbPoint25D conforme o tipo 2D, porém não encontro um método que faça 
isso.

Agradeço por qualquer dica.



More information about the Brasil mailing list