Skip to content

Commit c84c927

Browse files
author
homann
committedMar 9, 2007
Fix for #519. All values written to map file are now encoded with utf-8, to prevent Python exception
git-svn-id: http://svn.osgeo.org/qgis/branches/Release-0_8_0@6782 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent aa3ad89 commit c84c927

File tree

1 file changed

+50
-50
lines changed

1 file changed

+50
-50
lines changed
 

‎tools/mapserver_export/ms_export.py

Lines changed: 50 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -104,16 +104,16 @@ def writeMapSection(self):
104104
# extents
105105
xmin = self.qgs.getElementsByTagName("xmin")
106106
self.outFile.write(" EXTENT ")
107-
self.outFile.write(xmin[0].childNodes[0].nodeValue.encode())
107+
self.outFile.write(xmin[0].childNodes[0].nodeValue.encode('utf-8'))
108108
self.outFile.write(" ")
109109
ymin = self.qgs.getElementsByTagName("ymin")
110-
self.outFile.write(ymin[0].childNodes[0].nodeValue.encode())
110+
self.outFile.write(ymin[0].childNodes[0].nodeValue.encode('utf-8'))
111111
self.outFile.write(" ")
112112
xmax = self.qgs.getElementsByTagName("xmax")
113-
self.outFile.write(xmax[0].childNodes[0].nodeValue.encode())
113+
self.outFile.write(xmax[0].childNodes[0].nodeValue.encode('utf-8'))
114114
self.outFile.write(" ")
115115
ymax = self.qgs.getElementsByTagName("ymax")
116-
self.outFile.write(ymax[0].childNodes[0].nodeValue.encode())
116+
self.outFile.write(ymax[0].childNodes[0].nodeValue.encode('utf-8'))
117117
self.outFile.write("\n")
118118

119119
# Write the OUTPUTFORMAT section
@@ -141,7 +141,7 @@ def writeProjectionSection(self):
141141

142142
# Get the proj4 text from the first map layer's destination SRS
143143
destsrs = self.qgs.getElementsByTagName("destinationsrs")[0]
144-
proj4Text = destsrs.getElementsByTagName("proj4")[0].childNodes[0].nodeValue.encode()
144+
proj4Text = destsrs.getElementsByTagName("proj4")[0].childNodes[0].nodeValue.encode('utf-8')
145145
# the proj4 text string needs to be reformatted to make mapserver happy
146146
self.outFile.write(self.formatProj4(proj4Text))
147147

@@ -240,24 +240,24 @@ def writeMapLayers(self):
240240

241241
self.outFile.write(" LAYER\n")
242242
# write the name of the layer
243-
self.outFile.write(" NAME '" + lyr.getElementsByTagName("layername")[0].childNodes[0].nodeValue.encode() + "'\n")
244-
if lyr.getAttribute("type").encode() == 'vector':
245-
self.outFile.write(" TYPE " + lyr.getAttribute("geometry").encode().upper() + "\n")
246-
elif lyr.getAttribute("type").encode() == 'raster':
247-
self.outFile.write(" TYPE " + lyr.getAttribute("type").encode().upper() + "\n")
243+
self.outFile.write(" NAME '" + lyr.getElementsByTagName("layername")[0].childNodes[0].nodeValue.encode('utf-8') + "'\n")
244+
if lyr.getAttribute("type").encode('utf-8') == 'vector':
245+
self.outFile.write(" TYPE " + lyr.getAttribute("geometry").encode('utf-8').upper() + "\n")
246+
elif lyr.getAttribute("type").encode('utf-8') == 'raster':
247+
self.outFile.write(" TYPE " + lyr.getAttribute("type").encode('utf-8').upper() + "\n")
248248

249249
# Set min/max scales
250-
if lyr.getAttribute('scaleBasedVisibilityFlag').encode() == 1:
251-
self.outFile.write(" MINSCALE " + lyr.getAttribute('minScale').encode() + "\n")
252-
self.outFile.write(" MAXSCALE " + lyr.getAttribute('maxScale').encode() + "\n")
250+
if lyr.getAttribute('scaleBasedVisibilityFlag').encode('utf-8') == 1:
251+
self.outFile.write(" MINSCALE " + lyr.getAttribute('minScale').encode('utf-8') + "\n")
252+
self.outFile.write(" MAXSCALE " + lyr.getAttribute('maxScale').encode('utf-8') + "\n")
253253

