Revision 564 org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.app/org.gvsig.scripting.app.mainplugin/src/main/resources-plugin/scripting/scripts/libs/gvpy.py

View differences:

gvpy.py
1 1
# -*- coding: utf-8 -*-
2 2
#
3 3
# File: gvpy.py
4
# Version: v0.4
5
#
4
# Version: v0.5
5
# 2016/02/10
6 6

  
7 7
__author__ = """Oscar Martinez Olmos <masquesig@gmail.com>"""
8 8

  
......
18 18
import java.awt.event
19 19
import java.awt.geom
20 20
from java.io import File
21
from java.util import ArrayList
21 22

  
22
def addDependencyWithPlugin(pluginCode):
23
    pluginsManager = PluginsLocator.getManager()
24
    scriptingPlugin = pluginsManager.getPlugin("org.gvsig.scripting.app.extension")
25
    scriptingPlugin.addDependencyWithPlugin(pluginsManager.getPlugin(pluginCode))
23
import uselib
24
uselib.use_plugin("org.gvsig.geoprocess.app.mainplugin")
26 25

  
27
addDependencyWithPlugin("org.gvsig.geoprocess.app.mainplugin")
28

  
29 26
from es.unex.sextante.core import Sextante, OutputFactory, AnalysisExtent
30 27
from es.unex.sextante.outputs import FileOutputChannel
31 28
from es.unex.sextante.gui.core import SextanteGUI
32 29
from es.unex.sextante.dataObjects import IRasterLayer
30
from es.unex.sextante.parameters import RasterLayerAndBand
33 31

  
34 32
from org.gvsig.geoprocess.lib.sextante.dataObjects import FlyrVectIVectorLayer, FLyrRasterIRasterLayer, TableDocumentITable
35 33
from org.gvsig.fmap.mapcontext.layers import FLayer
36 34
from java.awt.geom import RectangularShape, Rectangle2D
37 35
from org.gvsig.fmap.mapcontext.layers.vectorial import FLyrVect
38 36
from org.gvsig.raster.fmap.layers import DefaultFLyrRaster
37
from org.gvsig.app.project.documents.view import DefaultViewDocument
38
from org.gvsig.fmap.dal import DALLocator
39
from org.gvsig.fmap.mapcontext import MapContextLocator
39 40

  
40 41
#Constant
41 42
TYPE_POLYGON = 0
......
137 138
              else:
138 139
                  paramValue = self.__createSextanteLayer(paramValue())
139 140

  
140
              if DEV_INFO: print "extent add+"
141
              if DEV_INFO: print "Extent add"
141 142
              if self.__defaultAE == None:
142 143
                  self.__defaultAE = AnalysisExtent(paramValue)
143 144
              else:
......
157 158
                  else:
158 159
                      if DEV_INFO: print type(i)
159 160
                      if isinstance(i, tuple): #si dentro de la lista viene una tupla identificamos que es un raster y su banda
160
                          from es.unex.sextante.parameters import RasterLayerAndBand
161 161
                          rlb = RasterLayerAndBand(self.__createSextanteRaster(i[0]),i[1])  #puesta numero de banda
162

  
163 162
                          ii = self.__createSextanteRaster(i[0])
164 163
                          i = rlb
165
                          if DEV_INFO: print "*************************** RASTERLAYERBAND", rlb
166

  
164
                          if DEV_INFO: print "RASTERLAYERBAND", rlb
167 165
                      else:
168 166
                          if str(type(i)) == "<type 'org.gvsig.raster.fmap.layers.DefaultFLyrRaster'>":
169 167
                              ii = self.__createSextanteRaster(i)
......
171 169
                          else:
172 170
                              ii = self.__createSextanteLayer(i())
173 171
                              i = self.__createSextanteLayer(i())
174

  
175 172
                      if DEV_INFO: print "createStextenatnte Layer i :", i
176 173
                      paramValue2.append(i)
177

  
178 174
                  if self.__defaultAE == None:
179 175
                          try:
180 176
                              self.__defaultAE = AnalysisExtent(AnalysisExtent(ii))
......
195 191
                          except:
196 192

  
197 193
                              self.__defaultAE.addExtent(AnalysisExtent(ii()))
