El nombre de la única capa en el proyecto de mapa de ArcGIS myfile.mxd
es Mächtigkeit
que contiene el alemán diéresis ä
. Me enfrento a un mensaje de error cuando se utiliza la secuencia de comandos mxd2qgs.py
(descargado de https://github.com/fitnr/mxd2qgs) a pesar de que algunas soluciones se implementan. El guión mxd2qgs_short.py
a continuación es, a mi punto de vista, la mayor reducción posible de la secuencia de comandos original, se sigue produciendo el error.
Parece que el error se produce a partir de la interacción de las dos secciones Section mapcanvas
y Section legend
el uno con el otro. Apagar Section mapcanvas
hace que desaparezca el mensaje de error. Yo no logran rastrear la interacción del nombre de la capa con Section mapcanvas
. ¿Cómo debo proceder en mxd2qgs_short.py
a manejar este problema?
El uso de doc.toprettyxml()
se sugiere aquí.
Guión mxd2qgs_short.py
:
from xml.dom.minidom import Document
import arcpy
mxd = arcpy.mapping.MapDocument(r"myfile.mxd")
qgs = 'myfile.qgs'
df = arcpy.mapping.ListDataFrames(mxd)[0]
lyrlist = arcpy.mapping.ListLayers(df)
lyr, = lyrlist
doc = Document()
qgis = doc.createElement("qgis")
doc.appendChild(qgis)
legend = doc.createElement("legend")
qgis.appendChild(legend)
unit = doc.createTextNode(df.mapUnits)
units = doc.createElement("units")
units.appendChild(unit)
# Section mapcanvas
mapcanvas = doc.createElement("mapcanvas")
qgis.appendChild(mapcanvas)
mapcanvas.appendChild(units)
# Section legend
legendlayer = doc.createElement("legendlayer")
legendlayer.setAttribute("name",lyr.name.encode('iso-8859-1'))
legend.appendChild(legendlayer)
f = open(qgs,"w")
f.write(doc.toprettyxml())
f.close()
Mensaje de Error:
Traceback (most recent call last):
File "D:\mxd2qgs_short.py", line 31, in <module>
f.write(doc.toprettyxml())
File "C:\Python27\ArcGIS10.5\lib\xml\dom\minidom.py", line 61, in toprettyxml
return writer.getvalue()
File "C:\Python27\ArcGIS10.5\lib\StringIO.py", line 271, in getvalue
self.buf += ''.join(self.buflist)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 1: ordinal not in range(128)