Пример #1
0
def setup(numwin, fname=None):
    plines = gview.GvPolylines()
    plines.set_name("Some lines")
    gview.undo_register(plines)

    areas = gview.GvAreas()
    areas.set_name("Some areas")
    gview.undo_register(areas)

    if fname:
        raster = gview.GvRaster(fname,sample=gview.SMAverage)
        raster.set_name(fname)
    else:
        raster = None
            
    toolbar = Toolbar()
    ldlg = layerdlg.LayerDlg()
    ldlg.connect('destroy', gtk.mainquit)
    ldlg.show()

    for i in range(numwin):
        name = 'View %d' % (i+1)
        view = create_view(name, plines, areas, raster)
        toolbar.add_view(view)
        ldlg.add_view(name, view)
Пример #2
0
    def simple_poly( self ):
        self.set_step_name( 'Simple Polygon Display' )
        self.set_text( 'You should see a five sided polygon with a red edge\n'
                       +'and blue fill.  The edge should be 3 pixels wide.\n'
                       +'The polygon should have a triangular hole.')

        shapes = gview.GvShapes()
        gview.undo_register( shapes)

        poly = gview.GvShape( type = gview.GVSHAPE_AREA )
        poly.set_node( 10, 10, node=0 )
        poly.set_node( 80, 10, node=1 )
        poly.set_node( 80, 90, node=2 )
        poly.set_node( 50, 80, node=3 )
        poly.set_node( 10, 90, node=4 )
        poly.set_node( 10, 10, node=5 )
        poly.set_node( 20, 20, node=0, ring=1 )
        poly.set_node( 40, 20, node=1, ring=1 )
        poly.set_node( 30, 50, node=2, ring=1 )
        shapes.append( poly )

        layer = gview.GvShapesLayer( shapes )
        layer.set_name( 'test_poly' )
        layer.set_property( '_area_edge_color', '255 0 0 255' )
        layer.set_property( '_area_fill_color', '0 0 255 255' )
        layer.set_property( '_area_edge_width', '3' )
        self.view.add_layer( layer )
        self.view.set_active_layer( layer )

        self.view.fit_extents( 0, 0, 100, 100 )
Пример #3
0
    def new_layer_unselected_cb(self,*args):
        """ Create new layer of only selected shapes """

        unselected=self.pgugrid.get_unselected_row_indices()

        if len(unselected) == 0:
            gvutils.warning('No rows unselected- ignoring!')
            return

        newshps=gview.GvShapes(name='Unselected')
        src=self.shapes
        if src is None:
            gvutils.warning('No source layer found- ignoring!')
            return

        schema=src.get_schema()
        for item in schema:
            newshps.add_field(item[0],item[1],item[2],item[3])

        for idx in unselected:
            if src[idx] is not None:
                newshps.append(src[idx].copy())

        gview.undo_register(newshps)
        clayer=gview.GvShapesLayer(newshps)

        cview=self.app.new_view()
        cview.viewarea.add_layer(clayer)
        cview.viewarea.set_active_layer(clayer)
Пример #4
0
    def transparent_poly( self ):
        self.set_step_name( 'Polygon Transparency' )
        self.set_text( 'You should see two overlaping polygons, with the\n'
                       +'rear one showing through the top one a little.' )

        shapes = gview.GvShapes()
        gview.undo_register( shapes)

        poly = gview.GvShape( type = gview.GVSHAPE_AREA )
        poly.set_node( 20, 5, node=0 )
        poly.set_node( 40, 5, node=1 )
        poly.set_node( 30, 50, node=2 )
        shapes.append( poly )

        poly = gview.GvShape( type = gview.GVSHAPE_AREA )
        poly.set_node( 10, 10, node=0 )
        poly.set_node( 80, 10, node=1 )
        poly.set_node( 80, 90, node=2 )
        poly.set_node( 50, 80, node=3 )
        poly.set_node( 10, 90, node=4 )
        poly.set_node( 10, 10, node=5 )
        shapes.append( poly )

        layer = gview.GvShapesLayer( shapes )
        layer.set_name( 'test_poly' )
        layer.set_property( '_area_edge_color', '255 0 0 255' )
        layer.set_property( '_area_fill_color', '0 0 255 150' )
        layer.set_property( '_area_edge_width', '3' )
        self.view.add_layer( layer )
        self.view.set_active_layer( layer )

        self.view.fit_extents( 0, 0, 100, 100 )
Пример #5
0
    def perform_3D_request(self, *args):
        """Tries to open selected files, then creates 3D Layer and switches to 3D mode"""

        # Get Data
        self.drape_dataset = self.raster_open_by_name(self.drape_fileSelectWin.get_filename())
        self.DEM_dataset = self.raster_open_by_name(self.DEM_fileSelectWin.get_filename())
        mesh_lod = self.lod_spin_button.get_value_as_int()
        hscale = float(self.scale_value.get_text())

        if (self.drape_dataset is not None) and (self.DEM_dataset is not None):
            # Get Current View & Prefs
            view = self.view_manager.get_active_view()
            if view is None:
                return

            options = []
            if gview.get_preference('_gcp_warp_mode') is not None \
               and gview.get_preference('_gcp_warp_mode') == 'no':
                options.append(('raw','yes'))

            # Set Current View to 3D Mode
            view.set_mode(gvconst.MODE_3D)
            view.height_scale(hscale)
            options.append(('mesh_lod',str(mesh_lod)))


            # For each band create layer and mesh
            for band_index in range(1,1+min(3,self.drape_dataset.RasterCount)):
                band = self.drape_dataset.GetRasterBand(band_index)
            
                interp = band.GetRasterColorInterpretation()
                
                # Create Drape Raster
                drape_raster = gview.GvRaster(dataset=self.drape_dataset, real=band_index)
                drape_raster.set_name(str(self.drape_fileSelectWin.get_filename()))
                gview.undo_register(drape_raster)

                # Create Drape Raster Layer
                drape_raster_layer = gview.GvRasterLayer(drape_raster, options)

                if interp == gdal.GCI_RedBand:
                    drape_raster_layer.texture_mode_set(1,(1.0,0.0,0.0,1.0))
                    drape_raster_layer.blend_mode_set(gview.RL_BLEND_ADD,1,1)
                elif interp == gdal.GCI_GreenBand:
                    drape_raster_layer.texture_mode_set(1,(0.0,1.0,0.0,1.0))
                    drape_raster_layer.blend_mode_set(gview.RL_BLEND_ADD,1,1)
                elif interp == gdal.GCI_BlueBand:
                    drape_raster_layer.texture_mode_set(1,(0.0,0.0,1.0,1.0))
                    drape_raster_layer.blend_mode_set(gview.RL_BLEND_ADD,1,1)

                # Add to view
                view.add_layer(drape_raster_layer)

                # Create DEM Raster and Add as Height
                DEM_raster = gview.GvRaster(dataset=self.DEM_dataset)
                DEM_raster.set_name(str(self.DEM_fileSelectWin.get_filename()))
                drape_raster_layer.add_height(DEM_raster)

            # Clean up File Dialog Window
            self.file_dialog_3D.destroy()
Пример #6
0
    def simple_points_and_lines(self):
        self.set_step_name('Simple Points and Lines')
        self.set_text('You should see a four segment red line, and\n' +
                      'a blue cross hair 12 pixels tall.\n\n' +
                      'Try zooming in, the crosshair should *not* get bigger.')

        shapes = gview.GvShapes()
        gview.undo_register(shapes)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(20, 50, node=0)
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_LINE)
        shape.set_node(10, 10, node=0)
        shape.set_node(80, 10, node=1)
        shape.set_node(80, 90, node=2)
        shape.set_node(50, 80, node=3)
        shape.set_node(10, 90, node=4)
        shapes.append(shape)

        layer = gview.GvShapesLayer(shapes)
        layer.set_name('test_poly')
        layer.set_property('_line_color', '255 0 0 255')
        layer.set_property('_line_width', '3')
        layer.set_property('_point_color', '0 0 255 255')
        layer.set_property('_point_size', '12')
        self.view.add_layer(layer)
        self.view.set_active_layer(layer)

        self.view.fit_extents(0, 0, 100, 100)
Пример #7
0
    def transparent_poly(self):
        self.set_step_name('Polygon Transparency')
        self.set_text('You should see two overlaping polygons, with the\n' +
                      'rear one showing through the top one a little.')

        shapes = gview.GvShapes()
        gview.undo_register(shapes)

        poly = gview.GvShape(type=gview.GVSHAPE_AREA)
        poly.set_node(20, 5, node=0)
        poly.set_node(40, 5, node=1)
        poly.set_node(30, 50, node=2)
        shapes.append(poly)

        poly = gview.GvShape(type=gview.GVSHAPE_AREA)
        poly.set_node(10, 10, node=0)
        poly.set_node(80, 10, node=1)
        poly.set_node(80, 90, node=2)
        poly.set_node(50, 80, node=3)
        poly.set_node(10, 90, node=4)
        poly.set_node(10, 10, node=5)
        shapes.append(poly)

        layer = gview.GvShapesLayer(shapes)
        layer.set_name('test_poly')
        layer.set_property('_area_edge_color', '255 0 0 255')
        layer.set_property('_area_fill_color', '0 0 255 150')
        layer.set_property('_area_edge_width', '3')
        self.view.add_layer(layer)
        self.view.set_active_layer(layer)

        self.view.fit_extents(0, 0, 100, 100)
Пример #8
0
    def simple_poly(self):
        self.set_step_name('Simple Polygon Display')
        self.set_text('You should see a five sided polygon with a red edge\n' +
                      'and blue fill.  The edge should be 3 pixels wide.\n' +
                      'The polygon should have a triangular hole.')

        shapes = gview.GvShapes()
        gview.undo_register(shapes)

        poly = gview.GvShape(type=gview.GVSHAPE_AREA)
        poly.set_node(10, 10, node=0)
        poly.set_node(80, 10, node=1)
        poly.set_node(80, 90, node=2)
        poly.set_node(50, 80, node=3)
        poly.set_node(10, 90, node=4)
        poly.set_node(10, 10, node=5)
        poly.set_node(20, 20, node=0, ring=1)
        poly.set_node(40, 20, node=1, ring=1)
        poly.set_node(30, 50, node=2, ring=1)
        shapes.append(poly)

        layer = gview.GvShapesLayer(shapes)
        layer.set_name('test_poly')
        layer.set_property('_area_edge_color', '255 0 0 255')
        layer.set_property('_area_fill_color', '0 0 255 255')
        layer.set_property('_area_edge_width', '3')
        self.view.add_layer(layer)
        self.view.set_active_layer(layer)

        self.view.fit_extents(0, 0, 100, 100)
Пример #9
0
    def new_layer_unselected_cb(self, *args):
        """ Create new layer of only selected shapes """

        unselected = self.pgugrid.get_unselected_row_indices()

        if len(unselected) == 0:
            gvutils.warning('No rows unselected- ignoring!')
            return

        newshps = gview.GvShapes(name='Unselected')
        src = self.shapes
        if src is None:
            gvutils.warning('No source layer found- ignoring!')
            return

        schema = src.get_schema()
        for item in schema:
            newshps.add_field(item[0], item[1], item[2], item[3])

        for idx in unselected:
            if src[idx] is not None:
                newshps.append(src[idx].copy())

        gview.undo_register(newshps)
        clayer = gview.GvShapesLayer(newshps)

        cview = self.app.new_view()
        cview.viewarea.add_layer(clayer)
        cview.viewarea.set_active_layer(clayer)
Пример #10
0
    def simple_points_and_lines( self ):
        self.set_step_name( 'Simple Points and Lines' )
        self.set_text( 'You should see a four segment red line, and\n'
                       +'a blue cross hair 12 pixels tall.\n\n'
                       +'Try zooming in, the crosshair should *not* get bigger.' )

        shapes = gview.GvShapes()
        gview.undo_register( shapes)

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 20, 50, node=0 )
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_LINE )
        shape.set_node( 10, 10, node=0 )
        shape.set_node( 80, 10, node=1 )
        shape.set_node( 80, 90, node=2 )
        shape.set_node( 50, 80, node=3 )
        shape.set_node( 10, 90, node=4 )
        shapes.append( shape )

        layer = gview.GvShapesLayer( shapes )
        layer.set_name( 'test_poly' )
        layer.set_property( '_line_color', '255 0 0 255' )
        layer.set_property( '_line_width', '3' )
        layer.set_property( '_point_color', '0 0 255 255' )
        layer.set_property( '_point_size', '12' )
        self.view.add_layer( layer )
        self.view.set_active_layer( layer )

        self.view.fit_extents( 0, 0, 100, 100 )
Пример #11
0
 def file_open_shape_by_name(self, filename):
     shape_data = gview.GvShapes(shapefilename=filename)
     if shape_data is None:
         return
     
     gview.undo_register(shape_data)
     
     for view in self.views:
         layer = gview.GvShapesLayer( shape_data )
         view.viewarea.add_layer(layer)
Пример #12
0
    def ogrfs_points2( self ):
        self.set_step_name( 'OGRFS Point Symbols' )
        self.set_text( \
            'In the bottom right corner should be a yellow triangle\n'
            + 'pointing "north west".\n'
            + '\n'
            + 'In the middle should be a white cross hair.\n'
            + 'To the top/right is a red X.\n'
            + 'To the lower/left is a green X.\n'
            + '\n'
            + 'As you zoom in the red X should remain a constant distance\n'
            + 'in screen pixels from the white cross.  It is "offset" from\n'
            + 'the white cross a distance in screen pixels.\n'
            + '\n'
            + 'The green X is offset by a "georeferenced" distance, and\n'
            + 'should move closer as you zoom out, and further as you zoom\n'
            + 'in.\n'
            + '\n'
            + '\n'
            + '\n' )

        shapes = gview.GvShapes()
        gview.undo_register( shapes)

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 15, 15, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FFFF00,a:45,s:3,id:ogr-sym-7)' )
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 50, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FFFFFF,s:2,id:ogr-sym-0)' )
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 50, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FF0000,dx:20px,dy:10px,s:1,id:ogr-sym-1)' )
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 50, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#00FF00,dx:-10g,dy:-5g,s:1,id:ogr-sym-1)' )
        shapes.append( shape )

        layer = gview.GvShapesLayer( shapes )
        layer.set_name( 'test' )
        self.view.add_layer( layer )
        self.view.set_active_layer( layer )

        self.view.fit_extents( 0, 0, 100, 100 )
