[Gvsig_english] How to access schema from an input shapefile in scripting
Óscar Martínez
omartinez at gvsig.com
Fri Oct 14 11:59:29 CEST 2016
Reading again your email maybe this also answer your question:
Inside the script you can make a: print dir(layer) and it will show you
the avalaible functions of that type of object.
El 14/10/16 a las 11:26, Óscar Martínez escribió:
>
> Hi Silvia,
>
>
> | Is there a way to know which functions are implemented for each
> feature type in gvSIG scripting?
>
> If i understand correctly your question.. Quick answer, all. Since
> 2.3, we are not working with a different library for scripting. We
> improved the way to work directly with the JAVA API, plus new
> functions (like.. createShape(schema)), methods (like.. getValues()
> over a feature to return a python dict) and new classes (like..
> FormPanel to create scripts with graphical interface), all to make it
> easy and quick to work from scripting. Not sure if is a good way to
> say it (just to explain this better), but we could say right now is
> the java api who hasn't have all the funcions implemented.
>
> As you can see in the script, type(layer) and type(features) are java
> objects.
>
> Running script.
> layer type: <type 'org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect'>
> layer features: <type
> 'org.gvsig.fmap.dal.feature.impl.featureset.DefaultFeatureSet'>
> Script terminated.
>
> So, you should be able to check the javadocs, and use all the
> functions that are in there:
>
> http://downloads.gvsig.org/download/gvsig-desktop-testing/dists/2.3.0/javadocs/html/
>
> http://downloads.gvsig.org/download/gvsig-desktop-testing/dists/2.3.0/javadocs/html/org/gvsig/fmap/mapcontext/layers/vectorial/FLyrVect.html
>
> http://downloads.gvsig.org/download/gvsig-desktop-testing/dists/2.3.0/javadocs/html/org/gvsig/fmap/dal/feature/impl/featureset/DefaultFeatureSet.html
>
>
> Plus all from scripting (we are updating this javadoc, soon will be
> more complete):
>
> http://downloads.gvsig.org/download/gvsig-desktop-testing/dists/2.3.0/docs/javadocs/html/
>
>
> Deleting features should be something similar to this (delete all
> features with a filter "ID < 10"):
>
> # encoding: utf-8
>
> from gvsig import *
>
> def main(*args):
> """ Delete features inside a layer"""
>
> layer = currentLayer()
> features = layer.features("ID < 10") #DefaultFeatureSet
>
>
> print "layer type: ", type(layer)
> print "layer features: ", type(features)
>
> layer.edit()
>
> for i in features:
> ivalues = i.getValues()
> print ivalues
> features.delete(i)#delete over the featureset
>
> layer.commit()
>
>
> Best regards,
> Óscar
>
>
> El 14/10/16 a las 10:53, Silvia Franceschi escribió:
>> Hi Óscar,
>> the scripts work fine, many thanks again!
>> May I just ask you one more question?
>> Is there the possibility to remove a feature from a list of features?
>> like featureslist.remove() or something like that?
>> I tried with remove and delete but it seems that these do not exist,
>> any idea?
>>
>> Is there a way to know which functions are implemented for each
>> feature type in gvSIG scripting?
>>
>> Thanks
>>
>> Silvia
>>
>>
>> On Thu, Oct 13, 2016 at 6:25 PM, Silvia Franceschi
>> <silvia.franceschi at gmail.com <mailto:silvia.franceschi at gmail.com>> wrote:
>>
>> Thank you Óscar,
>> to tell you the truth I started to use currentLayer but, since I
>> need to work with two layers I didn't know how to do and tried to
>> load data from files.
>> And in any case the final script should work with a list of
>> shapefiles in a folder, so, I will for sure move to the file
>> based data source at some point.
>>
>> I was following the documentation you linked, it is very useful
>> to start to get familiar with the scripting environment, thanks!
>>
>> I will try the scripts you sent to me and let you know if I will
>> solve my problems.
>>
>> Thank you very much for the quick answer!
>>
>> Silvia
>>
>>
>>
>>
>> On Thu, Oct 13, 2016 at 6:00 PM, Óscar Martínez
>> <omartinez at gvsig.com <mailto:omartinez at gvsig.com>> wrote:
>>
>> Hi!
>>
>> If i understood correctly, you don't need to use the
>> getSchema function. I'm going to give you my solution with
>> two test layers, give it a try and tell us if that works for
>> you or what exactly more do you need. If you don't understand
>> some part of the script i can explain it better. Some help is
>> inside the script, step by step.
>>
>> I recommend to you to start learning scripting using the
>> functions currentLayer() (current layer selection in the
>> table of contents) or currentView().getLayer("layername")
>> instead of using loadShapeFile everytime. It's easier if you
>> just have a loaded layer in your view and access to each one
>> each layer with currentLayer o getLayer.
>>
>> If someone on the list want to know more about this part of
>> scripting, here are some links from the spanish docs (hope
>> soon in english) related to this post:
>>
>> Access to features:
>> http://downloads.gvsig.org/download/web/html/es/scripting_devel_guide/2.3/acceso_a_objetos.html#entidad
>> <http://downloads.gvsig.org/download/web/html/es/scripting_devel_guide/2.3/acceso_a_objetos.html#entidad>
>>
>> Spatial operations:
>> http://downloads.gvsig.org/download/web/html/es/scripting_devel_guide/2.3/modulo_geom.html#operaciones-espaciales
>> <http://downloads.gvsig.org/download/web/html/es/scripting_devel_guide/2.3/modulo_geom.html#operaciones-espaciales>
>>
>> Current functions:
>> http://downloads.gvsig.org/download/web/html/es/scripting_devel_guide/2.3/acceso_a_objetos.html
>> <http://downloads.gvsig.org/download/web/html/es/scripting_devel_guide/2.3/acceso_a_objetos.html>
>>
>>
>> Any trouble here we are!
>>
>>
>> Best regards,
>>
>> Óscar
>>
>>
>>
>> Script (layers of this test are in EPSG:25830) (feature AREA1
>> is a multipolygon):
>>
>> # encoding: utf-8
>>
>> import gvsig
>>
>> def main(*args):
>> # You need to have one view with to layers opened on it
>> # The name of the layers will be the name that appear
>> # in the table of contents of the view
>>
>> # To access to the layers that are already loaded in gvSIG
>> # gvsig.currentView() give us access to the opened view
>> # gvsig.currentView().getLayer(name) give us access a
>> specified layer
>> points = gvsig.currentView().getLayer("points")
>> area = gvsig.currentView().getLayer("area")
>>
>> # Access to the features
>> features_points = points.features()
>> features_area = area.features()
>>
>> # if you want access to a selection of features, not all
>> # you will have to change `features()` with `getSelection()`
>> #features_points = points.getSelection()
>> #features_area = area.getSelection()
>>
>> for farea in features_area:
>> print "\nChecking : ", farea.get("localId")
>> geom_farea = farea.geometry()
>>
>> #for each area, check all points without intersection
>> for fpoint in features_points:
>> geom_fpoint = fpoint.geometry()
>>
>> if not geom_farea.intersects(geom_fpoint):
>> print "\tArea: ", farea.get("localId"), "
>> intersects with :", fpoint.get("ID")
>> # work with the feature
>>
>> Console output:
>>
>> Running script testing_silvia_intersec.
>>
>> Checking : AREA1
>> Area: AREA1 intersects with : 101
>> Area: AREA1 intersects with : 102
>> Area: AREA1 intersects with : 103
>> Area: AREA1 intersects with : 107
>>
>> Checking : AREA2
>> Area: AREA2 intersects with : 103
>> Area: AREA2 intersects with : 104
>> Area: AREA2 intersects with : 105
>> Area: AREA2 intersects with : 106
>> Area: AREA2 intersects with : 107
>> Area: AREA2 intersects with : 108
>> Script testing_silvia_intersec terminated.
>>
>>
>>
>> El 13/10/16 a las 15:05, Silvia Franceschi escribió:
>>> Hi all,
>>> I am trying to write my first script in gvSIG and Python, I
>>> need to read a point shapefile and filter some elements that
>>> are outside a defined area.
>>> To do this I have to read two input layers, one with the
>>> points and one with the area and then work on each single
>>> features of the point layer.
>>> I started with the selection of the input layers using a
>>> filechooser dialog (commonsdialog.filechooser) and then I
>>> need to obtain the schema of these layers, but it seems that
>>> the object filechooser do not have the .getSchema() function.
>>> Do you have any idea on how to obtain the schema from a
>>> vector layer selected using the filechooser?
>>>
>>> Thanks in advance for any help!
>>>
>>> Silvia
>>>
>>>
>>> --
>>> ing. Silvia Franceschi
>>> Via Latemar, 22
>>> 38030 Castello di Fiemme (TN)
>>>
>>> tel: 0039 -3384501332 <tel:0039%20-3384501332>
>>>
>>>
>>> _______________________________________________
>>> Gvsig_internacional mailing list
>>> Gvsig_internacional at listserv.gva.es
>>> <mailto:Gvsig_internacional at 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
>>> <https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_internacional>
>> _______________________________________________
>> Gvsig_internacional mailing list
>> Gvsig_internacional at listserv.gva.es
>> <mailto:Gvsig_internacional at 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
>> <https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_internacional>
>>
>>
>> --
>> ing. Silvia Franceschi Via Latemar, 22
>> 38030 Castello di Fiemme (TN) tel: 0039 -3384501332
>> <tel:0039%20-3384501332>
>>
>> --
>> ing. Silvia Franceschi Via Latemar, 22
>> 38030 Castello di Fiemme (TN) tel: 0039 -3384501332
>>
>> _______________________________________________
>> Gvsig_internacional mailing list
>> Gvsig_internacional at 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 at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.gva.es/pipermail/gvsig_internacional/attachments/20161014/c5bb5051/attachment.html>
More information about the Gvsig_internacional
mailing list