198

  
199 194
                  """
200 195
                  if self.__defaultAE == None:
201 196
                      try:
......
217 212
                  """
218 213

  
219 214
              paramValue = paramValue2
220
              from java.util import ArrayList
215
              
221 216
              if DEV_INFO:
222 217
                  print "PARAM VALUE 2: ", paramValue
223 218
                  print "****************** CONDI6: ", paramValue
......
318 313
          frame = kwparams['EXTENT']
319 314
          if isinstance(frame, str): frame = gvsig.currentView().getLayer(frame)
320 315
          #print ("|"+str(frame)+"||"+str(type(frame)))
321
          if isinstance(frame, str) or isinstance(frame, gvsig.View):
316
          if isinstance(frame, str) or isinstance(frame, DefaultViewDocument):
322 317
              AExtent = AnalysisExtent()
323 318
              if DEV_INFO: print "| EXTENT from VIEW"
324
              if isinstance(frame, gvsig.View): view = frame
319
              if isinstance(frame, DefaultViewDocument): view = frame
325 320
              else: view = gvsig.currentProject().getView(frame)
326 321
              envelope = view.getMap().getFullEnvelope()
327 322
              xlow = envelope.getLowerCorner().getX()
......
390 385
          algorithm.setAnalysisExtent(AExtent)
391 386

  
392 387
      #Set: cellsize
393

  
394 388
      if 'CELLSIZE' in kwparams.keys():
395 389
          AExtent.setCellSize(kwparams['CELLSIZE'])
396 390
          if DEV_INFO: print "| New Cellsize: ", kwparams['CELLSIZE'], AExtent.getCellSize()
......
472 466
          layer.dispose()
473 467
      elif isinstance(value, IRasterLayer):
474 468
          if DEV_INFO: print "| Raster layer"
475
          dalManager = gvsig.DALLocator.getDataManager()
476
          mapContextManager = gvsig.MapContextLocator.getMapContextManager()
469
          dalManager = DALLocator.getDataManager()
470
          mapContextManager = MapContextLocator.getMapContextManager()
477 471
          params = dalManager.createStoreParameters("Gdal Store")
478 472
          params.setFile(File(value.getFilename()))
479 473
          dataStore = dalManager.createStore(params)
......
516 510
                    value = loadShapeFileNew(str(path), tocName=kwparams["TOCNAME"])
517 511
                else:
518 512
                    value = loadShapeFileNew(str(path))
519

  
520

  
521 513
            outList.append(value)
522 514
        elif isinstance(value,FLayer):
523 515
            print "|\t Value:", value.getName()
524
            print "|\t\t", value.getFileName()[0]
516
            print "|\t\t", value.getFile()
525 517
            #Not yet: Waiting for new loadRasterLayer that can set OUTVIEW
526 518
            if "TOCNAME" in kwparams:
527
                value = loadRasterLayerNew(value.getFileName()[0], tocName=kwparams["TOCNAME"])
519
                value = loadRasterLayerNew(value.getFile(), tocName=kwparams["TOCNAME"])
528 520
            else:
529
                value = loadRasterLayerNew(value.getFileName()[0])
530
                
521
                value = loadRasterLayerNew(value.getFile())
531 522
            outList.append(value)
532 523
        else:
533 524
            print "|\t Non-type"
534 525
            print "\tValue: ", value
535
      print "\n"
536 526

  
527

  
537 528
      #Return object or list
529
      print "\n"
538 530
      if len(r.values()) > 1: return outList
539 531
      elif len(r.values()) == 1: return value
540 532
      else: return None
......
598 590
        view= gvsig.currentView()
599 591
    view.addLayer(layer)
600 592
    layer.setActive(active)
601
    return gvsig.Layer(layer)
602
    
593
    return layer #gvsig.Layer(layer)
594

  
595
def copyToDynObject(values, target):
596
  definition = target.getDynClass();
597
  fields = definition.getDynFields();
598
  for field in fields:
599
    name = field.getName()
600
    keys = values.keys()
601
    for k in keys:
602
      if k.lower() == name.lower():
603
        target.setDynValue(name, values[name])
604
        break
