/[thuban]/branches/WIP-pyshapelib-bramz/Extensions/ogr/ogrstart.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/Extensions/ogr/ogrstart.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2435 by nhueffme, Tue Dec 7 16:44:51 2004 UTC revision 2577 by nhueffme, Fri Mar 4 15:07:59 2005 UTC
# Line 10  __version__ = "$Revision$" Line 10  __version__ = "$Revision$"
10  # $Id$  # $Id$
11    
12  # Needed wx-toolkit classes  # Needed wx-toolkit classes
13  from wxPython.wx import wxFileDialog, wxOPEN, wxMULTIPLE, wxID_OK, \  from wxPython.wx import wxFileDialog, wxOPEN, wxMULTIPLE, wxID_OK
         wxOK, wxICON_HAND  
14    
15  # We need os.path  # We need os.path
16  import os  import os
# Line 22  from Thuban import _ Line 21  from Thuban import _
21  from Thuban.Model.layer import Layer  from Thuban.Model.layer import Layer
22    
23  # Import ogr related classes  # Import ogr related classes
24  from Extensions.ogr import ogrshapes  from Extensions.ogr import ogrshapes, ogrdialog
25    from Extensions.ogr.ogrdialog import ChooseOGRDBTableDialog
26    
27  def open_with_ogr(context):  from Thuban.UI.menu import Menu
28          '''Export data depending on the set properties.  from Thuban.UI.mainwindow import _has_dbconnections, _has_gdal_support
29    
30          This is the main export funcation.  def open_with_ogr(context):
31          '''      '''Open a file supported by ogr.
32          canvas = context.mainwindow.canvas      '''
33          file = None      canvas = context.mainwindow.canvas
34          map = canvas.Map()      map = canvas.Map()
35    
36          if hasattr(canvas, "export_path"):      # Get the file to be opened
37                  export_path = canvas.export_path      dlg = wxFileDialog(canvas, _("Select a data file"),
38          else:                             context.application.Path("data"), "",
39                  export_path="."                             _("Shapefiles (*.shp)") + "|*.shp|" +
40          # Get the file to be opened                             _("GML files (*.gml)") + "|*.gml|" +
41          dlg = wxFileDialog(canvas, _("Select a data file"),                             _("MapInfo files (*.tab)") + "|*.tab|" +
42                             export_path, "",                             _("DGN files (*.dgn)") + "|*.dgn|" +
43                             _("Shapefiles (*.shp)") + "|*.shp;*.SHP|" +                             _("CSV files (*.csv)") + "|*.csv|" +
44                             _("All Files (*.*)") + "|*.*",                             _("All Files (*.*)") + "|*.*|",
45                             wxOPEN | wxMULTIPLE)                             wxOPEN | wxMULTIPLE)
46    
47          if dlg.ShowModal() == wxID_OK:      if dlg.ShowModal() == wxID_OK:
48              filenames = dlg.GetPaths()          filenames = dlg.GetPaths()
49              for filename in filenames:          for filename in filenames:
50                  title = os.path.splitext(os.path.basename(filename))[0]              title = os.path.splitext(os.path.basename(filename))[0]
51                  has_layers = map.HasLayers()              has_layers = map.HasLayers()
52                  layername = title              layerDlg = ogrdialog.ChooseLayer(canvas, filename)
53                  try:              if layerDlg.ShowModal() == wxID_OK:
54                      session = context.application.Session()                  layername = layerDlg.GetLayer()
55                      store = ogrshapes.OGRShapeStore(session, filename, layername)                  try:
56                        session = context.application.Session()
57                        store = OpenFileShapestore(session, filename, layername)
58                      session.AddShapeStore(store)                      session.AddShapeStore(store)
59                  except IOError:                  except:
60                      # the layer couldn't be opened                      # the layer couldn't be opened
61                      self.RunMessageBox(_("Add Layer"),                      context.mainwindow.RunMessageBox(("Add Layer"),
62                                         _("Can't open the file '%s'.")%filename)                                  ("Can't open the file '%s'.")%filename)
63                  else:                  else:
64                      layer = Layer(title, store)                      if store is not None:
65                      map.AddLayer(layer)                          layer = Layer(title, store)
66                      if not has_layers:                          map.AddLayer(layer)
67                          # if we're adding a layer to an empty map, fit the                          if not has_layers:
68                          # new map to the window                              # if we're adding a layer to an empty map, fit the
69                          canvas.FitMapToWindow()                              # new map to the window
70                                canvas.FitMapToWindow()
71                      context.application.SetPath("data",filename)                      context.application.SetPath("data",filename)
72          dlg.Destroy()          dlg.Destroy()
73    
74    def select_file_format(context):
75        ''' Display all available supported formats.
76        '''
77    
78        canvas = context.mainwindow.canvas
79        file = None
80        map = canvas.Map()
81    
82        session = context.application.Session()
83    
84        dlg = ogrdialog.ChooseFileFormat(canvas, session)
85    
86        if dlg.ShowModal() == wxID_OK:
87            pass
88        dlg.Destroy()
89    
90    def open_db(context):
91        ''' Open a table in a database as a layer.
92        '''
93    
94        canvas = context.mainwindow.canvas
95        map = canvas.Map()
96    
97        session = context.application.Session()
98        dlg = ChooseOGRDBTableDialog(canvas, session)
99    
100        if dlg.ShowModal() == wxID_OK:
101            dbconn, connString, dbtable, id_column = dlg.GetTable()
102            try:
103                store = OpenDBShapestore(session, dbconn, dbtable, id_column,
104                                                None)
105                session.AddShapeStore(store)
106    
107                layer = Layer(dbtable, store)
108    
109                has_layers = map.HasLayers()
110                map.AddLayer(layer)
111                if not has_layers:
112                    canvas.FitMapToWindow()
113            except:
114                # Some error occured while initializing the layer
115                context.mainwindow.RunMessageBox(_("Add Layer from database"),
116                                   _("Can't open the database table '%s'")
117                                   % dbtable)
118        dlg.Destroy()
119    
120    def open_OGRConnection(context):
121        """Open a datasource with an OGRConnection string."""
122        canvas = context.mainwindow.canvas
123        map = canvas.Map()
124    
125        session = context.application.Session()
126        dlg = ogrdialog.OGRConnectionDialog(canvas, session)
127    
128        if dlg.ShowModal() == wxID_OK:
129            dsname = dlg.GetDatasourceName()
130    
131            layerDlg = ogrdialog.ChooseLayer(canvas, dsname)
132            if layerDlg.ShowModal() == wxID_OK:
133                layername = layerDlg.GetLayer()
134                try:
135                    store = ogrshapes.OGRShapeStore(session, dsname, layername)
136                    session.AddShapeStore(store)
137                except:
138                    # the layer couldn't be opened
139                    context.mainwindow.RunMessageBox(("Add Layer"),
140                                ("Can't open the file '%s'.") % dsname)
141                else:
142                    layer = Layer(dsname, store)
143                    has_layers = map.HasLayers()
144                    map.AddLayer(layer)
145                    if not has_layers:
146                        # if we're adding a layer to an empty map, fit the
147                        # new map to the window
148                        canvas.FitMapToWindow()
149        dlg.Destroy()
150    
151    def OpenFileShapestore(session, filename, layername):
152        """Open a datasource and add the required layer.
153        """
154        try:
155            store = ogrshapes.OGRShapeStore(session, filename, layername)
156            return store
157        except:
158            # Some error occured while initializing the layer
159            context.mainwindow.RunMessageBox(_("Open datasource"),
160                               _("Can't open the datasource '%s'")
161                               % filename)
162        else:
163            return null
164    
165    def OpenDBShapestore(session, dbconn, layername, id_column, geo_column):
166        """Open a datasource and add the required layer.
167    
168        dbconn     - shold be a DBConnection
169        layername  - the name of the table which should opened as layer
170        id_column  - the column name which should be used as ID column
171        geo_column - always None for ogr
172        """
173        try:
174            filename = "PG: dbname=%s" %dbconn.dbname
175            if dbconn.host is not "":
176                filename = filename + " host=%s" % dbconn.host
177            if dbconn.user is not "":
178                filename = filename + " user=%s" % dbconn.user
179            if dbconn.password is not "":
180                filename = filename + " password=%s" % dbconn.password
181            if dbconn.port is not "":
182                filename = filename + " port=%s" % dbconn.port
183            store = ogrshapes.OGRShapeStore(session, filename, layername,
184                                            id_column = id_column)
185            return store
186        except:
187            # Some error occured while initializing the layer
188            context.mainwindow.RunMessageBox(_("Open datasource"),
189                               _("Can't open the datasource '%s'")
190                               % filename)
191    
192  # Thuban has named commands which can be registered in the central  # Thuban has named commands which can be registered in the central
193  # instance registry.  # instance registry.
# Line 78  from Thuban.UI.command import registry, Line 197  from Thuban.UI.command import registry,
197  # See Thuban/UI/menu.py for the API of the Menu class  # See Thuban/UI/menu.py for the API of the Menu class
198  from Thuban.UI.mainwindow import main_menu  from Thuban.UI.mainwindow import main_menu
199    
 # create a new command and register it  
 registry.Add(Command('open_ogr_files', _('Open an ogr-file'), open_with_ogr,  
                      helptext = _('Open a file supported from ogr')))  