254254
# data
255-
dataString = lyr.getElementsByTagName("datasource")[0].childNodes[0].nodeValue.encode()
255+
dataString = lyr.getElementsByTagName("datasource")[0].childNodes[0].nodeValue.encode('utf-8')
256256

257257
# test if it is a postgis, grass or WMS layer
258258
# is there a better way to do this? probably.
259259
try:
260-
providerString = lyr.getElementsByTagName("provider")[0].childNodes[0].nodeValue.encode()
260+
providerString = lyr.getElementsByTagName("provider")[0].childNodes[0].nodeValue.encode('utf-8')
261261
except:
262262
# if providerString is null
263263
providerString = ''
@@ -270,7 +270,7 @@ def writeMapLayers(self):
270270
+ " password=" + pg['password'] + " user=" + pg['user'] + "'\n")
271271
self.outFile.write(" DATA '" + pg['geom'] + " FROM " + pg['table'] + "'\n")
272272

273-
elif providerString == 'wms' and lyr.getAttribute("type").encode().upper() == 'RASTER':
273+
elif providerString == 'wms' and lyr.getAttribute("type").encode('utf-8').upper() == 'RASTER':
274274
# it's a WMS layer
275275
self.outFile.write(" CONNECTIONTYPE WMS\n")
276276
self.outFile.write(" CONNECTION '" + dataString + "'\n")
@@ -280,16 +280,16 @@ def writeMapLayers(self):
280280
wmsNames = []
281281
wmsStyles = []
282282
for wmsLayer in wmsSubLayers:
283-
wmsNames.append( wmsLayer.getElementsByTagName('name')[0].childNodes[0].nodeValue.encode() )
283+
wmsNames.append( wmsLayer.getElementsByTagName('name')[0].childNodes[0].nodeValue.encode('utf-8') )
284284
try:
285-
wmsStyles.append( wmsLayer.getElementsByTagName('style')[0].childNodes[0].nodeValue.encode() )
285+
wmsStyles.append( wmsLayer.getElementsByTagName('style')[0].childNodes[0].nodeValue.encode('utf-8') )
286286
except:
287287
wmsStyles.append( '' )
288288
# Create necesssary wms metadata
289-
format = rasterProp.getElementsByTagName('wmsFormat')[0].childNodes[0].nodeValue.encode()
289+
format = rasterProp.getElementsByTagName('wmsFormat')[0].childNodes[0].nodeValue.encode('utf-8')
290290
ct = lyr.getElementsByTagName('coordinatetransform')[0]
291291
srs = ct.getElementsByTagName('sourcesrs')[0].getElementsByTagName('spatialrefsys')[0]
292-
epsg = srs.getElementsByTagName('epsg')[0].childNodes[0].nodeValue.encode()
292+
epsg = srs.getElementsByTagName('epsg')[0].childNodes[0].nodeValue.encode('utf-8')
293293
self.outFile.write(" METADATA\n")
294294
self.outFile.write(" 'wms_name' '" + ','.join(wmsNames) + "'\n")
295295
self.outFile.write(" 'wms_server_version' '1.1.1'\n")
@@ -305,24 +305,24 @@ def writeMapLayers(self):
305305
# WMS settings for all layers
306306
self.outFile.write(" METADATA\n")
307307
self.outFile.write(" 'wms_title' '"
308-
+ lyr.getElementsByTagName("layername")[0].childNodes[0].nodeValue.encode() + "'\n")
308+
+ lyr.getElementsByTagName("layername")[0].childNodes[0].nodeValue.encode('utf-8') + "'\n")
309309
self.outFile.write(" END\n")
310310

311311
self.outFile.write(" STATUS DEFAULT\n")
312312