605
        
603 606
def loadLayerNew(layerType, tocName=False, **parameters): #
604 607
        try:
608
            # need function copyToDynObject
605 609
            application = ApplicationLocator.getManager()
606 610
            datamanager =  application.getDataManager()
607 611
            mapcontextmanager = application.getMapContextManager()
608 612
            store_parameters = datamanager.createStoreParameters(layerType)
609
            gvsig.copyToDynObject(parameters, store_parameters)
613
            copyToDynObject(parameters, store_parameters)
610 614
            store = datamanager.openStore(layerType, store_parameters)       
611 615
            if tocName!=False:
612 616
                nameStore = tocName
613 617
            else:
614 618
                nameStore = store.getName()
615 619
            layer = mapcontextmanager.createLayer(nameStore, store)
616
        except Throwable, ex:
617
            raise RuntimeException("Can't load layer, "+ str(ex))  
620
            return layer
621
        except Exception as ex:
622
            raise 
618 623

  
619
        return layer
620

  
621 624
def loadRasterLayerNew(rasterfile, mode = "r", tocName=False ):
622 625
    ## Load a Raster file in a Layer
623 626
    gvsig_raster.sourceFileName[0]=rasterfile
......
715 718
          else:
716 719
             count+=1
717 720
    return None
721
    
718 722
def currentActive():
719 723
    """Return first active layer on the View"""
720 724
    layers = gvsig.currentView().getLayers()
......
751 755
            if os.path.isfile(fname): raise Exception("File already exist" + fname)
752 756

  
753 757
def main(*args):
754
    #checkFilesExist(["C:/gvsig/ran10.shp"])
758
    checkFilesExist("C:/gvsig/ran10.shp")
755 759

  
756
    #geoprocessSearch(" ")
757
    #geoprocessHelp("closegapsnn")
758
    #geoprocessHelp("perturbatepointslayer")
759
    #r = runalg("perturbatepointslayer", LAYER = gvsig.currentLayer(),MEAN = 10, STDDEV = 10 )
760
    #r = runalg("perturbatepointslayer", EXTENT = "VIEW", LAYER = currentLayer(),MEAN = 10, STDDEV = 10 )
761
    #r = runalg("perturbatepointslayer", EXTENT = [0,0,500,500], LAYER = currentLayer(), MEAN = 10, STDDEV = 10 )
762
    #r = runalg("perturbatepointslayer", PATH = "C://gvsig//perturbatepoints028.shp", LAYER = gvsig.currentLayer(),MEAN = 5, STDDEV = 5 )
763
    #layer = gvsig.currentView().getLayer("data_test_lines.shp")
764
    #r = runalg("linestoequispacedpoints", LINES=layer,DISTANCE=2)
765 760

  
766
    #for i in range(10):
767
    #r = runalg("perturbatepointslayer", LAYER = r[0],PATH = "C://gvsig//perturbatepoints028_" + str(i) + ".shp",MEAN =0.5, STDDEV = 0.5 )
768
    #r = runalg("fixeddistancebuffer", LAYER = r[0], DISTANCE=1, TYPES="", RINGS=3, NOTROUNDED=False)
769
    #r = runalg("randomvector", COUNT=20, TYPE=1, EXTENT=gvsig.currentView())
770
    #RASTER
771
    #r1 = runalg("generaterandomnormal", EXTENT = [0,0,500,500], PATH = "C://gvsig//perturbatepoints030.tif", MEAN =0.5, STDDEV = 0.5)
772
    #layer = gvsig.currentView().getLayer("perturbatepoints030")
773

  
774
    #raster = currentRaster()
775
    #print raster
776

  
777
    #layer = gvsig_raster.loadRasterLayer('c:/gvsig/test_low.tif')
778
    #r1 = runalg("gradientlines",INPUT = layer, MIN=1, MAX=10, SKIP=1)
779
    #r = runalg("gridorientation",INPUT=layer,METHOD=0)
780
    #r = runalg("gridorientation",INPUT=layer,METHOD=0, PATH = "C://gvsig//perturbatepoints010.tif")
781
    #r = runalg("gridorientation", INPUT=raster, METHOD=0, PATH = "C://gvsig//perturbatepoints011.tif")