Пример #13
0
    def file_open_by_name(self, filename, *args):
        if filename[len(filename)-4:] == '.shp':
            self.file_open_shape_by_name(filename)
            return
        
        if filename[len(filename)-4:] == '.SHP':
            self.file_open_shape_by_name(filename)
            return
        
        dataset = gdal.Open(filename)
        if dataset is None:
            GtkExtra.message_box('Error',
                      'Unable to open '+filename,
                      ('OK',) )
            return

        self.files.append(dataset)

        for band_index in range(1,1+min(3,dataset.RasterCount)):
            band = dataset.GetRasterBand(band_index)
            
            interp = band.GetRasterColorInterpretation()
            if interp == gdal.GCI_PaletteIndex:
                raster = gview.GvRaster(dataset=dataset,sample=gview.SMSample,
                                        real=band_index)
            else:
                raster = gview.GvRaster(dataset=dataset,real=band_index)
            
            raster.set_name(filename)
            gview.undo_register(raster)
            
            view = self.view_manager.get_active_view()
            if view is None:
                return
            
            options = []
            if gview.get_preference('gcp_warp_mode') is not None \
               and gview.get_preference('gcp_warp_mode') == 'no':
                options.append(('raw','yes'))
                
            raster_layer = gview.GvRasterLayer(raster, options)
                
            if interp == gdal.GCI_RedBand:
                raster_layer.texture_mode_set(1,(1.0,0.0,0.0,1.0))
                raster_layer.blend_mode_set(gview.RL_BLEND_ADD,1,1)
            elif interp == gdal.GCI_GreenBand:
                raster_layer.texture_mode_set(1,(0.0,1.0,0.0,1.0))
                raster_layer.blend_mode_set(gview.RL_BLEND_ADD,1,1)
            elif interp == gdal.GCI_BlueBand:
                raster_layer.texture_mode_set(1,(0.0,0.0,1.0,1.0))
                raster_layer.blend_mode_set(gview.RL_BLEND_ADD,1,1)
                
            view.add_layer(raster_layer)
Пример #14
0
    def ogrfs_points2(self):
        self.set_step_name('OGRFS Point Symbols')
        self.set_text( \
            'In the bottom right corner should be a yellow triangle\n'
            + 'pointing "north west".\n'
            + '\n'
            + 'In the middle should be a white cross hair.\n'
            + 'To the top/right is a red X.\n'
            + 'To the lower/left is a green X.\n'
            + '\n'
            + 'As you zoom in the red X should remain a constant distance\n'
            + 'in screen pixels from the white cross.  It is "offset" from\n'
            + 'the white cross a distance in screen pixels.\n'
            + '\n'
            + 'The green X is offset by a "georeferenced" distance, and\n'
            + 'should move closer as you zoom out, and further as you zoom\n'
            + 'in.\n'
            + '\n'
            + '\n'
            + '\n' )

        shapes = gview.GvShapes()
        gview.undo_register(shapes)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(15, 15, node=0)
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FFFF00,a:45,s:3,id:ogr-sym-7)')
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(50, 50, node=0)
        shape.set_property('_gv_ogrfs', 'SYMBOL(c:#FFFFFF,s:2,id:ogr-sym-0)')
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(50, 50, node=0)
        shape.set_property(
            '_gv_ogrfs', 'SYMBOL(c:#FF0000,dx:20px,dy:10px,s:1,id:ogr-sym-1)')
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(50, 50, node=0)
        shape.set_property(
            '_gv_ogrfs', 'SYMBOL(c:#00FF00,dx:-10g,dy:-5g,s:1,id:ogr-sym-1)')
        shapes.append(shape)

        layer = gview.GvShapesLayer(shapes)
        layer.set_name('test')
        self.view.add_layer(layer)
        self.view.set_active_layer(layer)

        self.view.fit_extents(0, 0, 100, 100)
Пример #15
0
def SimpleNorthLayer(xoffset,
                     yoffset,
                     ntype=GVNORTHSYM1,
                     color1=(0.0, 0.0, 0.0, 1.0),
                     color2=(1.0, 1.0, 1.0, 1.0),
                     scale=1.0,
                     shapes_name="North Arrow"):
    """ Create a layer with a North arrow symbol,
        with the North arrow located at (xoffset,yoffset).
        The 'ntype' parameter will eventually be used for
        different types of north arrows.  The layer
        will contain two shapes: an area or line, and
        label.
        Input:
            xoffset,yoffset- where to center North Arrow (in
                             display coordinates).

            ntype- index of north arrow type (currently only one type).
            color1- First color and outline color for north arrow. A tuple
                    of 4 values between 0 and 1.
            color2- Second color (not used yet).
            scale- amount to scale size of symbol by.
            shapes_name- name to give the shapes that form
                         the north arrow.
    """

    shps = gview.GvShapes(name=shapes_name)
    gview.undo_register(shps)

    nshp = gview.GvShape(type=gview.GVSHAPE_POINT)
    nshp.set_node(xoffset, yoffset)

    cstr1 = gvogrfs.gv_to_ogr_color(color1)
    if len(cstr1) < 9:
        cstr1 = cstr1 + "FF"

    refname, sm = CreateNorthSymbol(ntype, color1, color2, scale)
    dxstr = str(-1.5 * scale)
    dystr = str(-15.0 * scale)
    nshp.set_property('_gv_ogrfs',
                      'SYMBOL(c:'+cstr1+',s:4,id:"'+refname+'");'+\
                      'LABEL(c:'+cstr1+',t:"N",dx:'+dxstr+\
                      ',dy:'+dystr+')' )
    shps.append(nshp)

    layer = gview.GvShapesLayer(shps)
    # Set antialias property so that lines look nice
    # when rotated.
    layer.set_property('_gl_antialias', '1')

    return layer
Пример #16
0
def SimpleNorthLayer(xoffset,yoffset,ntype=GVNORTHSYM1,
                        color1=(0.0,0.0,0.0,1.0),
                        color2=(1.0,1.0,1.0,1.0),
                        scale=1.0,
                     shapes_name="North Arrow"):
    """ Create a layer with a North arrow symbol,
        with the North arrow located at (xoffset,yoffset).
        The 'ntype' parameter will eventually be used for
        different types of north arrows.  The layer
        will contain two shapes: an area or line, and
        label.
        Input:
            xoffset,yoffset- where to center North Arrow (in
                             display coordinates).

            ntype- index of north arrow type (currently only one type).
            color1- First color and outline color for north arrow. A tuple
                    of 4 values between 0 and 1.
            color2- Second color (not used yet).
            scale- amount to scale size of symbol by.
            shapes_name- name to give the shapes that form
                         the north arrow.
    """
    
    shps=gview.GvShapes(name=shapes_name)
    gview.undo_register( shps )
    
    nshp=gview.GvShape(type=gview.GVSHAPE_POINT)
    nshp.set_node(xoffset,yoffset)

    cstr1=gvogrfs.gv_to_ogr_color(color1)
    if len(cstr1) < 9:
        cstr1=cstr1+"FF"
        
    refname,sm=CreateNorthSymbol(ntype,color1,color2,scale)
    dxstr=str(-1.5*scale)
    dystr=str(-15.0*scale)
    nshp.set_property('_gv_ogrfs',
                      'SYMBOL(c:'+cstr1+',s:4,id:"'+refname+'");'+\
                      'LABEL(c:'+cstr1+',t:"N",dx:'+dxstr+\
                      ',dy:'+dystr+')' )
    shps.append(nshp)
    
    layer=gview.GvShapesLayer(shps)
    # Set antialias property so that lines look nice
    # when rotated.
    layer.set_property('_gl_antialias','1')
    
    return layer
Пример #17
0
    def new_layer(self, *args):
        if not self.selected_view:
            return
        view = self.views[self.selected_view]
        layer_list = view.list_layers()
        layer_map = {}
        for layer in layer_list:
            layer_map[layer.get_name()] = layer

        counter = 1
        name = 'UserShapes_' + str(counter)
        while layer_map.has_key(name):
            counter = counter + 1
            name = 'UserShapes_' + str(counter)

        shapes = gview.GvShapes(name=name)
        gview.undo_register(shapes)
        layer = gview.GvShapesLayer(shapes)
        view.add_layer(layer)
        view.set_active_layer(layer)
Пример #18
0
    def new_layer(self, *args):
        if not self.selected_view:
            return
        view = self.views[self.selected_view]
        layer_list = view.list_layers()
        layer_map = {}
        for layer in layer_list:
            layer_map[layer.get_name()] = layer

        counter = 1
        name = 'UserShapes_'+str(counter)
        while layer_map.has_key(name):
            counter = counter + 1
            name = 'UserShapes_'+str(counter)
        
        shapes = gview.GvShapes(name=name)
        gview.undo_register(shapes)
        layer = gview.GvShapesLayer(shapes)
        view.add_layer(layer)
        view.set_active_layer(layer)
Пример #19
0
    def ogrfs_lines( self ):
        self.set_step_name( 'OGRFS Lines' )
        self.set_text('You should see a thick (8 pixels wide) green line\n'
                      +'with a thin (2 pixel wide) red line down the center.\n'
                      +'\n'
                      +'You should also see a second line in blue rendered \n'
                      +'in a dash-dot pattern\n'
                      +'')

        shapes = gview.GvShapes()
        gview.undo_register( shapes)

        shape = gview.GvShape( type = gview.GVSHAPE_LINE )
        shape.set_node( 10, 10, node=0 )
        shape.set_node( 80, 10, node=1 )
        shape.set_node( 80, 90, node=2 )
        shape.set_node( 50, 80, node=3 )
        shape.set_node( 10, 90, node=4 )
        shape.set_property( '_gv_ogrfs',
                            'PEN(c:#00FF00,w:8);PEN(c:#FF0000,w:2)' )
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_LINE )
        shape.set_node( 20, 20, node=0 )
        shape.set_node( 40, 20, node=1 )
        shape.set_node( 40, 40, node=2 )
        shape.set_node( 60, 60, node=3 )
        shape.set_node( 40, 80, node=4 )
        shape.set_property( '_gv_ogrfs', 'PEN(c:#0000FF,w:2,p:ogr-pen-6)' )
        shapes.append( shape )

        layer = gview.GvShapesLayer( shapes )
        layer.set_name( 'test' )
        self.view.add_layer( layer )
        self.view.set_active_layer( layer )

        self.view.fit_extents( 0, 0, 100, 100 )
Пример #20
0
    def ogrfs_lines(self):
        self.set_step_name('OGRFS Lines')
        self.set_text(
            'You should see a thick (8 pixels wide) green line\n' +
            'with a thin (2 pixel wide) red line down the center.\n' + '\n' +
            'You should also see a second line in blue rendered \n' +
            'in a dash-dot pattern\n' + '')

        shapes = gview.GvShapes()
        gview.undo_register(shapes)

        shape = gview.GvShape(type=gview.GVSHAPE_LINE)
        shape.set_node(10, 10, node=0)
        shape.set_node(80, 10, node=1)
        shape.set_node(80, 90, node=2)
        shape.set_node(50, 80, node=3)
        shape.set_node(10, 90, node=4)
        shape.set_property('_gv_ogrfs',
                           'PEN(c:#00FF00,w:8);PEN(c:#FF0000,w:2)')
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_LINE)
        shape.set_node(20, 20, node=0)
        shape.set_node(40, 20, node=1)
        shape.set_node(40, 40, node=2)
        shape.set_node(60, 60, node=3)
        shape.set_node(40, 80, node=4)
        shape.set_property('_gv_ogrfs', 'PEN(c:#0000FF,w:2,p:ogr-pen-6)')
        shapes.append(shape)

        layer = gview.GvShapesLayer(shapes)
        layer.set_name('test')
        self.view.add_layer(layer)
        self.view.set_active_layer(layer)

        self.view.fit_extents(0, 0, 100, 100)
Пример #21
0
    def new_layer_selected(self, rows, name):
        """ Create new layer of only selected shapes """
        if not rows:
            warning('No rows selected- ignoring!')
            return

        newshps = gview.GvShapes(name=name)
        src = self.shapes
        if src is None:
            warning('No source layer found- ignoring!')
            return
        
        newshps.copy_fields(src.get_schema())

        for idx in rows:
            if src[idx] is not None:
                newshps.append(src[idx].copy())

        gview.undo_register(newshps)
        clayer = gview.GvShapesLayer(newshps)

        cview = self.app.new_view()
        cview.viewarea.add_layer(clayer)
        cview.viewarea.set_active_layer(clayer)
