1 |
# Copyright (C) 2001, 2002 by Intevation GmbH |
# Copyright (C) 2001, 2002, 2003 by Intevation GmbH |
2 |
# Authors: |
# Authors: |
3 |
# Jan-Oliver Wagner <[email protected]> |
# Jan-Oliver Wagner <[email protected]> |
4 |
# Bernhard Herzog <[email protected]> |
# Bernhard Herzog <[email protected]> |
13 |
|
|
14 |
__version__ = "$Revision$" |
__version__ = "$Revision$" |
15 |
|
|
16 |
import sys, string, os |
import string, os |
17 |
|
|
18 |
import xml.sax |
import xml.sax |
19 |
import xml.sax.handler |
import xml.sax.handler |
76 |
|
|
77 |
def __init__(self): |
def __init__(self): |
78 |
self.chars = '' |
self.chars = '' |
|
self.__parser = None |
|
79 |
self.__directory = "" |
self.__directory = "" |
80 |
self.__dispatchers = {} |
self.__dispatchers = {} |
81 |
|
|
90 |
self.__directory = os.path.dirname(filename) |
self.__directory = os.path.dirname(filename) |
91 |
self.__file = open(filename) |
self.__file = open(filename) |
92 |
|
|
93 |
if self.__parser is None: |
parser = make_parser() |
94 |
self.__parser = make_parser() |
parser.setContentHandler(self) |
95 |
self.__parser.setContentHandler(self) |
parser.setErrorHandler(ErrorHandler()) |
96 |
self.__parser.setErrorHandler(ErrorHandler()) |
parser.setFeature(xml.sax.handler.feature_namespaces, 1) |
97 |
self.__parser.setFeature(xml.sax.handler.feature_namespaces, 1) |
|
98 |
|
# |
99 |
# |
# Well, this isn't pretty, but it appears that if you |
100 |
# Well, this isn't pretty, but it appears that if you |
# use Python 2.2 without the site-package _xmlplus then |
101 |
# use Python 2.2 without the site-package _xmlplus then |
# the following will fail, and without them it will work. |
102 |
# the following will fail, and without them it will work. |
# However, if you do have the site-package and you don't |
103 |
# However, if you do have the site-package and you don't |
# call these functions, the reader raises an exception |
104 |
# call these functions, the reader raises an exception |
# |
105 |
# |
# The reason we set these to 0 in the first place is |
106 |
# The reason we set these to 0 in the first place is |
# because there is an unresolved issue with external |
107 |
# because there is an unresolved issue with external |
# entities causing an exception in the reader |
108 |
# entities causing an exception in the reader |
# |
109 |
# |
try: |
110 |
try: |
parser.setFeature(xml.sax.handler.feature_validation,0) |
111 |
self.__parser.setFeature(xml.sax.handler.feature_validation,0) |
parser.setFeature(xml.sax.handler.feature_external_ges,0) |
112 |
self.__parser.setFeature(xml.sax.handler.feature_external_ges,0) |
parser.setFeature(xml.sax.handler.feature_external_pes,0) |
113 |
self.__parser.setFeature(xml.sax.handler.feature_external_pes,0) |
except SAXNotRecognizedException: |
114 |
except SAXNotRecognizedException: |
pass |
|
pass |
|
115 |
|
|
116 |
self.__parser.parse(self.__file) |
parser.parse(self.__file) |
117 |
|
|
118 |
self.close() |
self.close() |
119 |
|
|
120 |
def close(self): |
def close(self): |
121 |
self.__file.close() |
self.__file.close() |
122 |
|
|
123 |
def GetFileName(self): |
def GetFilename(self): |
124 |
if hasattr(self.__file, "name"): |
if hasattr(self.__file, "name"): |
125 |
return self.__file.name |
return self.__file.name |
126 |
|
|
199 |
def start_map(self, name, qname, attrs): |
def start_map(self, name, qname, attrs): |
200 |
"""Start a map.""" |
"""Start a map.""" |
201 |
self.aMap = Map(attrs.get((None, 'title'), None)) |
self.aMap = Map(attrs.get((None, 'title'), None)) |
202 |
|
self.__projReceiver = self.aMap |
203 |
|
|
204 |
def end_map(self, name, qname): |
def end_map(self, name, qname): |
205 |
self.theSession.AddMap(self.aMap) |
self.theSession.AddMap(self.aMap) |
206 |
|
self.__projReceiver = None |
207 |
|
|
208 |
def start_projection(self, name, qname, attrs): |
def start_projection(self, name, qname, attrs): |
209 |
|
self.ProjectionName = attrs.get((None, 'name'), None) |
210 |
self.ProjectionParams = [ ] |
self.ProjectionParams = [ ] |
211 |
|
|
212 |
def end_projection(self, name, qname): |
def end_projection(self, name, qname): |
213 |
self.aMap.SetProjection(Projection(self.ProjectionParams)) |
self.__projReceiver.SetProjection( |
214 |
|
Projection(self.ProjectionParams, self.ProjectionName)) |
215 |
|
|
216 |
def start_parameter(self, name, qname, attrs): |
def start_parameter(self, name, qname, attrs): |
217 |
s = attrs.get((None, 'value')) |
s = attrs.get((None, 'value')) |
228 |
title = attrs.get((None, 'title'), "") |
title = attrs.get((None, 'title'), "") |
229 |
filename = attrs.get((None, 'filename'), "") |
filename = attrs.get((None, 'filename'), "") |
230 |
filename = os.path.join(self.GetDirectory(), filename) |
filename = os.path.join(self.GetDirectory(), filename) |
231 |
|
visible = attrs.get((None, 'visible'), "true") |
232 |
fill = parse_color(attrs.get((None, 'fill'), "None")) |
fill = parse_color(attrs.get((None, 'fill'), "None")) |
233 |
stroke = parse_color(attrs.get((None, 'stroke'), "#000000")) |
stroke = parse_color(attrs.get((None, 'stroke'), "#000000")) |
234 |
stroke_width = int(attrs.get((None, 'stroke_width'), "1")) |
stroke_width = int(attrs.get((None, 'stroke_width'), "1")) |
235 |
self.aLayer = layer_class(title, filename, fill = fill, |
self.aLayer = layer_class(title, |
236 |
stroke = stroke, lineWidth = stroke_width) |
self.theSession.OpenShapefile(filename), |
237 |
|
fill = fill, stroke = stroke, |
238 |
|
lineWidth = stroke_width, |
239 |
|
visible = visible != "false") |
240 |
|
|
241 |
|
self.__projReceiver = self.aLayer |
242 |
|
|
243 |
def end_layer(self, name, qname): |
def end_layer(self, name, qname): |
244 |
self.aMap.AddLayer(self.aLayer) |
self.aMap.AddLayer(self.aLayer) |
245 |
|
self.__projReceiver = None |
246 |
|
|
247 |
def start_classification(self, name, qname, attrs): |
def start_classification(self, name, qname, attrs): |
248 |
field = attrs.get((None, 'field'), None) |
field = attrs.get((None, 'field'), None) |