782
    #r = runalg("gradientlines", INPUT = layer, MIN=1, MAX=10, SKIP=1, PATH = "C://gvsig//perturbatepoints012.tif")
783
    #r = runalg("generaterandomnormal", EXTENT = [0,0,500,500], PATH = "C://gvsig//perturbatepoints013.tif", MEAN =0.5, STDDEV = 0.5)
784
    #geoprocessHelp("randomvector")
785
    #r = runalg("randomvector", COUNT=20, TYPE=2, EXTENT=gvsig.currentLayer())
786
    #r = runalg("randomvector", 200, TYPE_POINT, EXTENT=gvsig.currentLayer(), PATH="C://gvsig//test_puntos_sm01.shp")
787
    #r = runalg("randomvector", COUNT=20, TYPE=1, EXTENT=gvsig.currentView())
788
    #r = runalg("randomvector", COUNT=20, TYPE=1, EXTENT="VIEW")
789
    #r = runalg("randomvector", COUNT=20, TYPE=1, EXTENT=currentRaster())
790
    #r = runalg("gvSIG-convexhull", LAYER="Puntos_de_interes_01.shp", CHECK=True, PATH = "C://gvsig//gvsigconvexhull_001.shp")
791
    #r = runalg("generaterandomnormal", PATH = "C://gvsig//per.tif", EXTENT=gvsig.currentLayer(), CELLSIZE = 100, PATH = "C://gvsig//perturbatepoints014.tif", MEAN =5, STDDEV = 5)
792
    #geoprocessHelp("tablebasicstats")
793
    #r =runalg("tablebasicstats",TABLE=gvsig.currentTable(), FIELD=0)
794

  
795
    #Without parameters label
796

  
797
    #layers = gvsig.currentView().getLayers()
798
    ##r = runalg("gridorientation", layer, 0, PATH = "C://gvsig//perturbatepoints012.tif")
799

  
800
    #r = runalg("gridorientation", layer, 0)
801
    #r = runalg("gradientlines", layers[0], 1, 10, 1, PATH = "C://gvsig//perturbatepoints012.shp")
802
    #r = runalg("cva", "test_low", "test_low", "test_low", "test_low")
803
    #r = runalg("cva", currentRaster(), currentRaster(), currentRaster(), currentRaster(),PATH=["C:/gvsig/1.tif","C:/gvsig/2.tif"])
804

  
805
    #layerRaster = gvsig_raster.loadRasterLayer('c:/gvsig/test_low.tif')
806
    #r = runalg("gridorientation",layerRaster,0, PATH = "C://gvsig//Grid_orientation.tif",EXTENT=layerRaster, CELLSIZE=1, CELLSIZEZ=10)
807
    #r2 = runalg("cva", r, r, r, r, PATH=["C:/gvsig/1.tif","C:/gvsig/2.tif"])
808
    #print r2[0], r2[1]
809
    #print layerRaster
810
    #print getProjectLayer("Vista1", "test_low")
811

  
812

  
813
    #layer = getProjectLayer("Vista1", "as.shp")
814
    #extent = getProjectLayer("Vista1", "analisis_extent")
815
    #runalg("difference", "as.shp", "vista2_testeo.shp", PATH="C:/gvsig/recorte_extent.shp", EXTENT=[100, 100, 0, 540, 500, 0])
816
    #runalg("difference", "vista2_testeo.shp", layer, PATH="C:/gvsig/recorte_extent_2.shp", EXTENT=layer, OUTVIEW="Nueva")
817
    #r = runalg("tablebasicstats", "species", 0)
818
    #print r.encode("UTF-8")
819

  
820
    #algHelp("generaterandomnormal")
