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

jorge.destri jorge.destri em labtrans.ufsc.br
Quarta Março 20 09:44:13 PDT 2013


Prezado Luiz,

Deixa eu descrever meu problema/necessidade. 
O laboratório que eu trabalho frequentemente recebe arquivos de
rodovias, em formato shapefile, para uso/análise em algum projeto.
Porém, na sua quase totalidade, a elevação não está incluída, o que
inviabiliza determinadas análises. 
Meu objetivo então é, com base em dados de altimetria de outras fontes,
transformar as coordenadas do shapefile de 2D para 3D, para futuro uso.
Vou dar uma olhada nas referências que você citou.


On Tue, 19 Mar 2013 18:09:30 -0300, Luiz Motta <motta.luiz em gmail.com>
wrote:
> Jorge,
> 
> Vc. está querendo colocar o Z numa camada 2d ?
> 
> Acho que vc. está confundindo Multipart, anel interno,... com
> geometria 3D.
> 
> Faça uma revisão nesses conceitos, veja na OGC Single Feature e
> depois a API da Gdal/Ogr. 
> 
> Em 19 de março de 2013 17:23, jorge.destri  escreveu:
>  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.
> 
>  _______________________________________________
>  Brasil mailing list
>  Brasil em lists.osgeo.org [2]
>  http://lists.osgeo.org/mailman/listinfo/brasil [3]
> 
> 
> 
> Links:
> ------
> [1] mailto:jorge.destri em labtrans.ufsc.br
> [2] mailto:Brasil em lists.osgeo.org
> [3] http://lists.osgeo.org/mailman/listinfo/brasil



More information about the Brasil mailing list