Пример #22
0
def SimpleMeasuredGrid(min_x,min_y,max_x,max_y,x_spacing,y_spacing,
                        color=(0.5,1.0,0.5,1.0),xoff=-0.14,yoff=1.04,
                        label_type=None,shapes_name="Grid"):
    """ Create a reference grid for a utm-projected raster.
        min_x, min_y, max_x, max_y- extents that grid should cover
        x_spacing- line spacing in horizontal direction
        y_spacing- line spacing in vertical direction
        xoff- horizontal offset of vertical labels, as a fraction
              of max_x-min_x.  Offset is relative to min_x.
        yoff- vertical offset of horizontal labels, as a fraction
              of max_y-min_y.  Offset is relative to min_y.
        color- start color for the grid
        label_type- not used yet; might be later for formatting.
        shapes_name- name to give the shapes forming the layer.
        
    """

    shps=gview.GvShapes(name=shapes_name)
    gview.undo_register( shps )
    shps.add_field('position','string',20)

    if os.name == 'nt':
        font="-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*"
    else:
        #font="-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*"
        #font="-urw-helvetica-medium-r-normal-*-9-*-*-*-p-*-iso8859-2"
        font="-adobe-helvetica-medium-r-normal-*-8-*-*-*-p-*-iso10646-1"
        #font="-misc-fixed-medium-r-*-*-9-*-*-*-*-*-*-*"
     
    
    # Round to nearest integer space
    max_x=min_x+Numeric.floor((max_x-min_x)/x_spacing)*x_spacing
    max_y=min_y+Numeric.floor((max_y-min_y)/y_spacing)*y_spacing

    lxoff=(max_x-min_x)*xoff  # horizontal label placement
    lyoff=(max_y-min_y)*yoff # vertical label placement
    
    for hval in Numeric.arange(min_x,
                               max_x+x_spacing/100.0,
                               x_spacing):
        nshp=gview.GvShape(type=gview.GVSHAPE_LINE)
        nshp.set_node(hval,max_y,0,0)
        nshp.set_node(hval,min_y,0,1)
        shps.append(nshp)
        pshp=gview.GvShape(type=gview.GVSHAPE_POINT)
        pshp.set_node(hval,min_y+lyoff)
        pshp.set_property('position',"%d" % int(hval+0.5))
        shps.append(pshp)
                
    for vval in Numeric.arange(min_y,
                               max_y+y_spacing/100.0,
                               y_spacing):
        nshp=gview.GvShape(type=gview.GVSHAPE_LINE)
        nshp.set_node(min_x,vval,0,0)
        nshp.set_node(max_x,vval,0,1)
        shps.append(nshp)
        pshp=gview.GvShape(type=gview.GVSHAPE_POINT)
        pshp.set_node(min_x+lxoff,vval)
        pshp.set_property('position',"%d" % int(vval+0.5))
        shps.append(pshp)

    cstr=gvogrfs.gv_to_ogr_color(color)
    if len(cstr) < 9:
        cstr=cstr+"FF"
    clstr=str(color[0])+' '+str(color[1])+' '+str(color[2])+' '+str(color[3])
    
    layer=gview.GvShapesLayer(shps)
    layer.set_property('_line_color',clstr)
    layer.set_property('_point_color',clstr)
    # Set antialias property so that lines look nice
    # when rotated.
    layer.set_property('_gl_antialias','1')
    layer.set_property('_gv_ogrfs_point',
                       'LABEL(t:{position},f:"'+font+'",c:'+cstr+')')
    layer.set_read_only(gtk.TRUE)    
    
    return layer
Пример #23
0
    def vector_symbol_from_file(self):
        symbols_dir = os.path.join(gview.home_dir, 'symbols')
        symbol1 = os.path.join(symbols_dir, 'square.xml')
        symbol2 = os.path.join(symbols_dir, 'square_filled.xml')
        symbol3 = os.path.join(symbols_dir, 'cross.xml')
        symbol4 = os.path.join(symbols_dir, 'x.xml')
        symbol5 = os.path.join(symbols_dir, 'triangle.xml')
        symbol6 = os.path.join(symbols_dir, 'triangle_filled.xml')
        symbol7 = os.path.join(symbols_dir, 'circle.xml')
        symbol8 = os.path.join(symbols_dir, 'circle_filled.xml')
        symbol9 = os.path.join(symbols_dir, 'dash.xml')
        self.set_step_name('OGRFS Vector Symbol from File')
        self.set_text( \
            'In the middle of the screen should be 9 green symbols.\n'
        'Symbols loaded from the following files:\n'
        + symbol1 + '\n'
        + symbol2 + '\n'
        + symbol3 + '\n'
        + symbol4 + '\n'
        + symbol5 + '\n'
        + symbol6 + '\n'
        + symbol7 + '\n'
        + symbol8 + '\n'
        + symbol9 + '\n'
            + '\n'
            + '\n' )

        shapes = gview.GvShapes()
        gview.undo_register(shapes)

        sm = gview.GvSymbolManager()

        sm.get_symbol(symbol1)
        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(40, 40, node=0)
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FF0000,s:2,id:"' + symbol1 + '")')
        shapes.append(shape)

        sm.get_symbol(symbol2)
        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(50, 40, node=0)
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FF0000,s:2,id:"' + symbol2 + '")')
        shapes.append(shape)

        sm.get_symbol(symbol3)
        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(60, 40, node=0)
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FF0000,s:2,id:"' + symbol3 + '")')
        shapes.append(shape)

        sm.get_symbol(symbol4)
        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(40, 50, node=0)
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FF0000,s:2,id:"' + symbol4 + '")')
        shapes.append(shape)

        sm.get_symbol(symbol5)
        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(50, 50, node=0)
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FF0000,s:2,id:"' + symbol5 + '")')
        shapes.append(shape)

        sm.get_symbol(symbol6)
        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(60, 50, node=0)
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FF0000,s:2,id:"' + symbol6 + '")')
        shapes.append(shape)

        sm.get_symbol(symbol7)
        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(40, 60, node=0)
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FF0000,s:2,id:"' + symbol7 + '")')
        shapes.append(shape)

        sm.get_symbol(symbol8)
        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(50, 60, node=0)
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FF0000,s:2,id:"' + symbol8 + '")')
        shapes.append(shape)

        sm.get_symbol(symbol9)
        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(60, 60, node=0)
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FF0000,s:2,id:"' + symbol9 + '")')
        shapes.append(shape)

        # Create the layer and display

        layer = gview.GvShapesLayer(shapes)
        layer.set_name('test')
        self.view.add_layer(layer)
        self.view.set_active_layer(layer)

        self.view.fit_extents(0, 0, 100, 100)
Пример #24
0
    def ogrfs_points( self ):
        self.set_step_name( 'OGRFS Point Symbols' )
        self.set_text('You should see two rows of yellow symbols.\n'
                      +'First Row: plus, circle, box, triangle, start\n'
                      +'Second Row: X, filled circle, box, triangle and star\n'
                      +'\n'
                      +'Symbols should stay the same size when you zoom.\n'
                      +'\n'
                      +'\n'
                      +'\n'
                      +'' )

        shapes = gview.GvShapes()
        gview.undo_register( shapes)

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 15, 30, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FFFF00,s:3,id:ogr-sym-1)' )
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 15, 15, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FFFF00,s:3,id:ogr-sym-0)' )
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 15, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FFFF00,s:3,id:ogr-sym-2)' )
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 30, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FFFF00,s:3,id:ogr-sym-3)' )
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 45, 15, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FFFF00,s:3,id:ogr-sym-4)' )
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 45, 30, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FFFF00,s:3,id:ogr-sym-5)' )
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 60, 15, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FFFF00,s:3,id:ogr-sym-6)' )
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 60, 30, 35, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FFFF00,s:3,id:ogr-sym-7)' )
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 75, 15, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FFFF00,s:3,id:ogr-sym-8)' )
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 75, 30, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FFFF00,s:3,id:ogr-sym-9)' )
        shapes.append( shape )

        layer = gview.GvShapesLayer( shapes )
        layer.set_name( 'test' )
        self.view.add_layer( layer )
        self.view.set_active_layer( layer )

        self.view.fit_extents( 0, 0, 100, 100 )
Пример #25
0
    def execute(self, args, line, interp):
        import gdalnumeric
        import gview

        data=args[0][0]
        dataname=args[0][1]
        if data is None:
            interp.showText('No input variable supplied','error')
            return 0
        
        ncswitch=args[1]
        vswitch=args[2]


        if vswitch == 0:
            import gview
            win = gview.app.new_view()
            if gview.app.shell.standalone == 1:
                item = win.menuf.find('File/Exit')
                if item is not None:
                    item.hide()
                item = win.menuf.find('File/New View')
                if item is not None:
                    item.hide()
                item = win.menuf.find('File/Save Project')
                if item is not None:
                    item.hide()

        import Numeric
        if type(data) == type(Numeric.zeros([1,1])):
            if ncswitch == 0:
                # By default, display a copy of the
                # data rather than the original
                import copy
                if len(Numeric.shape(data)) == 1:
                    # reshape 1x1 arrays so they can be
                    # displayed.
                    newdata=Numeric.reshape(data,(1,Numeric.shape(data)[0]))
                else:
                    newdata=copy.deepcopy(data)
            else:
                if len(Numeric.shape(data)) == 1:
                    txt='Vectors for display must have dimensions Nx1 or 1xN,\n'
                    txt=txt+'not N.  Either reshape the array, or turn off the nocopy\nswitch '
                    txt=txt+'so that show is permitted to reshape it for you.'
                    interp.showText(txt,'error')
                    return 0
                
                newdata=data
            
            try:
                # Only array data should get to here
                array_name = gdalnumeric.GetArrayFilename(newdata)
                ds = gview.manager.get_dataset( array_name )
                #if prototype_name is not None:
                #    prototype_ds = gdal.Open( prototype_name )
                #    gdalnumeric.CopyDatasetInfo( prototype_ds, ds )

                gview.app.file_open_by_name( array_name )
                return 1
            except:
                interp.showText('Unable to open array.','error')
                return 0
            
        elif type(data) == type(gview.GvShapes()):
            
            cview = gview.app.sel_manager.get_active_view_window()
            cview.make_active()

            # Get an okay layer name
            layer_list = cview.viewarea.list_layers()
            layer_map = {}           
            for clayer in layer_list:          
                layer_map[clayer.get_name()]=clayer
            counter = 0
                
            name = dataname
            while layer_map.has_key(name):
                counter = counter + 1
                name = dataname + '_'+str(counter)

            if ncswitch == 0:
                newdata=gview.GvShapes()
                for item in data.get_schema():
                    newdata.add_field(item[0],item[1],item[2],item[3])
                for shp in data:
                    if shp is not None:
                        newdata.append(shp.copy())
            else:
                newdata=data
                    
            newdata.set_name(name)
            gview.undo_register(newdata)
            layer = gview.GvShapesLayer(newdata)     
            cview.viewarea.add_layer(layer)
            return 1
        else:
            interp.showText('Unable to recognize input data type.','error')
            return 0
Пример #26
0
    def ogrfs_labels(self):
        self.set_step_name('OGRFS Labels')
        self.set_text( \
            'At the top of the screen should be two labels (red and blue)\n'
            + 'The red label has a halo effect.  The blue label has a drop\n'
            + 'shadow effect\n'
            + '\n'
            + 'In the middle of the screen should be four labels (red and\n'
            + 'yellow).  They have different anchor positions, and should\n'
            + 'be arrayed around a center reference point (not shown).\n'
            + 'The labels indicate where they should be (ie. TOP_LEFT should\n'
            + 'be to the top, and right of the center point).\n'
            + '\n'
            + 'In the lower left quadrant is a yellow "PIXEL_OFFSET" label\n'
            + 'that should be right and down of the white reference point.\n'
            + 'The offset is in screen pixels, so as you zoom it should\n'
            + 'remain a constant distance away from the reference point.\n'
            + '\n'
            + 'In the bottom right quadrant is a similar situation but\n'
            + 'the GEO_OFFSET label is offset in georeference coordinates\n'
            + 'so it will move closer to the ref point as you zoom out, and\n'
            + 'further from it as you zoom in.\n'
            + '\n'
            + 'All labels should be selectable and manipulatable.  When\n'
            + 'selected they should have a selection box around them.\n'
            + '\n' )

        shapes = gview.GvShapes()
        gview.undo_register(shapes)

        # Test anchors.

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(50, 50, node=0)
        shape.set_property('_gv_ogrfs', 'LABEL(c:#FFFF00,t:"TOP_RIGHT")')
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(50, 50, node=0)
        shape.set_property('_gv_ogrfs',
                           'LABEL(c:#FF0000,p:7,t:"BOTTOM_RIGHT")')
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(50, 50, node=0)
        shape.set_property('_gv_ogrfs', 'LABEL(c:#FFFF00,p:9,t:"BOTTOM_LEFT")')
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(50, 50, node=0)
        shape.set_property('_gv_ogrfs', 'LABEL(c:#FF0000,p:3,t:"TOP_LEFT")')
        shapes.append(shape)

        # more anchor tests
        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(50, 35, node=0)
        shape.set_property('_gv_ogrfs',
                           'LABEL(c:#00FF00,p:2,t:"TOP_CENTER");' + \
                    'SYMBOL(id:ogr-sym-0)' )
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(50, 43, node=0)
        shape.set_property('_gv_ogrfs',
                           'LABEL(c:#00FF00,p:5,t:"CENTER_CENTER");' + \
                    'SYMBOL(id:ogr-sym-0)' )
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(50, 35, node=0)
        shape.set_property('_gv_ogrfs',
                           'LABEL(c:#00FF00,p:8,t:"BOTTOM_CENTER");' + \
                    'SYMBOL(id:ogr-sym-0)' )
        shapes.append(shape)

        # Test geographic and pixel offsets.

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(25, 25, node=0)
        shape.set_property('_gv_ogrfs', 'SYMBOL(c:#FFFFFF,s:2,id:ogr-sym-0)')
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(25, 25, node=0)
        shape.set_property(
            '_gv_ogrfs', 'LABEL(c:#FFFF00,dx:20px,dy:10px,t:"PIXEL_OFFSET")')
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(60, 25, node=0)
        shape.set_property('_gv_ogrfs', 'SYMBOL(c:#FFFFFF,s:2,id:ogr-sym-0)')
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(60, 25, node=0)
        shape.set_property('_gv_ogrfs',
                           'LABEL(c:#FFFF00,dx:6g,dy:3g,t:"GEO_OFFSET")')
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(50, 75, node=0)
        shape.set_property(
            '_gv_ogrfs', 'LABEL(c:#00FF00,b:#339933,t:"Text with shadow",sh:)')
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(50, 80, node=0)
        shape.set_property('_gv_ogrfs',
                           'LABEL(c:#FF0000,b:#993333,t:"Text with halo",h:)')
        shapes.append(shape)

        layer = gview.GvShapesLayer(shapes)
        layer.set_name('test')
        self.view.add_layer(layer)
        self.view.set_active_layer(layer)

        self.view.fit_extents(0, 0, 100, 100)