821
    """
822
    r = runalg("generaterandomnormal", 100,100, CELLSIZE=100, EXTENT=[250,250,0,500,500,0])
823
    r = runalg("generaterandomnormal", 10, 10, CELLSIZE=50, EXTENT=[500,500,0, 1000,1000,0])
824
    r = runalg("generaterandombernoulli", 50.0, CELLSIZE=25, EXTENT=[1000,1000,0, 1250,1250,0])
825
    r = runalg("gradientlines", r, 1, 100, 1)
826

  
827
    v1 = runalg("randomvector",10, TYPE_POLYGON, EXTENT=[0,0,0,500,500,0])
828
    v2 = runalg("randomvector", 5, TYPE_POLYGON, EXTENT=v1)
829
    v3 = runalg("difference", v1, v2, PATH="C:/gvsig/Diferencia.shp")
830
    v4 = runalg("randomvector", 5, 0, PATH="C:/gvsig/randomvector.shp", EXTENT=v3)
831
    v5 = runalg("randomvector", 100, 2, PATH="C:/gvsig/randompoints.shp", EXTENT="randomvector", OUTVIEW="Nueva")
832
    v6 = runalg("gvSIG-xyshift", "randompoints", "false", "-250.0", "-250.0", PATH=["C:/gvsig/ran1010.shp","C:/gvsig/ran2020.shp","C:/gvsig/ran3030.shp"])
833
    algHelp("tablebasicstats")
834
    v7 = runalg("gvSIG-buffer", "randompoints", False, 50.0, 0, False, True, 0, 0, PATH="C:/gvsig/buffer_gvsig0138.shp")
835
    v5 = runalg("randomvector", 100, 2, EXTENT=[0,0,0,500,500,0])
836

  
837
    #Test for model sextante
838
    v5 = runalg("randomvector", 10, 2, EXTENT=[0,0,0,500,500,0], OUTVIEW="Nueva")
839
    v5 = runalg("randomvector", "5", 2, EXTENT=[0,0,0,500,500,0], OUTVIEW="Nueva")
840

  
841
    r = runalg("generaterandomnormal", 100,100, CELLSIZE=1)
842

  
843
    vista= (gvsig.currentView().name).encode('UTF-8')
844
    """
845

  
846

  
847
    """
848
    vista= "Sin título"
849
    #vista = vista.encode("UTF-8")
850

  
851
    print gvsig.currentProject().getView(vista)
852

  
853

  
854
    endid = "_104.shp"
855
    v = runalg("randomvector", 20, 0)
856
    v2 = runalg("randomvector", 20, 0,PATH=["C://gvsig//i"+endid])
857
    #fitpoints = runalg("fitnpointsinpolygon",v, "2", "74", 1, 0)
858
    intersection = runalg("gvSIG-intersection", v, getProjectLayer(gvsig.currentView(),"i_102"), True, True,PATH=["C://gvsig//inter_pol"+endid,"C://gvsig//inter_line"+endid,"C://gvsig//inter_point"+endid])
859
    """
860
    #algSearch("nodelines")
861
    #ID:  extractendpointsoflines  || GROUP:  Topolog????a  || NAME:  Obtener extremos de l??neas
862

  
863
    #v7 = runalg("gvSIG-buffer", v, "False", 50.0, 0, "false", "true", 0, 0)
864
    #print "**Addfield: ", gvpy.addField(v, "ID5")
865
    #import gvpy
866
    #gvpy.addField(v, "ID89")
867
    #runalg("vectoraddfield", v, "Campo1", 0, 1, 0, 1, PATH="C:\\Users\\Oscar\\Desktop\\testi.shp")
868
    #layer = runalg("randomvector", 20, TYPE_LINE, EXTENT=[0,0,0,500,500,0], OUTVIEW="Po1")
869

  
870
    #2015-1-2
871

  
872

  
873
    #runalg("graticulebuilder", "10.0", "10.0", 1, PATH="/home/oscm/temp/reticula10.shp")
874
    #layer1 = gvsig.currentView().getLayer("1")
875
    #layer2 = gvsig.currentView().getLayer("2")
876
    #print layer1, layer2
877
    #
878
    #algHelp("cluster")
879
    #runalg("merge", layer1, [layer2])
880

  
881
    #layer1 = sRaster(0)
882
    #layer2 = sRaster(1)
883
    #print "Layer1: ", layer1.name, layer1, layer1.getCellSize()
884
    #print "Layer2: ", layer2.name, layer2, layer2.getCellSize()