313313
opacity = int ( 100.0 *
314-
float(lyr.getElementsByTagName("transparencyLevelInt")[0].childNodes[0].nodeValue.encode()) / 255.0 )
314+
float(lyr.getElementsByTagName("transparencyLevelInt")[0].childNodes[0].nodeValue.encode('utf-8')) / 255.0 )
315315
self.outFile.write(" TRANSPARENCY " + str(opacity) + "\n")
316316

317317
self.outFile.write(" PROJECTION\n")
318-
proj4Text = lyr.getElementsByTagName("proj4")[0].childNodes[0].nodeValue.encode()
318+
proj4Text = lyr.getElementsByTagName("proj4")[0].childNodes[0].nodeValue.encode('utf-8')
319319
self.outFile.write(self.formatProj4(proj4Text))
320320
self.outFile.write(" END\n")
321-
scaleDependent = lyr.getAttribute("scaleBasedVisibilityFlag").encode()
321+
scaleDependent = lyr.getAttribute("scaleBasedVisibilityFlag").encode('utf-8')
322322
if scaleDependent == '1':
323323
# get the min and max scale settings
324-
minscale = lyr.getAttribute("minScale").encode()
325-
maxscale = lyr.getAttribute("maxScale").encode()
324+
minscale = lyr.getAttribute("minScale").encode('utf-8')
325+
maxscale = lyr.getAttribute("maxScale").encode('utf-8')
326326
if minscale > '':
327327
self.outFile.write(" MINSCALE " + minscale + "\n")
328328
if maxscale > '':
@@ -331,9 +331,9 @@ def writeMapLayers(self):
331331

332332
# Check for label field (ie LABELITEM) and label status
333333
try:
334-
labelOn = lyr.getElementsByTagName("label")[0].childNodes[0].nodeValue.encode()
334+
labelOn = lyr.getElementsByTagName("label")[0].childNodes[0].nodeValue.encode('utf-8')
335335
labelNode = lyr.getElementsByTagName('labelattributes')[0]
336-
labelField = labelNode.getElementsByTagName('label')[0].getAttribute('field').encode()
336+
labelField = labelNode.getElementsByTagName('label')[0].getAttribute('field').encode('utf-8')
337337
if labelField != '' and labelField is not None and labelOn == "1":
338338
self.outFile.write(" LABELITEM '" + labelField + "'\n");
339339
except:
@@ -360,20 +360,20 @@ def writeMapLayers(self):
360360
# We need the layer node and symbol node
361361
def simpleRenderer(self, layerNode, symbolNode):
362362
# get the layers geometry type
363-
geometry = layerNode.getAttribute("geometry").encode().upper()
363+
geometry = layerNode.getAttribute("geometry").encode('utf-8').upper()
364364

365365
self.outFile.write(" CLASS\n")
366366

367367
self.outFile.write(" NAME "
368-
+ layerNode.getElementsByTagName("layername")[0].childNodes[0].nodeValue.encode()
368+
+ layerNode.getElementsByTagName("layername")[0].childNodes[0].nodeValue.encode('utf-8')
369369
+ " \n")
370370

371371
self.outFile.write(" STYLE\n")
372372
# use the point symbol map to lookup the mapserver symbol type
373373
symbol = self.msSymbol( geometry, symbolNode )
374374
self.outFile.write(" SYMBOL " + symbol + " \n")
375375
self.outFile.write(" SIZE "
376-
+ symbolNode.getElementsByTagName('pointsize')[0].childNodes[0].nodeValue.encode()
376+
+ symbolNode.getElementsByTagName('pointsize')[0].childNodes[0].nodeValue.encode('utf-8')
377377
+ " \n")
378378

379379
# outline color
@@ -402,10 +402,10 @@ def simpleRenderer(self, layerNode, symbolNode):
402402
# Graduated symbol renderer output
403403
def graduatedRenderer(self, layerNode, symbolNode):
404404
# get the layers geometry type
405-
geometry = layerNode.getAttribute("geometry").encode().upper()
405+
geometry = layerNode.getAttribute("geometry").encode('utf-8').upper()
406406