200    
201  # find the ogr menu (create it a new if not found)  # find the map menu (create a new if not found)
202  ogr_menu = main_menu.FindOrInsertMenu('ogr', _('OGR'))  map_menu = main_menu.FindOrInsertMenu('map', _('Map'))
203    ogr_menu = Menu("ogr", _("Open layer via OGR"),[])
204    
205    ogrsupport = ogrshapes.has_ogr_support()
206    
207    # create new commands and register them
208    registry.Add(Command('open_ogr_files', 'Open an ogr-file', open_with_ogr,
209                         sensitive = _has_gdal_support,
210                         helptext = 'Open a file supported from ogr'))
211    
212    #registry.Add(Command('select_file_format', 'Select a file format',
213    #                     select_file_format,
214    #                     helptext = "Select a file format supported from ogr"))
215    
216    registry.Add(Command('open_db', 'Open a layer from a database',
217                         open_db,
218                         sensitive = _has_dbconnections,
219                         helptext = "Open a layer from a database, e.g. PostGIS"))
220    
221    registry.Add(Command('open_OGRConnection',
222                         ("Open a datasource with an OGRConnection string"),
223                         open_OGRConnection,
224                         sensitive = _has_gdal_support, helptext =
225                         "Open a datasource with an OGRConnection string"))
226    
227  # finally bind the new command with an entry in the extensions menu  # finally bind the new command with an entry in the extensions menu
228  ogr_menu.InsertItem('open_ogr_files')  ogr_menu.InsertItem("open_ogr_files")
229    #ogr_menu.InsertItem('select_file_format')
230    ogr_menu.InsertItem('open_db')
231    ogr_menu.InsertItem('open_OGRConnection')
232    
233    # Add ogr menu to map menu
234    map_menu.InsertItem(ogr_menu, after = "rasterlayer_add")

Legend:
Removed from v.2435  
changed lines
  Added in v.2577

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26