885

  
886

  
887 761
    #runalg("cluster" , INPUT=[(layer1, 0),(layer2,0)] , NUMCLASS=3)#, CELLSIZE=layer1.getCellSize(), CELLSIZEZ=1)#,EXTENT=layer1)
888 762
    #runalg("mergegrids", [layer1, layer2], "0")
889 763
    v1 = runalg("randomvector",10, TYPE_POLYGON, EXTENT=[0,0,0,500,500,0], TOCNAME="Random vector")
890 764
    r = runalg("generaterandomnormal", EXTENT = [0,0,0,500,500,0], MEAN =0.5, STDDEV = 0.5, TOCNAME="Raster Generate Random normal")
891
    print "end"
765
    r = runalg("generaterandomnormal", 100,TYPE_POINT, CELLSIZE=100, EXTENT=[250,250,0,500,500,0])
892 766

  
893
def mainLibrary():
894
    #showFields(gvsig.currentLayer())
895
    #removeField(layer, "campo3")
896
    #removeField(layer, "campo5")
897
    #addField(layer,"campo1")
898
    #addField(layer,"campo2")
899
    #renameField(layer, "campo5", "campo50")
900 767

  
901
    #print list2geompoly([[1,2],[3,10],[5,30]])
902
    #addFeature(layer, "test01", "test2", [15,200])
903
    #addFeature(layer, "test11", "test3", geom.createPoint(300, 301))
904
    #addFeature(layer, campo1 = "kwparam", campo2 = "kwparam2", GEOMETRY = geom.createPoint(300,300))
905
    #addFeature(layer, "linea", "01", [[1,2],[3,10],[5,30]])
906
    #addFeature(layer, "pol", "02", [[50,80],[150,50],[100,10],[0,10],[50,80]])
907 768

  
908
    """
909
    layer = newLayer()
910
    addFeature(layer, "pol", "01", [[50,80],[150,50],[100,10],[0,10],[50,80]])
911
    addFeature(layer, "pol", "02", [[0,0],[10,5],[10,10],[0,10],[5,5]])
912
    addFeature(layer, "pol", "03", [[-50, -34],[0,0], [-14,30]])
913
    addField(layer,"campo3")
914
    modifyFeatures(layer, "campo3", "nuevo poligono")
915
    """
916
    """
917
    #Create shapes
918
    layer1 = newLayer(layer,"C:/gvsig/point_shape.shp", 1)
919
    layer2 = newLayer(layer,"C:/gvsig/line_shape.shp", 2)
920
    layer3 = newLayer(layer,"C:/gvsig/polygon_shape", 3)
921 769

  
922
    #Add features
923
    addFeature(layer1, "point", "01", [50,80])
924
    addFeature(layer1, "point", "02",[150,50])
925
    addFeature(layer1, "point", "03",[100,10])
926
    addFeature(layer1, "point", "04",[0,10])
770
### 
771
### MODEL TO SCRIPT
772
###
927 773

  
928
    addFeature(layer3, "polygon", "01", [[50,80],[150,50],[100,10],[0,10],[50,80]])
929 774

  
930
    addFeature(layer2, "line", "01", [[50,80],[150,50],[100,10],[0,10],[50,80]])
931

  
932
    #Modify all values in one column
933
    modifyFeatures(layer1, "campo1", "Points_gsoc")
934
    modifyFeatures(layer2, "campo1", "Lines_gsoc")
935

  
936
    #Modify schema
937
    addField(layer1,"Name")
938
    removeField(layer1,"Surname")
939

  
940
    ##Execute SEXTANTE
941
    #r = geoprocess("perturbatepointslayer", LAYER = currentLayer(),MEAN = 5, STDDEV = 5 )
942
    """
943
    #layer = gvsig.currentView().getLayer("line_04.shp")
944
    #newLayer(layer, "C:/gvsig/gvpy_test006.shp")
945
    #layer2 = copyLayer(layer, "C:/gvsig/gvpy_copylayer_012.shp")
946
    #v = copyLayer(layer, "C:/gvpy_copylayer_new_06.shp")
947
    #layer = gvsig.currentView().getLayer("gvpy_copylayer_new_06")
948
    #addFeature(v, "Camino", [[50,00],[50,50],[10,10],[0,1],[50,18]])