407407
# get the renderer field for building up the classes
408-
classField = layerNode.getElementsByTagName('classificationattribute')[0].childNodes[0].nodeValue.encode()
408+
classField = layerNode.getElementsByTagName('classificationattribute')[0].childNodes[0].nodeValue.encode('utf-8')
409409
# write the render item
410410
self.outFile.write(" CLASSITEM '" + classField + "'\n")
411411

@@ -414,12 +414,12 @@ def graduatedRenderer(self, layerNode, symbolNode):
414414
for cls in classes:
415415
self.outFile.write(" CLASS\n")
416416

417-
lower = cls.getElementsByTagName('lowervalue')[0].childNodes[0].nodeValue.encode()
418-
upper = cls.getElementsByTagName('uppervalue')[0].childNodes[0].nodeValue.encode()
417+
lower = cls.getElementsByTagName('lowervalue')[0].childNodes[0].nodeValue.encode('utf-8')
418+
upper = cls.getElementsByTagName('uppervalue')[0].childNodes[0].nodeValue.encode('utf-8')
419419

420420
# If there's a label use it, otherwise autogenerate one
421421
try:
422-
label = cls.getElementsByTagName('label')[0].childNodes[0].nodeValue.encode()
422+
label = cls.getElementsByTagName('label')[0].childNodes[0].nodeValue.encode('utf-8')
423423
self.outFile.write(" NAME '" + label + "'\n")
424424
except:
425425
self.outFile.write(" NAME '" + lower + " < " + classField + " < " + upper + "'\n")
@@ -434,7 +434,7 @@ def graduatedRenderer(self, layerNode, symbolNode):
434434
# Symbol size
435435
if geometry == 'POINT' or geometry == 'LINE':
436436
self.outFile.write(" SIZE "
437-
+ cls.getElementsByTagName('pointsize')[0].childNodes[0].nodeValue.encode()
437+
+ cls.getElementsByTagName('pointsize')[0].childNodes[0].nodeValue.encode('utf-8')
438438
+ " \n")
439439

440440
# outline color
@@ -463,10 +463,10 @@ def graduatedRenderer(self, layerNode, symbolNode):
463463
# Continuous symbol renderer output
464464
def continuousRenderer(self, layerNode, symbolNode):
465465
# get the layers geometry type
466-
geometry = layerNode.getAttribute("geometry").encode().upper()
466+
geometry = layerNode.getAttribute("geometry").encode('utf-8').upper()
467467

468468
# get the renderer field for building up the classes
469-
classField = layerNode.getElementsByTagName('classificationattribute')[0].childNodes[0].nodeValue.encode()
469+
classField = layerNode.getElementsByTagName('classificationattribute')[0].childNodes[0].nodeValue.encode('utf-8')
470470

471471
# write the rendering info for each class
472472
self.outFile.write(" CLASS\n")
@@ -496,8 +496,8 @@ def continuousRenderer(self, layerNode, symbolNode):
496496

497497
# The range of values over which to ramp the colors
498498
self.outFile.write(" DATARANGE "
499-
+ lower.getElementsByTagName('lowervalue')[0].childNodes[0].nodeValue.encode() + ' '
500-
+ upper.getElementsByTagName('lowervalue')[0].childNodes[0].nodeValue.encode() + '\n')
499+
+ lower.getElementsByTagName('lowervalue')[0].childNodes[0].nodeValue.encode('utf-8') + ' '
500+
+ upper.getElementsByTagName('lowervalue')[0].childNodes[0].nodeValue.encode('utf-8') + '\n')
501501

502502
self.outFile.write(" RANGEITEM '" + classField + "'\n")
503503
self.outFile.write(" END\n")
@@ -519,10 +519,10 @@ def continuousRenderer(self, layerNode, symbolNode):
519519
# Unique value renderer output
520520
def uniqueRenderer(self, layerNode, symbolNode):
521521
# get the renderer field for building up the classes
522-
classField = layerNode.getElementsByTagName('classificationattribute')[0].childNodes[0].nodeValue.encode()
522+
classField = layerNode.getElementsByTagName('classificationattribute')[0].childNodes[0].nodeValue.encode('utf-8')
523523

