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

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


Miranda,

Cada ponto poderá ter uma elevação diferente, pois dependerá da
consulta na base de altimetria.
Quanto aos '1" (uns) é um produto de um monte de testes e copy/past mal
feitos. Você tem razão, no original está com a letra "l".


On Wed, 20 Mar 2013 15:33:08 -0300, Daniel Araujo Miranda
<miranda.dam em dpf.gov.br> wrote:
> 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