949

  
950
    #Basics field
951
    """
952
    addField(v, "Direccion")
953
    modifyFeatures(v, "Direccion", "Av")
954
    removeField(v, "Direccion")
955
    """
956

  
957
    """
958
    #EJEMPLO 1
959
    #New shapes
960
    layer = gvpy.runalg("randomvector", 20, gvpy.TYPE_LINE, EXTENT=[0,0,0,500,500,0], OUTVIEW="Po1")
961
    #layer = gvsig.currentLayer()
962
    #Advanced field
963
    removeField(layer, "ID")
964
    removeField(layer, "Distance")
965
    addField(layer, "ID") #Add fields
966
    addField(layer, "Distance", "STRING")
967
    addField(layer, "Long", "LONG")
968
    removeField(layer, "Long") #Remove field
969
    modifyFeatures(layer, "ID", "90") #Modify all features
970
    modifyField(layer, "ID", "LONG") #Modify type of field
971
    modifyField(layer, "Distance", "FLOAT")
972
    addFeature(layer, 1, 0, [[50,0],[1000,0]]) #Add new feature with geometry line
973
    for feature in layer.features():
974
        perimeter = feature.geometry().perimeter()
975
        modifyFeature(layer, feature, "Distance", perimeter) #Modify each feature
976

  
977
    pass
978
    #FIN EJEMPLO 1
979
    """
980

  
981
    #modifyFeatures(gvsig.currentLayer(), "ID", 100, "Distance == 90")
982
    layer = gvsig.currentLayer()
983
    for feature in gvsig.currentLayer().features():
984
        value = feature.Distance
985
        #modifyFeature(layer, feature, "ID", distance)
986
        feature.edit()
987
        feature.set("ID", value)
988
        layer.update(feature)
989
    #model2script("C://gsoc//test02.model", "C://gsoc//nuevoScript.py")
990
    print "END TEST"
991

  
992
def copyLayerFeatures2Layer(layer1, layer2):
993
    for i in layer1.features():
994
        layer2.append(i.getValues())
995
    layer2.commit()
996

  
997
def copyLayer(layer, path):
998
    output = newLayer(layer, path)
999
    copyLayerFeatures2Layer(layer, output)
1000
    #addLayerView(output)
1001
    return output
1002

  
1003
def newLayer(layer, path, geometryType=None):
1004
    CRS = layer.getProjectionCode()
1005
    schema = gvsig.createSchema(layer.getSchema())
1006
    if geometryType==None: geometryType = layer.getTypeVectorLayer().getType()
1007
    output = gvsig.createShape( schema, path, CRS=CRS, geometryType=geometryType )
1008
    gvsig.currentView().addLayer(output)
1009
    return output
1010

  
1011
def addLayerView(layer):
1012
    gvsig.currentView().addLayer(layer)
1013

  
1014
def addFeature(layer, *params, **kwparams):
1015
    #IN: layer, feature params + geometry
1016
    typeLayer = layer.getTypeVectorLayer().name
1017
    #if kwparams != {}:
1018
    #    layer.append(kwparams)
1019
    #    layer.commit()
1020
    #    return
1021

  
1022
    if "COMMIT" in kwparams:
1023
        pass
1024
    else:
1025
        COMMIT=1
1026
    if params != ():
1027
        schValues = layer.getSchema().getAttrNames()
1028
        values = {}
1029
        itera = iter((list(params)))
1030
        value = itera.next()
1031
        for sch in schValues:
1032
            #Si el campo a modificar es una geometria
1033
            #print "Comprobación:", sch, isinstance(value, list)
1034
            #re comprobacion si es campo geometry
1035
            #bug: Comprobar si es lista o objeto geom  en primer if
1036
            #... sch == "Geometry" and ES UNA LISTA
1037
            #... sino copia el valor directamente: caso de pasar geometrias
1038
            if sch == "GEOMETRY":
1039
                print typeLayer
1040
                if typeLayer == "Point2D":
1041
                    if isinstance(value, list):
1042
                        values[sch] = geom.createPoint(value[0],value[1])
1043
                elif typeLayer == "MultiCurve2D":
1044
                    if isinstance(value, list):