524524
# get the layers geometry type
525-
geometry = layerNode.getAttribute("geometry").encode().upper()
525+
geometry = layerNode.getAttribute("geometry").encode('utf-8').upper()
526526

527527
# write the render item
528528
self.outFile.write(" CLASSITEM '" + classField + "'\n")
@@ -532,11 +532,11 @@ def uniqueRenderer(self, layerNode, symbolNode):
532532
for cls in classes:
533533
self.outFile.write(" CLASS\n")
534534

535-
lower = cls.getElementsByTagName('lowervalue')[0].childNodes[0].nodeValue.encode()
535+
lower = cls.getElementsByTagName('lowervalue')[0].childNodes[0].nodeValue.encode('utf-8')
536536

537537
# If there's a label use it, otherwise autogenerate one
538538
try:
539-
label = cls.getElementsByTagName('label')[0].childNodes[0].nodeValue.encode()
539+
label = cls.getElementsByTagName('label')[0].childNodes[0].nodeValue.encode('utf-8')
540540
self.outFile.write(" NAME '" + label + "'\n")
541541
except:
542542
self.outFile.write(" NAME '" + classField + " = " + lower + "' \n")
@@ -552,7 +552,7 @@ def uniqueRenderer(self, layerNode, symbolNode):
552552
# Symbol size
553553
if geometry == 'POINT' or geometry == 'LINE':
554554
self.outFile.write(" SIZE "
555-
+ cls.getElementsByTagName('pointsize')[0].childNodes[0].nodeValue.encode()
555+
+ cls.getElementsByTagName('pointsize')[0].childNodes[0].nodeValue.encode('utf-8')
556556
+ " \n")
557557

558558
# outline color
@@ -600,7 +600,7 @@ def msSymbol(self, geometry, symbolNode):
600600
symbol = '0'
601601
elif geometry == 'POINT':
602602
try:
603-
symbolName = qgisSymbols[symbolNode.getElementsByTagName('pointsymbol')[0].childNodes[0].nodeValue.encode()]
603+
symbolName = qgisSymbols[symbolNode.getElementsByTagName('pointsymbol')[0].childNodes[0].nodeValue.encode('utf-8')]
604604
except:
605605
symbolName = "CIRCLE"
606606
# make sure it's single quoted
@@ -639,7 +639,7 @@ def msSymbol(self, geometry, symbolNode):
639639
def msLabel(self, layerNode):
640640
# currently a very basic bitmap font
641641
labelNode = layerNode.getElementsByTagName('labelattributes')[0]
642-
labelField = labelNode.getElementsByTagName('label')[0].getAttribute('field').encode()
642+
labelField = labelNode.getElementsByTagName('label')[0].getAttribute('field').encode('utf-8')
643643
if labelField != '' and labelField is not None:
644644
labelBlock = " LABEL \n"
645645

@@ -648,15 +648,15 @@ def msLabel(self, layerNode):
648648

649649
# Include label angle if specified
650650
# Note that angles only work for truetype fonts which aren't supported yet
651-
angle = labelNode.getElementsByTagName('angle')[0].getAttribute('value').encode()
651+
angle = labelNode.getElementsByTagName('angle')[0].getAttribute('value').encode('utf-8')
652652
labelBlock += " ANGLE " + angle + "\n"
653653

654654
# Include label buffer if specified
655655
# Note that the buffer has different meaning in qgis vs mapserver
656656
# mapserver just adds blank space around the label while
657657
# qgis uses a fill color around the label
658658
# Note that buffer only works for truetype fonts which aren't supported yet
659-
buffer = labelNode.getElementsByTagName('buffersize')[0].getAttribute('value').encode()
659+
buffer = labelNode.getElementsByTagName('buffersize')[0].getAttribute('value').encode('utf-8')
660660
labelBlock += " BUFFER " + buffer + "\n"
661661

662662
labelBlock += " END \n"

0 commit comments

Comments
 (0)
Please sign in to comment.