[Gvsig_english] How to access schema from an input shapefile in scripting

Óscar Martínez omartinez at gvsig.com
Fri Oct 14 16:29:22 CEST 2016


No problem at all! :)

Sorry, i'm not sure what do you want to do.. create a new shapefile and 
work with it? or export (make a copy) of a existing shapefile?


El 14/10/16 a las 15:33, Silvia Franceschi escribió:
> Hi Óscar,
> always me.. :-)
> is there also a way to write a layer in a shapefile directly from a 
> script or do I have to load it in gvSIG and save it from there?
>
> Thanks
>
> Silvia
>
>
> On Fri, Oct 14, 2016 at 1:54 PM, Silvia Franceschi 
> <silvia.franceschi at gmail.com <mailto:silvia.franceschi at gmail.com>> wrote:
>
>     Thank you Óscar for your detailed explanation and your help!
>
>     Silvia
>
>     On Fri, Oct 14, 2016 at 11:59 AM, Óscar Martínez
>     <omartinez at gvsig.com <mailto:omartinez at gvsig.com>> wrote:
>
>         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.im
>>         <http://org.gvsig.fmap.dal.feature.im>pl.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/>
>>
>>         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/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
>>         <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/
>>         <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
>>>         <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>
>         _______________________________________________
>         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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.gva.es/pipermail/gvsig_internacional/attachments/20161014/03c6183c/attachment.html>


More information about the Gvsig_internacional mailing list