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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2734 - (show annotations)
Thu Mar 1 12:42:59 2007 UTC (18 years ago) by bramz
File MIME type: text/x-python
File size: 8901 byte(s)
made a copy
1 # Copyright (c) 2004,2006 by Intevation GmbH vim:encoding=latin-1:
2 # Authors:
3 # Nina Hüffmeyer <[email protected]>
4 #
5 # This program is free software under the GPL (>=v2)
6 # Read the file COPYING coming with Thuban for details.
7
8 __version__ = "$Revision$"
9 # $Source$
10 # $Id$
11
12 # Needed wx.-toolkit classes
13 import wx
14
15 # We need os.path
16 import os
17
18 # use _() already now for all strings that may later be translated
19 from Thuban import _
20
21 from Thuban.Model.layer import Layer
22
23 # Import ogr related classes
24 from Extensions.ogr import ogrshapes, ogrdialog
25 from Extensions.ogr.ogrdialog import ChooseOGRDBTableDialog
26
27 from Thuban.UI.menu import Menu
28 from Thuban.UI.mainwindow import _has_dbconnections, _has_gdal_support
29
30 def open_with_ogr(context):
31 '''Open a file supported by ogr.
32 '''
33 canvas = context.mainwindow.canvas
34 map = canvas.Map()
35
36 # Get the file to be opened
37 dlg = wx.FileDialog(canvas, _("Select a data file"),
38 context.application.Path("data"), "",
39 _("Shapefiles (*.shp)") + "|*.shp|" +
40 _("GML files (*.gml)") + "|*.gml|" +
41 _("MapInfo files (*.tab)") + "|*.tab|" +
42 _("DGN files (*.dgn)") + "|*.dgn|" +
43 _("CSV files (*.csv)") + "|*.csv|" +
44 _("All Files (*.*)") + "|*.*|",
45 wx.OPEN | wx.MULTIPLE)
46
47 if dlg.ShowModal() == wx.ID_OK:
48 filenames = dlg.GetPaths()
49 for filename in filenames:
50 title = os.path.splitext(os.path.basename(filename))[0]
51 has_layers = map.HasLayers()
52 layerDlg = ogrdialog.ChooseLayer(canvas, filename)
53 if layerDlg.ShowModal() == wx.ID_OK:
54 layername = layerDlg.GetLayer()
55 try:
56 session = context.application.Session()
57 store = OpenFileShapestore(context.mainwindow, session,
58 filename, layername)
59 session.AddShapeStore(store)
60 except:
61 # the layer couldn't be opened
62 context.mainwindow.RunMessageBox(_("Add Layer"),
63 _("Can't open the file '%s'.") % filename)
64 else:
65 if store is not None:
66 layer = Layer(title, store)
67 map.AddLayer(layer)
68 if not has_layers:
69 # if we're adding a layer to an empty map, fit the
70 # new map to the window
71 canvas.FitMapToWindow()
72 context.application.SetPath("data",filename)
73 dlg.Destroy()
74
75 def select_file_format(context):
76 ''' Display all available supported formats.
77 '''
78
79 canvas = context.mainwindow.canvas
80 file = None
81 map = canvas.Map()
82
83 session = context.application.Session()
84
85 dlg = ogrdialog.ChooseFileFormat(canvas, session)
86
87 if dlg.ShowModal() == wx.ID_OK:
88 pass
89 dlg.Destroy()
90
91 def open_db(context):
92 ''' Open a table in a database as a layer.
93 '''
94
95 canvas = context.mainwindow.canvas
96 map = canvas.Map()
97
98 session = context.application.Session()
99 dlg = ChooseOGRDBTableDialog(canvas, session)
100
101 if dlg.ShowModal() == wx.ID_OK:
102 dbconn, connString, dbtable, id_column = dlg.GetTable()
103 try:
104 store = OpenDBShapestore(session, dbconn, dbtable, id_column,
105 None)
106 session.AddShapeStore(store)
107
108 layer = Layer(dbtable, store)
109
110 has_layers = map.HasLayers()
111 map.AddLayer(layer)
112 if not has_layers:
113 canvas.FitMapToWindow()
114 except:
115 # Some error occured while initializing the layer
116 context.mainwindow.RunMessageBox(_("Add Layer from database"),
117 _("Can't open the database table '%s'")
118 % dbtable)
119 dlg.Destroy()
120
121 def open_OGRConnection(context):
122 """Open a datasource with an OGRConnection string."""
123 canvas = context.mainwindow.canvas
124 map = canvas.Map()
125
126 session = context.application.Session()
127 dlg = ogrdialog.OGRConnectionDialog(canvas, session)
128
129 if dlg.ShowModal() == wx.ID_OK:
130 dsname = dlg.GetDatasourceName()
131
132 layerDlg = ogrdialog.ChooseLayer(canvas, dsname)
133 if layerDlg.ShowModal() == wx.ID_OK:
134 layername = layerDlg.GetLayer()
135 try:
136 store = ogrshapes.OGRShapeStore(session, dsname, layername)
137 session.AddShapeStore(store)
138 except:
139 # the layer couldn't be opened
140 context.mainwindow.RunMessageBox(("Add Layer"),
141 ("Can't open the file '%s'.") % dsname)
142 else:
143 layer = Layer(dsname, store)
144 has_layers = map.HasLayers()
145 map.AddLayer(layer)
146 if not has_layers:
147 # if we're adding a layer to an empty map, fit the
148 # new map to the window
149 canvas.FitMapToWindow()
150 dlg.Destroy()
151
152 def OpenFileShapestore(mainwindow, session, filename, layername):
153 """Open a datasource and add the required layer.
154 """
155 try:
156 store = ogrshapes.OGRFileShapeStore(session, filename, layername)
157 return store
158 except:
159 # Some error occured while initializing the layer
160 mainwindow.RunMessageBox(_("Open datasource"),
161 _("Can't open the datasource '%s'")
162 % filename)
163 return None
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
193 # instance registry.
194 from Thuban.UI.command import registry, Command
195
196 # The instance of the main menu of the Thuban application
197 # See Thuban/UI/menu.py for the API of the Menu class
198 from Thuban.UI.mainwindow import main_menu
199
200
201 # find the map menu (create a new if not found)
202 #map_menu = main_menu.FindOrInsertMenu('map', _('Map'))
203 #ogr_menu = Menu("ogr", _("Open layer via OGR"),[])
204 # as long as there we are not stable, better add to "Extentions" marked "beta"
205 map_menu = main_menu.FindOrInsertMenu('extensions', _('E&xtensions'))
206 ogr_menu = Menu("ogr", _("(testing) Open layer via OGR"),[])
207
208
209 ogrsupport = ogrshapes.has_ogr_support()
210
211 # create new commands and register them
212 registry.Add(Command('open_ogr_files', 'Open an ogr-file', open_with_ogr,
213 sensitive = _has_gdal_support,
214 helptext = 'Open a file supported from ogr'))
215
216 #registry.Add(Command('select_file_format', 'Select a file format',
217 # select_file_format,
218 # helptext = "Select a file format supported from ogr"))
219
220 registry.Add(Command('open_db', 'Open a layer from a database',
221 open_db,
222 sensitive = _has_dbconnections,
223 helptext = "Open a layer from a database, e.g. PostGIS"))
224
225 registry.Add(Command('open_OGRConnection',
226 ("Open a datasource with an OGRConnection string"),
227 open_OGRConnection,
228 sensitive = _has_gdal_support, helptext =
229 "Open a datasource with an OGRConnection string"))
230
231 # finally bind the new command with an entry in the extensions menu
232 ogr_menu.InsertItem("open_ogr_files")
233 #ogr_menu.InsertItem('select_file_format')
234 ogr_menu.InsertItem('open_db')
235 ogr_menu.InsertItem('open_OGRConnection')
236
237 # Add ogr menu to map menu
238 map_menu.InsertItem(ogr_menu, after = "rasterlayer_add")

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26