Пример #27
0
def SimpleScalebarLayer(xoffset,yoffset,dwidth,swidth,
                        angle,units_label=None,stype=GVSCALE1,
                        color1=(0.0,0.0,0.0,1.0),
                        color2=(1.0,1.0,1.0,1.0),
                        offset=-0.2,
                        shapes_name="Scale Bar"):
    """ Create a layer with a Scale bar located at
        stretching from dmin to dmax on the display
        Input:
            xoffset,yoffset- where to center scale bar (in
                             display coordinates)

            dwidth- width of scale bar in display coordinates
            swidth- width of scale bar in scale coordinates
                    (same if scale units and geocoding units
                    are the same; different if for example
                    display is UTM- meters- and scale bar is
                    in km)
            angle- angle of scale bar relative to display
                   (in RADIANS)
            units_label- label for units (left out if None)
            stype- index of scale bar type (currently must be 0)
            color1- First color and outline color for scale bar. A tuple
                    of 4 values between 0 and 1.
            color2- Second color (only used in alternating scale bars)
            offset- Vertical offset of labels for scale bar as a
                    fraction of scale bar width.
            shapes_name- name to give the shapes that form
                         the scalebar.
    """
    
    shps=gview.GvShapes(name=shapes_name)
    gview.undo_register( shps )
    shps.add_field('label','string',20)

    if os.name == 'nt':
        font="-adobe-helvetica-medium-r-*-*-15-*-*-*-*-*-*-*"
    else:
        #font="-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*"
        #font="-urw-helvetica-medium-r-normal-*-9-*-*-*-p-*-iso8859-2"
        font="-adobe-helvetica-medium-r-normal-*-8-*-*-*-p-*-iso10646-1"
        #font="-misc-fixed-medium-r-*-*-9-*-*-*-*-*-*-*"

    sc=dwidth/swidth
    svals,labels=GetScaleBlocks(swidth)

    cstr1=str(color1[0])+' '+str(color1[1])+' '+str(color1[2])+\
           ' '+str(color1[3])
    cstr2=str(color2[0])+' '+str(color2[1])+' '+str(color2[2])+\
           ' '+str(color2[3])
    
    if stype == GVSCALE1:
        # Rectangle with alternating filled/unfilled
        # sections.
        smax=svals[len(svals)-1]

        # rectangle nodes before rotation
        hbr=(svals-(smax/2.0))*sc # horizontal- shift to -smax/2:+smax/2
                                  # so that rectangle is centered about 0.
        # rectangle extends from -smax/20 (bbr) to +smax/20 (tbr) vertically,
        # labels are placed at + or - smax/5
        tbr=smax/20.0*Numeric.ones(Numeric.shape(hbr))
        bbr=-1*smax/20.0*Numeric.ones(Numeric.shape(hbr))
        lbr=offset*smax*Numeric.ones(Numeric.shape(hbr))

        # units label location before rotation
        uxbr=(hbr[len(hbr)-1]-hbr[0])*0.05+hbr[len(hbr)-1]

        # rotate
        ctheta=Numeric.cos(angle)
        stheta=Numeric.sin(angle)
        tx=hbr*ctheta-tbr*stheta + xoffset
        ty=hbr*stheta+tbr*ctheta + yoffset
        bx=hbr*ctheta-bbr*stheta + xoffset
        by=hbr*stheta+bbr*ctheta + yoffset
        lx=hbr*ctheta-lbr*stheta + xoffset
        ly=hbr*stheta+lbr*ctheta + yoffset
        ux=uxbr*ctheta + xoffset
        uy=uxbr*stheta + yoffset
        
        # LATER: once shape collections are working, use them instead
        # so that entire scale bar can be selected and shifted as
        # a whole rather than separate shapes...
        
        #shp=gview.GvShape(type=gview.GVSHAPE_COLLECTION)
        #shp.set_property('_gv_ogrfs_point',
        #               'LABEL(t:{label},f:"%s",c:#000000FF)' % font)
        #shps.append(shp)
        for idx in range(len(tx)-1):
            nshp=gview.GvShape(type=gview.GVSHAPE_AREA)
            nshp.add_node(tx[idx],ty[idx],0)
            nshp.add_node(tx[idx+1],ty[idx+1],0)
            nshp.add_node(bx[idx+1],by[idx+1],0)
            nshp.add_node(bx[idx],by[idx],0)
            nshp.add_node(tx[idx],ty[idx],0)
            if idx % 2:
                nshp.set_property('_gv_color',cstr1)
                nshp.set_property('_gv_fill_color',cstr2)
            else:
                nshp.set_property('_gv_color',cstr1)
                nshp.set_property('_gv_fill_color',cstr1)
                
            shps.append(nshp)
      
        for idx in range(len(lx)):      
            if labels[idx] is not None:
                lshp=gview.GvShape(type=gview.GVSHAPE_POINT)
                lshp.set_node(lx[idx],ly[idx])
                lshp.set_property('label',labels[idx])
                shps.append(lshp)
                
        if units_label is not None:
            lshp=gview.GvShape(type=gview.GVSHAPE_POINT)
            lshp.set_node(ux,uy)
            lshp.set_property('label',units_label)
            shps.append(lshp)
            
    layer=gview.GvShapesLayer(shps)
    # Set antialias property so that lines look nice
    # when rotated.
    layer.set_property('_gl_antialias','1')
    cstr3=gvogrfs.gv_to_ogr_color(color1)
    if len(cstr3) < 9:
        cstr3=cstr3+"FF"
        
    layer.set_property('_gv_ogrfs_point',
                       'LABEL(t:{label},f:"%s",c:%s)' % (font,cstr3))
    return layer
Пример #28
0
def SimpleLatLongGrid(min_x,
                      min_y,
                      max_x,
                      max_y,
                      hdeg,
                      hmin,
                      hsec,
                      vdeg,
                      vmin,
                      vsec,
                      color=(0.5, 1.0, 0.5, 1.0),
                      xoff=-0.18,
                      yoff=1.04,
                      label_type=None,
                      shapes_name="Grid"):
    """ Create a reference graticule.
        min_x, min_y- minimum lat/longs, in decimal degrees
        max_x, max_y- minimum lat/longs, in decimal degrees
        hdeg/hmin/hsec- horizontal spacing (degrees/min/sec)
        vdeg/vmin/vsec- vertical spacing (degrees/min/sec)

        decimal degrees=degrees+(minutes/60.0)+(seconds/3600.0)

        xoff- horizontal offset of vertical labels, as a fraction
              of max_x-min_x.  Offset is relative to min_x.
        yoff- vertical offset of horizontal labels, as a fraction
              of max_y-min_y.  Offset is relative to min_y.
              
        color- start color for the grid
        label_type- not used yet; might be later for formatting.

        extents may be shifted slightly to generate 'nice' labels.

        Note that the min_x, min_y, max_x, max_y extents include
        a border 5% in from each side, and room for labels.        
    """

    shps = gview.GvShapes(name=shapes_name)
    gview.undo_register(shps)
    shps.add_field('position', 'string', 20)

    if os.name == 'nt':
        font = "-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*"
    else:
        #font="-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*"
        #font="-urw-helvetica-medium-r-normal-*-9-*-*-*-p-*-iso8859-2"
        font = "-adobe-helvetica-medium-r-normal-*-8-*-*-*-p-*-iso10646-1"
        #font="-misc-fixed-medium-r-*-*-9-*-*-*-*-*-*-*"

    x_spacing = float(hdeg) + (float(hmin) + (float(hsec) / 60.0)) / 60.0
    y_spacing = float(vdeg) + (float(vmin) + (float(vsec) / 60.0)) / 60.0

    # Round to nearest integer space
    max_x = min_x + Numeric.floor((max_x - min_x) / x_spacing) * x_spacing
    max_y = min_y + Numeric.floor((max_y - min_y) / y_spacing) * y_spacing

    lxoff = (max_x - min_x) * xoff  # horizontal label placement
    lyoff = (max_y - min_y) * yoff  # vertical label placement

    for hval in Numeric.arange(min_x, max_x + x_spacing / 100.0, x_spacing):
        nshp = gview.GvShape(type=gview.GVSHAPE_LINE)
        nshp.set_node(hval, max_y, 0, 0)
        nshp.set_node(hval, min_y, 0, 1)
        shps.append(nshp)
        pshp = gview.GvShape(type=gview.GVSHAPE_POINT)
        pshp.set_node(hval, min_y + lyoff)
        hstr = GetLatLongString(hval, 'longitude')
        pshp.set_property('position', hstr)
        shps.append(pshp)

    for vval in Numeric.arange(min_y, max_y + y_spacing / 100.0, y_spacing):
        nshp = gview.GvShape(type=gview.GVSHAPE_LINE)
        nshp.set_node(min_x, vval, 0, 0)
        nshp.set_node(max_x, vval, 0, 1)
        shps.append(nshp)
        pshp = gview.GvShape(type=gview.GVSHAPE_POINT)
        pshp.set_node(min_x + lxoff, vval)
        vstr = GetLatLongString(vval, 'latitude')
        pshp.set_property('position', vstr)
        shps.append(pshp)

    cstr = gvogrfs.gv_to_ogr_color(color)
    if len(cstr) < 9:
        cstr = cstr + "FF"
    clstr = str(color[0]) + ' ' + str(color[1]) + ' ' + str(
        color[2]) + ' ' + str(color[3])

    layer = gview.GvShapesLayer(shps)
    layer.set_property('_line_color', clstr)
    layer.set_property('_point_color', clstr)
    # Set antialias property so that lines look nice
    # when rotated.
    layer.set_property('_gl_antialias', '1')
    layer.set_property('_gv_ogrfs_point',
                       'LABEL(t:{position},f:"' + font + '",c:' + cstr + ')')
    layer.set_read_only(gtk.TRUE)

    return layer
Пример #29
0
def SimpleMeasuredGrid(min_x,
                       min_y,
                       max_x,
                       max_y,
                       x_spacing,
                       y_spacing,
                       color=(0.5, 1.0, 0.5, 1.0),
                       xoff=-0.14,
                       yoff=1.04,
                       label_type=None,
                       shapes_name="Grid"):
    """ Create a reference grid for a utm-projected raster.
        min_x, min_y, max_x, max_y- extents that grid should cover
        x_spacing- line spacing in horizontal direction
        y_spacing- line spacing in vertical direction
        xoff- horizontal offset of vertical labels, as a fraction
              of max_x-min_x.  Offset is relative to min_x.
        yoff- vertical offset of horizontal labels, as a fraction
              of max_y-min_y.  Offset is relative to min_y.
        color- start color for the grid
        label_type- not used yet; might be later for formatting.
        shapes_name- name to give the shapes forming the layer.
        
    """

    shps = gview.GvShapes(name=shapes_name)
    gview.undo_register(shps)
    shps.add_field('position', 'string', 20)

    if os.name == 'nt':
        font = "-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*"
    else:
        #font="-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*"
        #font="-urw-helvetica-medium-r-normal-*-9-*-*-*-p-*-iso8859-2"
        font = "-adobe-helvetica-medium-r-normal-*-8-*-*-*-p-*-iso10646-1"
        #font="-misc-fixed-medium-r-*-*-9-*-*-*-*-*-*-*"

    # Round to nearest integer space
    max_x = min_x + Numeric.floor((max_x - min_x) / x_spacing) * x_spacing
    max_y = min_y + Numeric.floor((max_y - min_y) / y_spacing) * y_spacing

    lxoff = (max_x - min_x) * xoff  # horizontal label placement
    lyoff = (max_y - min_y) * yoff  # vertical label placement

    for hval in Numeric.arange(min_x, max_x + x_spacing / 100.0, x_spacing):
        nshp = gview.GvShape(type=gview.GVSHAPE_LINE)
        nshp.set_node(hval, max_y, 0, 0)
        nshp.set_node(hval, min_y, 0, 1)
        shps.append(nshp)
        pshp = gview.GvShape(type=gview.GVSHAPE_POINT)
        pshp.set_node(hval, min_y + lyoff)
        pshp.set_property('position', "%d" % int(hval + 0.5))
        shps.append(pshp)

    for vval in Numeric.arange(min_y, max_y + y_spacing / 100.0, y_spacing):
        nshp = gview.GvShape(type=gview.GVSHAPE_LINE)
        nshp.set_node(min_x, vval, 0, 0)
        nshp.set_node(max_x, vval, 0, 1)
        shps.append(nshp)
        pshp = gview.GvShape(type=gview.GVSHAPE_POINT)
        pshp.set_node(min_x + lxoff, vval)
        pshp.set_property('position', "%d" % int(vval + 0.5))
        shps.append(pshp)

    cstr = gvogrfs.gv_to_ogr_color(color)
    if len(cstr) < 9:
        cstr = cstr + "FF"
    clstr = str(color[0]) + ' ' + str(color[1]) + ' ' + str(
        color[2]) + ' ' + str(color[3])

    layer = gview.GvShapesLayer(shps)
    layer.set_property('_line_color', clstr)
    layer.set_property('_point_color', clstr)
    # Set antialias property so that lines look nice
    # when rotated.
    layer.set_property('_gl_antialias', '1')
    layer.set_property('_gv_ogrfs_point',
                       'LABEL(t:{position},f:"' + font + '",c:' + cstr + ')')
    layer.set_read_only(gtk.TRUE)

    return layer
