Hi Silvia,

Sorry with our last emails I forgot this one.

So this two quick scripts:

- a 2D point layer with a column of z of which I would create a 3D point layer

# encoding: utf-8

import gvsig
from gvsig import geom

def main(*args):

    layer = gvsig.currentLayer()
    features = layer.features()

    #Create schema based on a existing schema
    sch = gvsig.createFeatureType(layer.getSchema())
    #We modified the geometry field of that schema for the geometry type that 
we want
    sch.getDefaultGeometryAttribute().setGeometryType(geom.POINT, geom.D3)

    #new shape
    shp = gvsig.createShape(sch, prefixname="points3d")
for feature in features:

        g = feature.geometry()
        #print g.getX(), g.getY(), feature.get("z")
z = float(feature.get("z")) # z field convert to a float number (in my case was a string field)
        point3d = geom.createPoint(geom.D3, g.getX(), g.getY(), z)

        values = feature.getValues()
        values["GEOMETRY"] = point3d
shp.append(values)

    shp.commit()
    gvsig.currentView().addLayer(shp)

- a 2D line layer with a column containing the elevation of each corner of the line which I would create a 3D line layer. (*This script will be useful for lines and for polygons*, becouse their geometry works in the same way)

# encoding: utf-8

import gvsig

from gvsig import geom

def main(*args):

    layer = gvsig.currentLayer()

    features = layer.features()

    #Create schema based on a existing schema

    sch = gvsig.createFeatureType(layer.getSchema())

    #We modified the geometry field of that schema for the geometry type that 
we want

    sch.getDefaultGeometryAttribute().setGeometryType(geom.CURVE, geom.D3)

    #new shape

    shp = gvsig.createShape(sch, prefixname="linepol3d")

    for feature in features:

        z = float(feature.get("z")) # z field convert to a float number

        g = feature.geometry()

        # we will create a python list with all the vertexes

        linevertexes = []

        # access to the vertexes of the geometry (line or pol is the same way)

        for vertex in g:

            p1 = geom.createPoint(geom.D3, vertex.getX(), vertex.getY(), z)

            linevertexes.append(p1)

        # create 3dline with this vertexes

        line3d = geom.createLine(geom.D3, linevertexes)

        print line3d

        values = feature.getValues()

        values["GEOMETRY"] = line3d

        shp.append(values)

    shp.commit()

    gvsig.currentView().addLayer(shp)



Best regards,
Óscar

El 12/10/16 a las 14:44, Silvia Franceschi escribió:
Dear all,
sorry for asking here, but I can not find any information about the possibility to handle 3D vector layers (as shapefiles) in gvSIG.
Is it possible to create/modify a 3D vector layer (point, line) in gvSIG?

I have two types of data to modify:
- a 2D point layer with a column of z of which I would create a 3D point layer - a 2D line layer with a column containing the elevation of each corner of the line which I would create a 3D line layer.

Any idea on how I can do?

Thanks,

Silvia

--
ing. Silvia Franceschi
Via Latemar, 22
38030 Castello di Fiemme (TN)

tel: 0039 -3384501332


_______________________________________________
Gvsig_internacional mailing list
Gvsig_internacional@listserv.gva.es

To see the archives, edit your preferences or unsubscribe from this mailing 
list, please access this url:

https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_internacional

_______________________________________________
Gvsig_internacional mailing list
Gvsig_internacional@listserv.gva.es

To see the archives, edit your preferences or unsubscribe from this mailing 
list, please access this url:

https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_internacional

Reply via email to