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

Daniel Araujo Miranda miranda.dam em dpf.gov.br
Quarta Março 20 11:33:08 PDT 2013


Olá Jorge,
   Essa elevação é igual para toda a estrada ou é diferente para cada 
ponto da estrada?

   A propósito, tem uma coisa estranha no seu código. Na parte 
"ring.SetPoint( p, 1on, 1at, 5 )" você está usando o numeral um (1) ao 
invés da letra "éle" (l) nas variáveis 'lon' e 'lat'.

--Miranda



On 20-03-2013 13:44, jorge.destri wrote:
> 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
>
> _______________________________________________
> Brasil mailing list
> Brasil em lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/brasil
>


More information about the Brasil mailing list