Пример #30
0
    def vector_symbol_from_file( self ):
        symbols_dir = os.path.join(gview.home_dir, 'symbols' )
        symbol1 = os.path.join( symbols_dir, 'square.xml' )
        symbol2 = os.path.join( symbols_dir, 'square_filled.xml' )
        symbol3 = os.path.join( symbols_dir, 'cross.xml' )
        symbol4 = os.path.join( symbols_dir, 'x.xml' )
        symbol5 = os.path.join( symbols_dir, 'triangle.xml' )
        symbol6 = os.path.join( symbols_dir, 'triangle_filled.xml' )
        symbol7 = os.path.join( symbols_dir, 'circle.xml' )
        symbol8 = os.path.join( symbols_dir, 'circle_filled.xml' )
        symbol9 = os.path.join( symbols_dir, 'dash.xml' )
        self.set_step_name( 'OGRFS Vector Symbol from File' )
        self.set_text( \
            'In the middle of the screen should be 9 green symbols.\n'
        'Symbols loaded from the following files:\n'
        + symbol1 + '\n'
        + symbol2 + '\n'
        + symbol3 + '\n'
        + symbol4 + '\n'
        + symbol5 + '\n'
        + symbol6 + '\n'
        + symbol7 + '\n'
        + symbol8 + '\n'
        + symbol9 + '\n'
            + '\n'
            + '\n' )

        shapes = gview.GvShapes()
        gview.undo_register( shapes)

        sm = gview.GvSymbolManager()

        sm.get_symbol(symbol1)
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 40, 40, node=0 )
        shape.set_property('_gv_ogrfs',
               'SYMBOL(c:#FF0000,s:2,id:"' + symbol1 +'")' )
        shapes.append( shape )

        sm.get_symbol(symbol2)
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 40, node=0 )
        shape.set_property('_gv_ogrfs',
               'SYMBOL(c:#FF0000,s:2,id:"' + symbol2 +'")' )
        shapes.append( shape )

        sm.get_symbol(symbol3)
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 60, 40, node=0 )
        shape.set_property('_gv_ogrfs',
               'SYMBOL(c:#FF0000,s:2,id:"' + symbol3 +'")' )
        shapes.append( shape )

        sm.get_symbol(symbol4)
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 40, 50, node=0 )
        shape.set_property('_gv_ogrfs',
               'SYMBOL(c:#FF0000,s:2,id:"' + symbol4 +'")' )
        shapes.append( shape )

        sm.get_symbol(symbol5)
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 50, node=0 )
        shape.set_property('_gv_ogrfs',
               'SYMBOL(c:#FF0000,s:2,id:"' + symbol5 +'")' )
        shapes.append( shape )

        sm.get_symbol(symbol6)
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 60, 50, node=0 )
        shape.set_property('_gv_ogrfs',
               'SYMBOL(c:#FF0000,s:2,id:"' + symbol6 +'")' )
        shapes.append( shape )

        sm.get_symbol(symbol7)
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 40, 60, node=0 )
        shape.set_property('_gv_ogrfs',
               'SYMBOL(c:#FF0000,s:2,id:"' + symbol7 +'")' )
        shapes.append( shape )

        sm.get_symbol(symbol8)
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 60, node=0 )
        shape.set_property('_gv_ogrfs',
               'SYMBOL(c:#FF0000,s:2,id:"' + symbol8 +'")' )
        shapes.append( shape )

        sm.get_symbol(symbol9)
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 60, 60, node=0 )
        shape.set_property('_gv_ogrfs',
               'SYMBOL(c:#FF0000,s:2,id:"' + symbol9 +'")' )
        shapes.append( shape )

        # Create the layer and display

        layer = gview.GvShapesLayer( shapes )
        layer.set_name( 'test' )
        self.view.add_layer( layer )
        self.view.set_active_layer( layer )

        self.view.fit_extents( 0, 0, 100, 100 )
Пример #31
0
    def vector_symbol( self ):
        self.set_step_name( 'OGRFS Vector Symbol' )
        self.set_text( \
            'You should see two three symbols.  In the middle of the screen\n'
            + 'an arrow pointing straight up.  Up and right of that should\n'
            + 'be a crossed arrow (slightly larger) pointing northeast and\n'
            + 'north west.  The north-west arrow should be green, and the\n'
            + 'north-east one red.\n'
            + '\n'
            + 'To the right of that should be a pair of blue arrows meeting\n'
            + 'at their bases.\n'
            + '\n'
            + '\n' )

        shapes = gview.GvShapes()
        gview.undo_register( shapes)

        # Insert a vector symbol that looks like an arrow into the symbol
        # manager.

        sm = gview.GvSymbolManager()

        shape = gview.GvShape( type = gview.GVSHAPE_LINE )
        shape.set_node( 0.0, -6, node=0 )
        shape.set_node( 0.0, 6,  node=1 )
        shape.set_node( -2, 4, node=2 )
        shape.set_node( 0.0, 6,  node=3 )
        shape.set_node( 2, 4,  node=4 )
        shape.set_property('_gv_ogrfs','PEN(w:2)' )

        if os.name == "nt":
            sym_name = "\\rendertest_arrow"
        else:
            sym_name = "/rendertest_arrow"

        sm.inject_vector_symbol( sym_name, shape )

        # Place the symbol.

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 50, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FF0000,s:2,id:"'+sym_name+'")' )
        shapes.append( shape )

        # Insert a vector symbol consisting of crossed arrows.

        sm = gview.GvSymbolManager()

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 0.0, 0, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(a:45,c:#00FF00,id:"' + sym_name + '");' + \
                           'SYMBOL(a:-45,id:"' + sym_name + '")' )

        if os.name == "nt":
            sym_name2 = "\\rendertest_carrow"
        else:
            sym_name2 = "/rendertest_carrow"
        sm.inject_vector_symbol( sym_name2, shape )

        # Place the symbol. 

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 60, 60, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FF0000,s:4,id:"'+sym_name2+'")' )
        shapes.append( shape )

        # Insert a vector symbol consisting scaled arrows with offsets.

        sm = gview.GvSymbolManager()

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 0.0, 0, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(s:0.3333,a:45,dx:-6px,dy:-6px,id:"' + sym_name + '");' + \
                           'SYMBOL(s:0.666,a:-45,dx:12px,dy:-12px,id:"' + sym_name + '")')

        if os.name == "nt":
            sym_name2 = "\\rendertest_carrow2"
        else:
            sym_name2 = "/rendertest_carrow2"
        sm.inject_vector_symbol( sym_name2, shape )

        # Place the symbol. 

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 85, 60, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#0000FF,s:4,id:"'+sym_name2+'")' )
        shapes.append( shape )

        # Create the layer and display

        layer = gview.GvShapesLayer( shapes )
        layer.set_name( 'test' )
        self.view.add_layer( layer )
        self.view.set_active_layer( layer )

        self.view.fit_extents( 0, 0, 100, 100 )
Пример #32
0
    def raster_symbol( self ):
        self.set_step_name( 'Raster Symbol Test' )
        self.set_text( 'A red symbol (the busy indicator from thet toolbar)\n'
                       +'should be shown.  When zooming in or out it should\n'
                       +'remain the same size on screen.\n'
                       +''
                       +'NOTE: This symbols should really be green but it\n'
                       +'seems that currently the color attribute of\n'
                       +'SYMBOL directives for raster symbols is ignored\n'
                       +'\n'
                       +'\n'
                       +'' )

        shapes = gview.GvShapes()
        gview.undo_register( shapes)
        layer = gview.GvShapesLayer( shapes )
        layer.set_name( 'test' )

        if os.name == "nt":
            sym_file = gview.home_dir + '\\pics\\busy.xpm'
            sym_file2 = gview.home_dir + '\\pics\\idle.xpm'
            sym_name = '\\three_idle'
        else:
            sym_file = gview.home_dir + '/pics/busy.xpm'
            sym_file2 = gview.home_dir + '/pics/idle.xpm'
            sym_name = '/three_idle'


        # Unoffset icon
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 20, 50, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#00FF00,id:"'+sym_file+'")' )
        shapes.append( shape )

        # Pixel Offset
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 20, 50, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#00FF00,dx:30px,dy:-10px,id:"'+sym_file+'")' )
        shapes.append( shape )

        # Geo Offset
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 20, 50, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#00FF00,dx:30g,dy:-30g,id:"'+sym_file+'")' )
        shapes.append( shape )

        # Inject a vector icon symbol that consists of three raster symbols,
        # but do it on the vector layer.

        sm = layer.get_symbol_manager( 1 )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 0.0, 0, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(dy:-10px,dx:-40px,id:"' + sym_file2 + '");' + \
                           'SYMBOL(id:"' + sym_file2 + '");' + \
                           'SYMBOL(dy:10px,dx:40px,id:"' + sym_file2 + '")' )

        sm.inject_vector_symbol( sym_name, shape )

        # Place the "3" idle symbol.

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 60, 50, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#00FF00,id:"'+sym_name+'")' )
        shapes.append( shape )

        # Add line for context.
        shape = gview.GvShape( type = gview.GVSHAPE_LINE )
        shape.set_node( 10, 10, node=0 )
        shape.set_node( 80, 10, node=1 )
        shape.set_node( 80, 90, node=2 )
        shape.set_node( 50, 80, node=3 )
        shape.set_node( 10, 90, node=4 )
        shapes.append( shape )

        self.view.add_layer( layer )
        self.view.set_active_layer( layer )

        self.view.fit_extents( 0, 0, 100, 100 )
Пример #33
0
def SimpleLatLongGrid(min_x,min_y,max_x,max_y,hdeg,hmin,hsec,vdeg,vmin,vsec,
                        color=(0.5,1.0,0.5,1.0),xoff=-0.18,yoff=1.04,
                        label_type=None,shapes_name="Grid"):
    """ Create a reference graticule.
        min_x, min_y- minimum lat/longs, in decimal degrees
        max_x, max_y- minimum lat/longs, in decimal degrees
        hdeg/hmin/hsec- horizontal spacing (degrees/min/sec)
        vdeg/vmin/vsec- vertical spacing (degrees/min/sec)

        decimal degrees=degrees+(minutes/60.0)+(seconds/3600.0)

        xoff- horizontal offset of vertical labels, as a fraction
              of max_x-min_x.  Offset is relative to min_x.
        yoff- vertical offset of horizontal labels, as a fraction
              of max_y-min_y.  Offset is relative to min_y.
              
        color- start color for the grid
        label_type- not used yet; might be later for formatting.

        extents may be shifted slightly to generate 'nice' labels.

        Note that the min_x, min_y, max_x, max_y extents include
        a border 5% in from each side, and room for labels.        
    """

    shps=gview.GvShapes(name=shapes_name)
    gview.undo_register( shps )
    shps.add_field('position','string',20)

    if os.name == 'nt':
        font="-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*"
    else:
        #font="-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*"
        #font="-urw-helvetica-medium-r-normal-*-9-*-*-*-p-*-iso8859-2"
        font="-adobe-helvetica-medium-r-normal-*-8-*-*-*-p-*-iso10646-1"
        #font="-misc-fixed-medium-r-*-*-9-*-*-*-*-*-*-*"

    x_spacing=float(hdeg)+(float(hmin)+(float(hsec)/60.0))/60.0
    y_spacing=float(vdeg)+(float(vmin)+(float(vsec)/60.0))/60.0


    # Round to nearest integer space
    max_x=min_x+Numeric.floor((max_x-min_x)/x_spacing)*x_spacing
    max_y=min_y+Numeric.floor((max_y-min_y)/y_spacing)*y_spacing

    lxoff=(max_x-min_x)*xoff  # horizontal label placement
    lyoff=(max_y-min_y)*yoff # vertical label placement
    
    for hval in Numeric.arange(min_x,
                               max_x+x_spacing/100.0,
                               x_spacing):
        nshp=gview.GvShape(type=gview.GVSHAPE_LINE)
        nshp.set_node(hval,max_y,0,0)
        nshp.set_node(hval,min_y,0,1)
        shps.append(nshp)
        pshp=gview.GvShape(type=gview.GVSHAPE_POINT)
        pshp.set_node(hval,min_y+lyoff)
        hstr=GetLatLongString(hval,'longitude')
        pshp.set_property('position',hstr)
        shps.append(pshp)
        
    for vval in Numeric.arange(min_y,
                               max_y+y_spacing/100.0,
                               y_spacing):
        nshp=gview.GvShape(type=gview.GVSHAPE_LINE)
        nshp.set_node(min_x,vval,0,0)
        nshp.set_node(max_x,vval,0,1)
        shps.append(nshp)
        pshp=gview.GvShape(type=gview.GVSHAPE_POINT)
        pshp.set_node(min_x+lxoff,vval)
        vstr=GetLatLongString(vval,'latitude')
        pshp.set_property('position',vstr)
        shps.append(pshp)

    cstr=gvogrfs.gv_to_ogr_color(color)
    if len(cstr) < 9:
        cstr=cstr+"FF"
    clstr=str(color[0])+' '+str(color[1])+' '+str(color[2])+' '+str(color[3])
    
    layer=gview.GvShapesLayer(shps)
    layer.set_property('_line_color',clstr)
    layer.set_property('_point_color',clstr)
    # Set antialias property so that lines look nice
    # when rotated.
    layer.set_property('_gl_antialias','1')
    layer.set_property('_gv_ogrfs_point',
                       'LABEL(t:{position},f:"'+font+'",c:'+cstr+')')
    layer.set_read_only(gtk.TRUE)

    return layer
Пример #34
0
    def vector_symbol(self):
        self.set_step_name('OGRFS Vector Symbol')
        self.set_text( \
            'You should see two three symbols.  In the middle of the screen\n'
            + 'an arrow pointing straight up.  Up and right of that should\n'
            + 'be a crossed arrow (slightly larger) pointing northeast and\n'
            + 'north west.  The north-west arrow should be green, and the\n'
            + 'north-east one red.\n'
            + '\n'
            + 'To the right of that should be a pair of blue arrows meeting\n'
            + 'at their bases.\n'
            + '\n'
            + '\n' )

        shapes = gview.GvShapes()
        gview.undo_register(shapes)

        # Insert a vector symbol that looks like an arrow into the symbol
        # manager.

        sm = gview.GvSymbolManager()

        shape = gview.GvShape(type=gview.GVSHAPE_LINE)
        shape.set_node(0.0, -6, node=0)
        shape.set_node(0.0, 6, node=1)
        shape.set_node(-2, 4, node=2)
        shape.set_node(0.0, 6, node=3)
        shape.set_node(2, 4, node=4)
        shape.set_property('_gv_ogrfs', 'PEN(w:2)')

        if os.name == "nt":
            sym_name = "\\rendertest_arrow"
        else:
            sym_name = "/rendertest_arrow"

        sm.inject_vector_symbol(sym_name, shape)

        # Place the symbol.

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(50, 50, node=0)
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FF0000,s:2,id:"' + sym_name + '")')
        shapes.append(shape)

        # Insert a vector symbol consisting of crossed arrows.

        sm = gview.GvSymbolManager()

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(0.0, 0, node=0)
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(a:45,c:#00FF00,id:"' + sym_name + '");' + \
                           'SYMBOL(a:-45,id:"' + sym_name + '")' )

        if os.name == "nt":
            sym_name2 = "\\rendertest_carrow"
        else:
            sym_name2 = "/rendertest_carrow"
        sm.inject_vector_symbol(sym_name2, shape)

        # Place the symbol.

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(60, 60, node=0)
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FF0000,s:4,id:"' + sym_name2 + '")')
        shapes.append(shape)

        # Insert a vector symbol consisting scaled arrows with offsets.

        sm = gview.GvSymbolManager()

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(0.0, 0, node=0)
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(s:0.3333,a:45,dx:-6px,dy:-6px,id:"' + sym_name + '");' + \
                           'SYMBOL(s:0.666,a:-45,dx:12px,dy:-12px,id:"' + sym_name + '")')

        if os.name == "nt":
            sym_name2 = "\\rendertest_carrow2"
        else:
            sym_name2 = "/rendertest_carrow2"
        sm.inject_vector_symbol(sym_name2, shape)

        # Place the symbol.

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(85, 60, node=0)
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#0000FF,s:4,id:"' + sym_name2 + '")')
        shapes.append(shape)

        # Create the layer and display

        layer = gview.GvShapesLayer(shapes)
        layer.set_name('test')
        self.view.add_layer(layer)
        self.view.set_active_layer(layer)

        self.view.fit_extents(0, 0, 100, 100)
