As noted in an earlier post, I am working with a large set of digital maps thanks to Dr. Kristen Hopper, Dr. Dan Lawrence and Dr. Hector Orengo. As I work through these maps I want to record their attributes so I don’t need to re-open them frequently. This is a note about a process to record metadata in QGIS I am trying out.
For each map I wish to record:
- map_name.
- crs – The geographic coordinate reference system.
- extent – The coordinates of the map’s coverage.
- language – Maps are Arabic, French and English.
- year.
- color_scheme – Most maps have black text, brown topographic features and blue water features. Some maps use red and a few add green.
- ruins_symbol – Some maps use R. R. to signify a Roman Ruin. Others use a picture symbol.
For map_name I use the layer name. Crs and extent are stored as part of the geographic information in the map’s georeferenced tif.
Language can be defined in Layer Properties | Metadata.
I used Metadata Keywords to define color_scheme, ruins_symbol and year.
A small program in QGIS can export the data into a .csv.
This is the export program in QGIS:
from xml.etree import ElementTree as ETree
file_out = open("E:\\a_new_orgs\\crane\\large\\maps_syria.csv", "w")
file_out.write('"map_name","crs","extent","language","year","color_scheme","ruins_symbol"\n')
layers = qgis.utils.iface.mapCanvas().layers()
for layer in layers:
layerType = layer.type()
layerName = layer.name()
if layerType == QgsMapLayer.RasterLayer:
xml = QgsLayerDefinition.exportLayerDefinitionLayers([layer], QgsReadWriteContext()).toString()
xml_root = ETree.fromstring(xml)
keywords = {'color_scheme': '', 'year': '', 'ruins_symbol': ''}
for obj in xml_root.findall('./maplayers/maplayer/resourceMetadata'):
print(obj)
map_language = obj.find('language').text
for keywords_obj in obj.findall('./keywords'):
keywords[keywords_obj.attrib['vocabulary']] = keywords_obj.find('keyword').text
print(keywords)
print(str(layer.name()), layer.crs(), layer.extent())
file_out.write('"' + str(layer.name()) + '","' + str(layer.crs()) + '","' + str(layer.extent()) + '","' + str(map_language) + '","' +str(keywords['year']) + '","' + keywords['color_scheme'] + '","' + keywords['ruins_symbol'] + '"\n' )
file_out.close()