/[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 2577 - (show annotations)
Fri Mar 4 15:07:59 2005 UTC (20 years ago) by nhueffme
Original Path: trunk/thuban/Extensions/ogr/ogrstart.py
File MIME type: text/x-python
File size: 8634 byte(s)
Latest changes on OGR extension.

Added another menu item to open OGR datasource, handling of geometry collections
possible.

1 # Copyright (c) 2004 by Intevation GmbH
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 from wxPython.wx import wxFileDialog, wxOPEN, wxMULTIPLE, wxID_OK
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 = wxFileDialog(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 wxOPEN | wxMULTIPLE)
46
47 if dlg.ShowModal() == wxID_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() == wxID_OK:
54 layername = layerDlg.GetLayer()
55 try:
56 session = context.application.Session()
57 store = OpenFileShapestore(session, filename, layername)
58 session.AddShapeStore(store)
59 except:
60 # the layer couldn't be opened
61 context.mainwindow.RunMessageBox(("Add Layer"),
62 ("Can't open the file '%s'.")%filename)
63 else:
64 if store is not None:
65 layer = Layer(title, store)
66 map.AddLayer(layer)
67 if not has_layers:
68 # if we're adding a layer to an empty map, fit the
69 # new map to the window
70 canvas.FitMapToWindow()
71 context.application.SetPath("data",filename)
72 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
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
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
228 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")

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26