Пример #35
0
    def size_symbols( self ):
        self.set_step_name( 'Military Size Symbols' )
        self.set_text( \
            'Here you will see each of the size designators for various sizes\n'
            + 'of military symbols\n' )

        shapes = gview.GvShapes()
        gview.undo_register( shapes)

        sm = gview.GvSymbolManager()

        #symbol_size * base_size * 2 define the size of the symbol on screen.
        base_size = 1.0
        symbol_size = 3.0 

        #the number of pixels wide to make the task force indicator
        tf_offset = ( symbol_size * base_size * 2 ) + 2 
        symbol_offset = tf_offset

        #create the circle symbol as a multiline with n points
        import math
        circle = gview.GvShape( type=gview.GVSHAPE_LINE )
        filled_circle = gview.GvShape( type=gview.GVSHAPE_AREA )
        n = 8
        radius = base_size
        for i in range( n + 1 ):
            angle = (float(i)*(360.0/float(n))) / (180.0/math.pi)
            x = math.sin( angle ) * radius
            y = math.cos( angle ) * radius
            circle.add_node( x, y, 0.0 )
            filled_circle.add_node( x, y, 0.0 )
        circle.set_property( "_gv_ogrfs", "PEN(w:1)" )
        filled_circle.set_property( "_gv_ogrfs", "PEN(w:1);BRUSH()" )
        sm.inject_vector_symbol( "%scircle" % os.sep, circle )
        sm.inject_vector_symbol( "%sfilled_circle" % os.sep, filled_circle)

        #create a vertical bar symbol
        shape = gview.GvShape(type=gview.GVSHAPE_LINE )
        shape.add_node( 0.0, -base_size, 0.0 )
        shape.add_node( 0.0, base_size, 0.0 )
        shape.set_property( "_gv_ogrfs", "PEN(w:1)" )
        sm.inject_vector_symbol( "%svertical_bar" % os.sep, shape )

        #now create a cross from rotated vertical bars
        shape = gview.GvShape(type=gview.GVSHAPE_LINE )
        shape.add_node( -base_size, -base_size, 0.0 )
        shape.add_node( base_size, base_size, 0.0 )
        shape.set_property( "_gv_ogrfs", "PEN(w:1)" )
        sm.inject_vector_symbol( "%sline_45" % os.sep, shape )

        shape = gview.GvShape(type=gview.GVSHAPE_LINE )
        shape.add_node( -base_size, base_size, 0.0 )
        shape.add_node( base_size, -base_size, 0.0 )
        shape.set_property( "_gv_ogrfs", "PEN(w:1)" )
        sm.inject_vector_symbol( "%sline_315" % os.sep, shape )

        shape = gview.GvShape(type=gview.GVSHAPE_POINT )
        shape.add_node( 0.0, 0.0, 0.0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(id:%sline_45);SYMBOL(id:%sline_315)" % ( os.sep, os.sep ) )
        sm.inject_vector_symbol( "%scross" % os.sep, shape )

        #taskforce 1
        shape = self.create_taskforce_indicator( 1, symbol_size * base_size, tf_offset )
        sm.inject_vector_symbol( "%stf_1" % os.sep, shape )

        #taskforce 2
        shape = self.create_taskforce_indicator( 2, symbol_size * base_size, tf_offset )
        sm.inject_vector_symbol( "%stf_2" % os.sep, shape )

        #taskforce 3
        shape = self.create_taskforce_indicator( 3, symbol_size * base_size, tf_offset )
        sm.inject_vector_symbol( "%stf_3" % os.sep, shape )

        #taskforce 4
        shape = self.create_taskforce_indicator( 4, symbol_size * base_size, tf_offset )
        sm.inject_vector_symbol( "%stf_4" % os.sep, shape )

        #taskforce 5
        shape = self.create_taskforce_indicator( 5, symbol_size * base_size, tf_offset )
        sm.inject_vector_symbol( "%stf_5" % os.sep, shape )

        #taskforce 6
        shape = self.create_taskforce_indicator( 6, symbol_size * base_size, tf_offset )
        sm.inject_vector_symbol( "%stf_6" % os.sep, shape )


        #team symbol
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 0.0, 0.0, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(id:%scircle,s:%s);SYMBOL(id:%sline_45,s:%s)" % (os.sep, symbol_size, os.sep, symbol_size) )
        sm.inject_vector_symbol( "%steam" % os.sep, shape )

        #squad symbol
        shape = self.create_size_indicator( "filled_circle", 1, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%ssquad" % os.sep, shape )

        #section symbol
        shape = self.create_size_indicator( "filled_circle", 2, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%ssection" % os.sep, shape )

        #platoon symbol
        shape = self.create_size_indicator( "filled_circle", 3, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%splatoon" % os.sep, shape )

        #company symbol
        shape = self.create_size_indicator( "vertical_bar", 1, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%scompany" % os.sep, shape )

        #battalion symbol
        shape = self.create_size_indicator( "vertical_bar", 2, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%sbattalion" % os.sep, shape )

        #regiment symbol
        shape = self.create_size_indicator( "vertical_bar", 3, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%sregiment" % os.sep, shape )

        #brigade symbol
        shape = self.create_size_indicator( "cross", 1, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%sbrigade" % os.sep, shape )

        #division symbol
        shape = self.create_size_indicator( "cross", 2, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%sdivision" % os.sep, shape )

        print 'Division:' + shape.get_property('_gv_ogrfs')

        #corps symbol
        shape = self.create_size_indicator( "cross", 3, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%scorps" % os.sep, shape )

        #army symbol
        shape = self.create_size_indicator( "cross", 4, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%sarmy" % os.sep, shape )

        #armygroup symbol
        shape = self.create_size_indicator( "cross", 5, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%sarmygroup" % os.sep, shape )

        #region symbol
        shape = self.create_size_indicator( "cross", 6, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%sregion" % os.sep, shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 10, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"team\")" ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 10, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%steam)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 10, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%steam);SYMBOL(c:#00FFFF,id:%stf_1" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 15, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"squad\")" ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 15, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%ssquad)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 15, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%ssquad);SYMBOL(c:#00FFFF,id:%stf_1" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 20, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"section\")" ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 20, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%ssection)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 20, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%ssection);SYMBOL(c:#00FFFF,id:%stf_2" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 25, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"platoon\")" ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 25, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%splatoon)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 25, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%splatoon);SYMBOL(c:#00FFFF,id:%stf_3" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 30, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"company\")" ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 30, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%scompany)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 30, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%scompany);SYMBOL(c:#00FFFF,id:%stf_1" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 35, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"battalion\")" ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 35, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sbattalion)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 35, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sbattalion);SYMBOL(c:#00FFFF,id:%stf_2" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 40, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"regiment\")" ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 40, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sregiment)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 40, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sregiment);SYMBOL(c:#00FFFF,id:%stf_3" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 45, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"brigade\")" ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 45, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sbrigade)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 45, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sbrigade);SYMBOL(c:#00FFFF,id:%stf_1" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 50, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"division\")") 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 50, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sdivision)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 50, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sdivision);SYMBOL(c:#00FFFF,id:%stf_2" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 55, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"corps\")" ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 55, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%scorps)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 55, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%scorps);SYMBOL(c:#00FFFF,id:%stf_3" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 60, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"army\")" ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 60, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sarmy)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 60, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sarmy);SYMBOL(c:#00FFFF,id:%stf_4" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 65, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"armygroup\")" ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 65, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sarmygroup)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 65, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sarmygroup);SYMBOL(c:#00FFFF,id:%stf_5" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 70, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"region\")" ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 70, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sregion)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 70, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sregion);SYMBOL(c:#00FFFF,id:%stf_6" % (os.sep,os.sep) ) 
        shapes.append( shape )

        # Create the layer and display

        #turn off display lists for now.
        #gview.set_preference('display_lists', "OFF" )

        layer = gview.GvShapesLayer( shapes )
        layer.set_name( 'test' )
        layer.set_property( "_gl_antialias", "1" )
        self.view.add_layer( layer )
        self.view.set_active_layer( layer )

        self.view.fit_extents( 0, 0, 100, 100 )
Пример #36
0
def SimpleReferenceGrid(min_x,min_y,max_x,max_y,x_divisions,y_divisions,
                        color=(0.5,1.0,0.5,1.0),xoff=-0.15,yoff=-0.04,
                        label_type=None,shapes_name="Grid"):
    """ Create a reference grid for an unprojected raster.
        min_x, min_y- minimum lat/longs, in decimal degrees
        max_x, max_y- minimum lat/longs, in decimal degrees
        x_divisions- number of divisions in horizontal direction
        y_divisions- number of divisions in vertical direction
        xoff- horizontal offset of vertical labels, as a fraction
              of max_x-min_x.  Offset is relative to min_x.
        yoff- vertical offset of horizontal labels, as a fraction
              of max_y-min_y.  Offset is relative to min_y.
        color- start color for the grid
        label_type- not used yet; might be later for formatting.

    """

    shps=gview.GvShapes(name=shapes_name)
    gview.undo_register( shps )
    shps.add_field('position','string',20)

    if os.name == 'nt':
        font="-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*"
    else:
        #font="-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*"
        #font="-urw-helvetica-medium-r-normal-*-9-*-*-*-p-*-iso8859-2"
        font="-adobe-helvetica-medium-r-normal-*-8-*-*-*-p-*-iso10646-1"
        #font="-misc-fixed-medium-r-*-*-9-*-*-*-*-*-*-*"

    
    lxoff=(max_x-min_x)*xoff  # horizontal label placement
    lyoff=(max_y-min_y)*yoff # vertical label placement
   
    hspc=(max_x-min_x)/x_divisions
    vspc=(max_y-min_y)/y_divisions

    for hval in Numeric.arange(min_x,max_x+hspc/100.0,hspc):
        nshp=gview.GvShape(type=gview.GVSHAPE_LINE)
        nshp.set_node(hval,max_y,0,0)
        nshp.set_node(hval,min_y,0,1)
        shps.append(nshp)
        pshp=gview.GvShape(type=gview.GVSHAPE_POINT)
        pshp.set_node(hval,min_y+lyoff)
        pshp.set_property('position',"%.1f" % hval)
        shps.append(pshp)
                          
    for vval in Numeric.arange(min_y,max_y+vspc/100.0,vspc):
        nshp=gview.GvShape(type=gview.GVSHAPE_LINE)
        nshp.set_node(min_x,vval,0,0)
        nshp.set_node(max_x,vval,0,1)
        shps.append(nshp)
        pshp=gview.GvShape(type=gview.GVSHAPE_POINT)
        pshp.set_node(min_x+lxoff,vval)
        pshp.set_property('position',"%.1f" % vval)
        shps.append(pshp)

    cstr=gvogrfs.gv_to_ogr_color(color)
    if len(cstr) < 9:
        cstr=cstr+"FF"
    clstr=str(color[0])+' '+str(color[1])+' '+str(color[2])+' '+str(color[3])
    
    layer=gview.GvShapesLayer(shps)
    layer.set_property('_line_color',clstr)
    layer.set_property('_point_color',clstr)
    # Set antialias property so that lines look nice
    # when rotated.
    layer.set_property('_gl_antialias','1')
    layer.set_property('_gv_ogrfs_point',
                       'LABEL(t:{position},f:"'+font+'",c:'+cstr+')')
    layer.set_read_only(gtk.TRUE)    
    
    return layer
Пример #37
0
def SimpleScalebarLayer(xoffset,
                        yoffset,
                        dwidth,
                        swidth,
                        angle,
                        units_label=None,
                        stype=GVSCALE1,
                        color1=(0.0, 0.0, 0.0, 1.0),
                        color2=(1.0, 1.0, 1.0, 1.0),
                        offset=-0.2,
                        shapes_name="Scale Bar"):
    """ Create a layer with a Scale bar located at
        stretching from dmin to dmax on the display
        Input:
            xoffset,yoffset- where to center scale bar (in
                             display coordinates)

            dwidth- width of scale bar in display coordinates
            swidth- width of scale bar in scale coordinates
                    (same if scale units and geocoding units
                    are the same; different if for example
                    display is UTM- meters- and scale bar is
                    in km)
            angle- angle of scale bar relative to display
                   (in RADIANS)
            units_label- label for units (left out if None)
            stype- index of scale bar type (currently must be 0)
            color1- First color and outline color for scale bar. A tuple
                    of 4 values between 0 and 1.
            color2- Second color (only used in alternating scale bars)
            offset- Vertical offset of labels for scale bar as a
                    fraction of scale bar width.
            shapes_name- name to give the shapes that form
                         the scalebar.
    """

    shps = gview.GvShapes(name=shapes_name)
    gview.undo_register(shps)
    shps.add_field('label', 'string', 20)

    if os.name == 'nt':
        font = "-adobe-helvetica-medium-r-*-*-15-*-*-*-*-*-*-*"
    else:
        #font="-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*"
        #font="-urw-helvetica-medium-r-normal-*-9-*-*-*-p-*-iso8859-2"
        font = "-adobe-helvetica-medium-r-normal-*-8-*-*-*-p-*-iso10646-1"
        #font="-misc-fixed-medium-r-*-*-9-*-*-*-*-*-*-*"

    sc = dwidth / swidth
    svals, labels = GetScaleBlocks(swidth)

    cstr1=str(color1[0])+' '+str(color1[1])+' '+str(color1[2])+\
           ' '+str(color1[3])
    cstr2=str(color2[0])+' '+str(color2[1])+' '+str(color2[2])+\
           ' '+str(color2[3])

    if stype == GVSCALE1:
        # Rectangle with alternating filled/unfilled
        # sections.
        smax = svals[len(svals) - 1]

        # rectangle nodes before rotation
        hbr = (svals -
               (smax / 2.0)) * sc  # horizontal- shift to -smax/2:+smax/2
        # so that rectangle is centered about 0.
        # rectangle extends from -smax/20 (bbr) to +smax/20 (tbr) vertically,
        # labels are placed at + or - smax/5
        tbr = smax / 20.0 * Numeric.ones(Numeric.shape(hbr))
        bbr = -1 * smax / 20.0 * Numeric.ones(Numeric.shape(hbr))
        lbr = offset * smax * Numeric.ones(Numeric.shape(hbr))

        # units label location before rotation
        uxbr = (hbr[len(hbr) - 1] - hbr[0]) * 0.05 + hbr[len(hbr) - 1]

        # rotate
        ctheta = Numeric.cos(angle)
        stheta = Numeric.sin(angle)
        tx = hbr * ctheta - tbr * stheta + xoffset
        ty = hbr * stheta + tbr * ctheta + yoffset
        bx = hbr * ctheta - bbr * stheta + xoffset
        by = hbr * stheta + bbr * ctheta + yoffset
        lx = hbr * ctheta - lbr * stheta + xoffset
        ly = hbr * stheta + lbr * ctheta + yoffset
        ux = uxbr * ctheta + xoffset
        uy = uxbr * stheta + yoffset

        # LATER: once shape collections are working, use them instead
        # so that entire scale bar can be selected and shifted as
        # a whole rather than separate shapes...

        #shp=gview.GvShape(type=gview.GVSHAPE_COLLECTION)
        #shp.set_property('_gv_ogrfs_point',
        #               'LABEL(t:{label},f:"%s",c:#000000FF)' % font)
        #shps.append(shp)
        for idx in range(len(tx) - 1):
            nshp = gview.GvShape(type=gview.GVSHAPE_AREA)
            nshp.add_node(tx[idx], ty[idx], 0)
            nshp.add_node(tx[idx + 1], ty[idx + 1], 0)
            nshp.add_node(bx[idx + 1], by[idx + 1], 0)
            nshp.add_node(bx[idx], by[idx], 0)
            nshp.add_node(tx[idx], ty[idx], 0)
            if idx % 2:
                nshp.set_property('_gv_color', cstr1)
                nshp.set_property('_gv_fill_color', cstr2)
            else:
                nshp.set_property('_gv_color', cstr1)
                nshp.set_property('_gv_fill_color', cstr1)

            shps.append(nshp)

        for idx in range(len(lx)):
            if labels[idx] is not None:
                lshp = gview.GvShape(type=gview.GVSHAPE_POINT)
                lshp.set_node(lx[idx], ly[idx])
                lshp.set_property('label', labels[idx])
                shps.append(lshp)

        if units_label is not None:
            lshp = gview.GvShape(type=gview.GVSHAPE_POINT)
            lshp.set_node(ux, uy)
            lshp.set_property('label', units_label)
            shps.append(lshp)

    layer = gview.GvShapesLayer(shps)
    # Set antialias property so that lines look nice
    # when rotated.
    layer.set_property('_gl_antialias', '1')
    cstr3 = gvogrfs.gv_to_ogr_color(color1)
    if len(cstr3) < 9:
        cstr3 = cstr3 + "FF"

    layer.set_property('_gv_ogrfs_point',
                       'LABEL(t:{label},f:"%s",c:%s)' % (font, cstr3))
    return layer
Пример #38
0
    def ogrfs_points(self):
        self.set_step_name('OGRFS Point Symbols')
        self.set_text(
            'You should see two rows of yellow symbols.\n' +
            'First Row: plus, circle, box, triangle, start\n' +
            'Second Row: X, filled circle, box, triangle and star\n' + '\n' +
            'Symbols should stay the same size when you zoom.\n' + '\n' +
            '\n' + '\n' + '')

        shapes = gview.GvShapes()
        gview.undo_register(shapes)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(15, 30, node=0)
        shape.set_property('_gv_ogrfs', 'SYMBOL(c:#FFFF00,s:3,id:ogr-sym-1)')
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(15, 15, node=0)
        shape.set_property('_gv_ogrfs', 'SYMBOL(c:#FFFF00,s:3,id:ogr-sym-0)')
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(30, 15, node=0)
        shape.set_property('_gv_ogrfs', 'SYMBOL(c:#FFFF00,s:3,id:ogr-sym-2)')
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(30, 30, node=0)
        shape.set_property('_gv_ogrfs', 'SYMBOL(c:#FFFF00,s:3,id:ogr-sym-3)')
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(45, 15, node=0)
        shape.set_property('_gv_ogrfs', 'SYMBOL(c:#FFFF00,s:3,id:ogr-sym-4)')
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(45, 30, node=0)
        shape.set_property('_gv_ogrfs', 'SYMBOL(c:#FFFF00,s:3,id:ogr-sym-5)')
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(60, 15, node=0)
        shape.set_property('_gv_ogrfs', 'SYMBOL(c:#FFFF00,s:3,id:ogr-sym-6)')
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(60, 30, 35, node=0)
        shape.set_property('_gv_ogrfs', 'SYMBOL(c:#FFFF00,s:3,id:ogr-sym-7)')
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(75, 15, node=0)
        shape.set_property('_gv_ogrfs', 'SYMBOL(c:#FFFF00,s:3,id:ogr-sym-8)')
        shapes.append(shape)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(75, 30, node=0)
        shape.set_property('_gv_ogrfs', 'SYMBOL(c:#FFFF00,s:3,id:ogr-sym-9)')
        shapes.append(shape)

        layer = gview.GvShapesLayer(shapes)
        layer.set_name('test')
        self.view.add_layer(layer)
        self.view.set_active_layer(layer)

        self.view.fit_extents(0, 0, 100, 100)
Пример #39
0
def SimpleReferenceGrid(min_x,
                        min_y,
                        max_x,
                        max_y,
                        x_divisions,
                        y_divisions,
                        color=(0.5, 1.0, 0.5, 1.0),
                        xoff=-0.15,
                        yoff=-0.04,
                        label_type=None,
                        shapes_name="Grid"):
    """ Create a reference grid for an unprojected raster.
        min_x, min_y- minimum lat/longs, in decimal degrees
        max_x, max_y- minimum lat/longs, in decimal degrees
        x_divisions- number of divisions in horizontal direction
        y_divisions- number of divisions in vertical direction
        xoff- horizontal offset of vertical labels, as a fraction
              of max_x-min_x.  Offset is relative to min_x.
        yoff- vertical offset of horizontal labels, as a fraction
              of max_y-min_y.  Offset is relative to min_y.
        color- start color for the grid
        label_type- not used yet; might be later for formatting.

    """

    shps = gview.GvShapes(name=shapes_name)
    gview.undo_register(shps)
    shps.add_field('position', 'string', 20)

    if os.name == 'nt':
        font = "-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*"
    else:
        #font="-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*"
        #font="-urw-helvetica-medium-r-normal-*-9-*-*-*-p-*-iso8859-2"
        font = "-adobe-helvetica-medium-r-normal-*-8-*-*-*-p-*-iso10646-1"
        #font="-misc-fixed-medium-r-*-*-9-*-*-*-*-*-*-*"

    lxoff = (max_x - min_x) * xoff  # horizontal label placement
    lyoff = (max_y - min_y) * yoff  # vertical label placement

    hspc = (max_x - min_x) / x_divisions
    vspc = (max_y - min_y) / y_divisions

    for hval in Numeric.arange(min_x, max_x + hspc / 100.0, hspc):
        nshp = gview.GvShape(type=gview.GVSHAPE_LINE)
        nshp.set_node(hval, max_y, 0, 0)
        nshp.set_node(hval, min_y, 0, 1)
        shps.append(nshp)
        pshp = gview.GvShape(type=gview.GVSHAPE_POINT)
        pshp.set_node(hval, min_y + lyoff)
        pshp.set_property('position', "%.1f" % hval)
        shps.append(pshp)

    for vval in Numeric.arange(min_y, max_y + vspc / 100.0, vspc):
        nshp = gview.GvShape(type=gview.GVSHAPE_LINE)
        nshp.set_node(min_x, vval, 0, 0)
        nshp.set_node(max_x, vval, 0, 1)
        shps.append(nshp)
        pshp = gview.GvShape(type=gview.GVSHAPE_POINT)
        pshp.set_node(min_x + lxoff, vval)
        pshp.set_property('position', "%.1f" % vval)
        shps.append(pshp)

    cstr = gvogrfs.gv_to_ogr_color(color)
    if len(cstr) < 9:
        cstr = cstr + "FF"
    clstr = str(color[0]) + ' ' + str(color[1]) + ' ' + str(
        color[2]) + ' ' + str(color[3])

    layer = gview.GvShapesLayer(shps)
    layer.set_property('_line_color', clstr)
    layer.set_property('_point_color', clstr)
    # Set antialias property so that lines look nice
    # when rotated.
    layer.set_property('_gl_antialias', '1')
    layer.set_property('_gv_ogrfs_point',
                       'LABEL(t:{position},f:"' + font + '",c:' + cstr + ')')
    layer.set_read_only(gtk.TRUE)

    return layer
Пример #40
0
    def raster_symbol(self):
        self.set_step_name('Raster Symbol Test')
        self.set_text('A red symbol (the busy indicator from thet toolbar)\n' +
                      'should be shown.  When zooming in or out it should\n' +
                      'remain the same size on screen.\n' + '' +
                      'NOTE: This symbols should really be green but it\n' +
                      'seems that currently the color attribute of\n' +
                      'SYMBOL directives for raster symbols is ignored\n' +
                      '\n' + '\n' + '')

        shapes = gview.GvShapes()
        gview.undo_register(shapes)
        layer = gview.GvShapesLayer(shapes)
        layer.set_name('test')

        if os.name == "nt":
            sym_file = gview.home_dir + '\\pics\\busy.xpm'
            sym_file2 = gview.home_dir + '\\pics\\idle.xpm'
            sym_name = '\\three_idle'
        else:
            sym_file = gview.home_dir + '/pics/busy.xpm'
            sym_file2 = gview.home_dir + '/pics/idle.xpm'
            sym_name = '/three_idle'

        # Unoffset icon
        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(20, 50, node=0)
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#00FF00,id:"' + sym_file + '")')
        shapes.append(shape)

        # Pixel Offset
        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(20, 50, node=0)
        shape.set_property(
            '_gv_ogrfs',
            'SYMBOL(c:#00FF00,dx:30px,dy:-10px,id:"' + sym_file + '")')
        shapes.append(shape)

        # Geo Offset
        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(20, 50, node=0)
        shape.set_property(
            '_gv_ogrfs',
            'SYMBOL(c:#00FF00,dx:30g,dy:-30g,id:"' + sym_file + '")')
        shapes.append(shape)

        # Inject a vector icon symbol that consists of three raster symbols,
        # but do it on the vector layer.

        sm = layer.get_symbol_manager(1)

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(0.0, 0, node=0)
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(dy:-10px,dx:-40px,id:"' + sym_file2 + '");' + \
                           'SYMBOL(id:"' + sym_file2 + '");' + \
                           'SYMBOL(dy:10px,dx:40px,id:"' + sym_file2 + '")' )

        sm.inject_vector_symbol(sym_name, shape)

        # Place the "3" idle symbol.

        shape = gview.GvShape(type=gview.GVSHAPE_POINT)
        shape.set_node(60, 50, node=0)
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#00FF00,id:"' + sym_name + '")')
        shapes.append(shape)

        # Add line for context.
        shape = gview.GvShape(type=gview.GVSHAPE_LINE)
        shape.set_node(10, 10, node=0)
        shape.set_node(80, 10, node=1)
        shape.set_node(80, 90, node=2)
        shape.set_node(50, 80, node=3)
        shape.set_node(10, 90, node=4)
        shapes.append(shape)

        self.view.add_layer(layer)
        self.view.set_active_layer(layer)

        self.view.fit_extents(0, 0, 100, 100)
Пример #41
0
    def size_symbols( self ):
        self.set_step_name( 'Military Size Symbols' )
        self.set_text( \
            'Here you will see each of the size designators for various sizes\n'
            + 'of military symbols\n' )

        shapes = gview.GvShapes()
        gview.undo_register( shapes)

        sm = gview.GvSymbolManager()
        
        #symbol_size * base_size * 2 define the size of the symbol on screen.
        base_size = 1.0
        symbol_size = 3.0 
        
        #the number of pixels wide to make the task force indicator
        tf_offset = ( symbol_size * base_size * 2 ) + 2 
        symbol_offset = tf_offset
                           
        #create the circle symbol as a multiline with n points
        import math
        circle = gview.GvShape( type=gview.GVSHAPE_LINE )
        filled_circle = gview.GvShape( type=gview.GVSHAPE_AREA )
        n = 8
        radius = base_size
        for i in range( n + 1 ):
            angle = (float(i)*(360.0/float(n))) / (180.0/math.pi)
            x = math.sin( angle ) * radius
            y = math.cos( angle ) * radius
            circle.add_node( x, y, 0.0 )
            filled_circle.add_node( x, y, 0.0 )
        circle.set_property( "_gv_ogrfs", "PEN(w:1)" )
        filled_circle.set_property( "_gv_ogrfs", "PEN(w:1);BRUSH()" )
        sm.inject_vector_symbol( "%scircle" % os.sep, circle )
        sm.inject_vector_symbol( "%sfilled_circle" % os.sep, filled_circle)
        
        #create a vertical bar symbol
        shape = gview.GvShape(type=gview.GVSHAPE_LINE )
        shape.add_node( 0.0, -base_size, 0.0 )
        shape.add_node( 0.0, base_size, 0.0 )
        shape.set_property( "_gv_ogrfs", "PEN(w:1)" )
        sm.inject_vector_symbol( "%svertical_bar" % os.sep, shape )

        #now create a cross from rotated vertical bars
        shape = gview.GvShape(type=gview.GVSHAPE_LINE )
        shape.add_node( -base_size, -base_size, 0.0 )
        shape.add_node( base_size, base_size, 0.0 )
        shape.set_property( "_gv_ogrfs", "PEN(w:1)" )
        sm.inject_vector_symbol( "%sline_45" % os.sep, shape )

        shape = gview.GvShape(type=gview.GVSHAPE_LINE )
        shape.add_node( -base_size, base_size, 0.0 )
        shape.add_node( base_size, -base_size, 0.0 )
        shape.set_property( "_gv_ogrfs", "PEN(w:1)" )
        sm.inject_vector_symbol( "%sline_315" % os.sep, shape )
        
        shape = gview.GvShape(type=gview.GVSHAPE_POINT )
        shape.add_node( 0.0, 0.0, 0.0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(id:%sline_45);SYMBOL(id:%sline_315)" % ( os.sep, os.sep ) )
        sm.inject_vector_symbol( "%scross" % os.sep, shape )

        #taskforce 1
        shape = self.create_taskforce_indicator( 1, symbol_size * base_size, tf_offset )
        sm.inject_vector_symbol( "%stf_1" % os.sep, shape )
        
        #taskforce 2
        shape = self.create_taskforce_indicator( 2, symbol_size * base_size, tf_offset )
        sm.inject_vector_symbol( "%stf_2" % os.sep, shape )

        #taskforce 3
        shape = self.create_taskforce_indicator( 3, symbol_size * base_size, tf_offset )
        sm.inject_vector_symbol( "%stf_3" % os.sep, shape )

        #taskforce 4
        shape = self.create_taskforce_indicator( 4, symbol_size * base_size, tf_offset )
        sm.inject_vector_symbol( "%stf_4" % os.sep, shape )

        #taskforce 5
        shape = self.create_taskforce_indicator( 5, symbol_size * base_size, tf_offset )
        sm.inject_vector_symbol( "%stf_5" % os.sep, shape )
        
        #taskforce 6
        shape = self.create_taskforce_indicator( 6, symbol_size * base_size, tf_offset )
        sm.inject_vector_symbol( "%stf_6" % os.sep, shape )
        

        #team symbol
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 0.0, 0.0, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(id:%scircle,s:%s);SYMBOL(id:%sline_45,s:%s)" % (os.sep, symbol_size, os.sep, symbol_size) )
        sm.inject_vector_symbol( "%steam" % os.sep, shape )
        
        #squad symbol
        shape = self.create_size_indicator( "filled_circle", 1, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%ssquad" % os.sep, shape )

        #section symbol
        shape = self.create_size_indicator( "filled_circle", 2, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%ssection" % os.sep, shape )

        #platoon symbol
        shape = self.create_size_indicator( "filled_circle", 3, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%splatoon" % os.sep, shape )

        #company symbol
        shape = self.create_size_indicator( "vertical_bar", 1, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%scompany" % os.sep, shape )
        
        #battalion symbol
        shape = self.create_size_indicator( "vertical_bar", 2, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%sbattalion" % os.sep, shape )
        
        #regiment symbol
        shape = self.create_size_indicator( "vertical_bar", 3, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%sregiment" % os.sep, shape )
        
        #brigade symbol
        shape = self.create_size_indicator( "cross", 1, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%sbrigade" % os.sep, shape )

        #division symbol
        shape = self.create_size_indicator( "cross", 2, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%sdivision" % os.sep, shape )
        
        print 'Division:' + shape.get_property('_gv_ogrfs')
        
        #corps symbol
        shape = self.create_size_indicator( "cross", 3, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%scorps" % os.sep, shape )
        
        #army symbol
        shape = self.create_size_indicator( "cross", 4, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%sarmy" % os.sep, shape )
        
        #armygroup symbol
        shape = self.create_size_indicator( "cross", 5, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%sarmygroup" % os.sep, shape )
        
        #region symbol
        shape = self.create_size_indicator( "cross", 6, symbol_size, symbol_offset )
        sm.inject_vector_symbol( "%sregion" % os.sep, shape )
        
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 10, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"team\")" ) 
        shapes.append( shape )
        
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 10, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%steam)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 10, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%steam);SYMBOL(c:#00FFFF,id:%stf_1" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 15, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"squad\")" ) 
        shapes.append( shape )
        
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 15, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%ssquad)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 15, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%ssquad);SYMBOL(c:#00FFFF,id:%stf_1" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 20, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"section\")" ) 
        shapes.append( shape )
        
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 20, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%ssection)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 20, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%ssection);SYMBOL(c:#00FFFF,id:%stf_2" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 25, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"platoon\")" ) 
        shapes.append( shape )
        
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 25, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%splatoon)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 25, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%splatoon);SYMBOL(c:#00FFFF,id:%stf_3" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 30, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"company\")" ) 
        shapes.append( shape )
        
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 30, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%scompany)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 30, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%scompany);SYMBOL(c:#00FFFF,id:%stf_1" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 35, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"battalion\")" ) 
        shapes.append( shape )
        
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 35, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sbattalion)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 35, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sbattalion);SYMBOL(c:#00FFFF,id:%stf_2" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 40, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"regiment\")" ) 
        shapes.append( shape )
        
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 40, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sregiment)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 40, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sregiment);SYMBOL(c:#00FFFF,id:%stf_3" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 45, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"brigade\")" ) 
        shapes.append( shape )
        
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 45, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sbrigade)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 45, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sbrigade);SYMBOL(c:#00FFFF,id:%stf_1" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 50, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"division\")") 
        shapes.append( shape )
        
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 50, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sdivision)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 50, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sdivision);SYMBOL(c:#00FFFF,id:%stf_2" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 55, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"corps\")" ) 
        shapes.append( shape )
        
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 55, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%scorps)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 55, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%scorps);SYMBOL(c:#00FFFF,id:%stf_3" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 60, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"army\")" ) 
        shapes.append( shape )
        
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 60, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sarmy)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 60, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sarmy);SYMBOL(c:#00FFFF,id:%stf_4" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 65, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"armygroup\")" ) 
        shapes.append( shape )
        
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 65, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sarmygroup)" % os.sep ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 65, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sarmygroup);SYMBOL(c:#00FFFF,id:%stf_5" % (os.sep,os.sep) ) 
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 10, 70, node=0 )
        shape.set_property( "_gv_ogrfs", "LABEL(c:#00FFFF,t:\"region\")" ) 
        shapes.append( shape )
        
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 30, 70, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sregion)" % os.sep ) 
        shapes.append( shape )
        
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 70, node=0 )
        shape.set_property( "_gv_ogrfs", "SYMBOL(c:#00FFFF,id:%sregion);SYMBOL(c:#00FFFF,id:%stf_6" % (os.sep,os.sep) ) 
        shapes.append( shape )

        # Create the layer and display

        #turn off display lists for now.
        #gview.set_preference('display_lists', "OFF" )
        
        layer = gview.GvShapesLayer( shapes )
        layer.set_name( 'test' )
        layer.set_property( "_gl_antialias", "1" )
        self.view.add_layer( layer )
        self.view.set_active_layer( layer )

        self.view.fit_extents( 0, 0, 100, 100 )
Пример #42
0
    def ogrfs_labels( self ):
        self.set_step_name( 'OGRFS Labels' )
        self.set_text( \
            'At the top of the screen should be two labels (red and blue)\n'
            + 'The red label has a halo effect.  The blue label has a drop\n'
            + 'shadow effect\n'
            + '\n'
            + 'In the middle of the screen should be four labels (red and\n'
            + 'yellow).  They have different anchor positions, and should\n'
            + 'be arrayed around a center reference point (not shown).\n'
            + 'The labels indicate where they should be (ie. TOP_LEFT should\n'
            + 'be to the top, and right of the center point).\n'
            + '\n'
            + 'In the lower left quadrant is a yellow "PIXEL_OFFSET" label\n'
            + 'that should be right and down of the white reference point.\n'
            + 'The offset is in screen pixels, so as you zoom it should\n'
            + 'remain a constant distance away from the reference point.\n'
            + '\n'
            + 'In the bottom right quadrant is a similar situation but\n'
            + 'the GEO_OFFSET label is offset in georeference coordinates\n'
            + 'so it will move closer to the ref point as you zoom out, and\n'
            + 'further from it as you zoom in.\n'
            + '\n'
            + 'All labels should be selectable and manipulatable.  When\n'
            + 'selected they should have a selection box around them.\n'
            + '\n' )

        shapes = gview.GvShapes()
        gview.undo_register( shapes)

        # Test anchors.

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 50, node=0 )
        shape.set_property('_gv_ogrfs',
                           'LABEL(c:#FFFF00,t:"TOP_RIGHT")' )
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 50, node=0 )
        shape.set_property('_gv_ogrfs',
                           'LABEL(c:#FF0000,p:7,t:"BOTTOM_RIGHT")' )
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 50, node=0 )
        shape.set_property('_gv_ogrfs',
                           'LABEL(c:#FFFF00,p:9,t:"BOTTOM_LEFT")' )
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 50, node=0 )
        shape.set_property('_gv_ogrfs',
                           'LABEL(c:#FF0000,p:3,t:"TOP_LEFT")' )
        shapes.append( shape )

        # more anchor tests
        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 35, node=0 )
        shape.set_property('_gv_ogrfs',
                           'LABEL(c:#00FF00,p:2,t:"TOP_CENTER");' + \
	                   'SYMBOL(id:ogr-sym-0)' )
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 43, node=0 )
        shape.set_property('_gv_ogrfs',
                           'LABEL(c:#00FF00,p:5,t:"CENTER_CENTER");' + \
	                   'SYMBOL(id:ogr-sym-0)' )
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 35, node=0 )
        shape.set_property('_gv_ogrfs',
                           'LABEL(c:#00FF00,p:8,t:"BOTTOM_CENTER");' + \
	                   'SYMBOL(id:ogr-sym-0)' )
        shapes.append( shape )

        # Test geographic and pixel offsets.

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 25, 25, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FFFFFF,s:2,id:ogr-sym-0)' )
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 25, 25, node=0 )
        shape.set_property('_gv_ogrfs',
                           'LABEL(c:#FFFF00,dx:20px,dy:10px,t:"PIXEL_OFFSET")')
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 60, 25, node=0 )
        shape.set_property('_gv_ogrfs',
                           'SYMBOL(c:#FFFFFF,s:2,id:ogr-sym-0)' )
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 60, 25, node=0 )
        shape.set_property('_gv_ogrfs',
                           'LABEL(c:#FFFF00,dx:6g,dy:3g,t:"GEO_OFFSET")')
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 75, node=0 )
        shape.set_property('_gv_ogrfs',
                           'LABEL(c:#00FF00,b:#339933,t:"Text with shadow",sh:)')
        shapes.append( shape )

        shape = gview.GvShape( type = gview.GVSHAPE_POINT )
        shape.set_node( 50, 80, node=0 )
        shape.set_property('_gv_ogrfs',
                           'LABEL(c:#FF0000,b:#993333,t:"Text with halo",h:)')
        shapes.append( shape )


        layer = gview.GvShapesLayer( shapes )
        layer.set_name( 'test' )
        self.view.add_layer( layer )
        self.view.set_active_layer( layer )

        self.view.fit_extents( 0, 0, 100, 100 )