1045
                        values[sch] = list2geomcurve(value)
1046
                elif typeLayer == "MultiSurface2D":
1047
                    if isinstance(value, list):
1048
                        values[sch] = list2geompoly(value)
1049
                else: #Si son geometrias
1050
                    values[sch] = value
1051
            else:
1052
                values[sch] = value
1053
            try:
1054
                value = itera.next()
1055
            except:
1056
                break
1057
        layer.append(values)
1058
        if COMMIT==1: layer.commit()
1059
    print "Add feature ", params, " to ", layer
1060

  
1061
def list2geompoly(listPoints):
1062
    #IN: list[[x,y],...]
1063
    #OUT: geometry polygon
1064
    geometry = geom.createGeometry(3)
1065
    for point in listPoints:
1066
        geometry.addVertex(geom.createPoint(point[0],point[1]))
1067
    if listPoints[0] != listPoints[len(listPoints)-1]:
1068
        geometry.addVertex(geom.createPoint(listPoints[0][0], listPoints[0][1]))
1069
    return geometry
1070

  
1071
def list2geomcurve(listPoints):
1072
    #IN: list [[x,y],...]
1073
    #OUT: geometry line
1074
    geometry = geom.createGeometry(2)
1075
    for point in listPoints:
1076
        geometry.addVertex(geom.createPoint(point[0],point[1]))
1077
    return geometry
1078

  
1079
def modifyFeatures(layer, field, value, COMMIT=1,FILTER=None):
1080
    #IN: layer, field, new value
1081
    if FILTER == None:
1082
        features = layer.features()
1083
    else:
1084
        features = layer.features(FILTER)
1085

  
1086
    for feature in features:
1087
        feature.edit()
1088
        feature.set(field, value)
1089
        layer.update(feature)
1090
    if COMMIT==1: layer.commit()
1091
    print "Modify feature ", layer.name, field, value
1092

  
1093
def showFields(layer):
1094
    #IN: layer
1095
    #OUT: str(atributos)
1096
    print layer.getSchema().getAttrNames()
1097

  
1098
def addField(layer,field, sType = "STRING",iSize=20):
1099
    #IN: layer, field, *sType, *iSize)
1100
    #OUT: layer
1101
    #addField(layer, "nombre")
1102
    schema = gvsig.createSchema(layer.getSchema())
1103
    schema.modify()
1104
    if isinstance(field,str): schema.append(field,sType,iSize)
1105
    layer.edit()
1106
    layer.updateSchema(schema)
1107
    layer.commit()
1108
    print "Add field ", field, " to ", layer.name
1109
    return layer
1110

  
1111
def modifyField(layer, field, iType="STRING", iSize=20):
1112
    temp = []
1113
    for i in layer.features():
1114
        temp.append(i.get(field))
1115
    removeField(layer, field)
1116
    addField(layer, field, iType, iSize)
1117
    n = 0
1118
    for i in layer.features():
1119
        modifyFeature(layer, i, field, temp[n],COMMIT=0)
1120
        n += 1
1121
    layer.commit()
1122
    print "Modify field type to: ", field, " in ", layer.name
1123

  
1124
def modifyFeature(layer, feature, field, value, COMMIT=1):
1125
    feature.edit()
1126
    feature.set(field, value)
1127
    layer.update(feature)
1128
    print "Modify Feature field: ", field , " to ", value
1129
    if COMMIT==1: layer.commit()
1130

  
1131
def removeField(layer, field):
1132
    #IN: layer, field
1133
    #OUT: layer
1134
    #removeField(layer, "apellido")
1135
    print "Campo %s eliminado" % (str(field))
1136
    schema = layer.getSchema()
1137
    schema.modify()
1138
    if isinstance(field,str): schema.remove(field)
1139
    else: return
1140
    layer.edit()
1141
    layer.updateSchema(schema)
1142
    layer.commit()
1143
    return layer
1144

  
1145

  
1146 775
def model2script(pathXML, pathFile):
1147 776
    #eliminar la ultima linea
1148 777
    #pathXML = commonsdialog.openFileDialog("Selecciona archivo", 'C:/gsoc/')

Also available in: Unified diff