Пример #43
0
    def execute(self, args, line, interp):
        import gdalnumeric
        import gview

        data = args[0][0]
        dataname = args[0][1]
        if data is None:
            interp.showText('No input variable supplied', 'error')
            return 0

        ncswitch = args[1]
        vswitch = args[2]

        if vswitch == 0:
            import gview
            win = gview.app.new_view()
            if gview.app.shell.standalone == 1:
                item = win.menuf.find('File/Exit')
                if item is not None:
                    item.hide()
                item = win.menuf.find('File/New View')
                if item is not None:
                    item.hide()
                item = win.menuf.find('File/Save Project')
                if item is not None:
                    item.hide()

        import Numeric
        if type(data) == type(Numeric.zeros([1, 1])):
            if ncswitch == 0:
                # By default, display a copy of the
                # data rather than the original
                import copy
                if len(Numeric.shape(data)) == 1:
                    # reshape 1x1 arrays so they can be
                    # displayed.
                    newdata = Numeric.reshape(data,
                                              (1, Numeric.shape(data)[0]))
                else:
                    newdata = copy.deepcopy(data)
            else:
                if len(Numeric.shape(data)) == 1:
                    txt = 'Vectors for display must have dimensions Nx1 or 1xN,\n'
                    txt = txt + 'not N.  Either reshape the array, or turn off the nocopy\nswitch '
                    txt = txt + 'so that show is permitted to reshape it for you.'
                    interp.showText(txt, 'error')
                    return 0

                newdata = data

            try:
                # Only array data should get to here
                array_name = gdalnumeric.GetArrayFilename(newdata)
                ds = gview.manager.get_dataset(array_name)
                #if prototype_name is not None:
                #    prototype_ds = gdal.Open( prototype_name )
                #    gdalnumeric.CopyDatasetInfo( prototype_ds, ds )

                gview.app.file_open_by_name(array_name)
                return 1
            except:
                interp.showText('Unable to open array.', 'error')
                return 0

        elif type(data) == type(gview.GvShapes()):

            cview = gview.app.sel_manager.get_active_view_window()
            cview.make_active()

            # Get an okay layer name
            layer_list = cview.viewarea.list_layers()
            layer_map = {}
            for clayer in layer_list:
                layer_map[clayer.get_name()] = clayer
            counter = 0

            name = dataname
            while layer_map.has_key(name):
                counter = counter + 1
                name = dataname + '_' + str(counter)

            if ncswitch == 0:
                newdata = gview.GvShapes()
                for item in data.get_schema():
                    newdata.add_field(item[0], item[1], item[2], item[3])
                for shp in data:
                    if shp is not None:
                        newdata.append(shp.copy())
            else:
                newdata = data

            newdata.set_name(name)
            gview.undo_register(newdata)
            layer = gview.GvShapesLayer(newdata)
            cview.viewarea.add_layer(layer)
            return 1
        else:
            interp.showText('Unable to recognize input data type.', 'error')
            return 0