mirror of
				https://github.com/qgis/QGIS.git
				synced 2025-10-31 00:06:02 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			109 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python3
 | |
| """
 | |
| /***************************************************************************
 | |
|                                symbol_xml2db.py
 | |
|                               -------------------
 | |
|     begin                : 26-5-2012
 | |
|     copyright            : (C) 2012 by Arunmozhi
 | |
|     email                : aruntheguy at gmail dot com
 | |
|  ***************************************************************************/
 | |
| 
 | |
| /***************************************************************************
 | |
|  *                                                                         *
 | |
|  *   This program is free software; you can redistribute it and/or modify  *
 | |
|  *   it under the terms of the GNU General Public License as published by  *
 | |
|  *   the Free Software Foundation; either version 2 of the License, or     *
 | |
|  *   (at your option) any later version.                                   *
 | |
|  *                                                                         *
 | |
|  ***************************************************************************/
 | |
| 
 | |
|     The script creates a sqlite3 Db for storing the symbols which will be
 | |
|     shipped with QGIS by default. It then converts symbols and colorramps
 | |
|     in the symbology_ng_style.xml to the database table entries.
 | |
| """
 | |
| import sqlite3
 | |
| 
 | |
| from xml.dom.minidom import parse, parseString
 | |
| 
 | |
| xmlfile = "../resources/symbology-style.xml"
 | |
| dbfile = "../resources/symbology-style.db"
 | |
| 
 | |
| _symbol = "CREATE TABLE symbol("\
 | |
|           "id INTEGER PRIMARY KEY,"\
 | |
|           "name TEXT UNIQUE,"\
 | |
|           "xml TEXT,"\
 | |
|           "favorite INTEGER)"
 | |
| 
 | |
| _colorramp = "CREATE TABLE colorramp("\
 | |
|              "id INTEGER PRIMARY KEY,"\
 | |
|              "name TEXT UNIQUE,"\
 | |
|              "xml TEXT,"\
 | |
|              "favorite INTEGER)"
 | |
| 
 | |
| _tag = "CREATE TABLE tag("\
 | |
|        "id INTEGER PRIMARY KEY,"\
 | |
|        "name TEXT)"
 | |
| 
 | |
| _tagmap = "CREATE TABLE tagmap("\
 | |
|           "tag_id INTEGER NOT NULL,"\
 | |
|           "symbol_id INTEGER)"
 | |
| 
 | |
| _ctagmap = "CREATE TABLE ctagmap("\
 | |
|            "tag_id INTEGER NOT NULL,"\
 | |
|            "colorramp_id INTEGER)"
 | |
| 
 | |
| _smartgroup = "CREATE TABLE smartgroup("\
 | |
|               "id INTEGER PRIMARY KEY,"\
 | |
|               "name TEXT,"\
 | |
|               "xml TEXT)"
 | |
| 
 | |
| create_tables = [_symbol, _colorramp, _tag, _tagmap, _ctagmap, _smartgroup]
 | |
| 
 | |
| # Create the DB with required Schema
 | |
| conn = sqlite3.connect(dbfile)
 | |
| c = conn.cursor()
 | |
| print("Creating tables in the Database\n")
 | |
| for table in create_tables:
 | |
|     try:
 | |
|         c.execute(table)
 | |
|         print(table)
 | |
|     except sqlite3.OperationalError as e:
 | |
|         pass
 | |
|     conn.commit()
 | |
| 
 | |
| # parse the XML file &  write symbol into DB
 | |
| dom = parse(xmlfile)
 | |
| symbols = dom.getElementsByTagName("symbol")
 | |
| for symbol in symbols:
 | |
|     symbol_name = symbol.getAttribute("name")
 | |
|     symbol_favorite = symbol.getAttribute("favorite")
 | |
|     if not symbol_favorite:
 | |
|         symbol_favorite = 0
 | |
| 
 | |
|     if '@' in symbol_name:
 | |
|         parts = symbol_name.split('@')
 | |
|         parent_name = parts[1]
 | |
|         layerno = int(parts[2])
 | |
|         c.execute("SELECT xml FROM symbol WHERE name=(?)", (parent_name,))
 | |
|         symdom = parseString(c.fetchone()[0]).getElementsByTagName('symbol')[0]
 | |
|         symdom.getElementsByTagName("layer")[layerno].appendChild(symbol)
 | |
|         c.execute("UPDATE symbol SET xml=? WHERE name=?", (symdom.toxml(), parent_name))
 | |
|     else:
 | |
|         c.execute("INSERT INTO symbol VALUES (?,?,?,?)", (None, symbol_name, symbol.toxml(), symbol_favorite))
 | |
| conn.commit()
 | |
| 
 | |
| 
 | |
| # ColorRamps
 | |
| colorramps = dom.getElementsByTagName("colorramp")
 | |
| for ramp in colorramps:
 | |
|     ramp_name = ramp.getAttribute("name")
 | |
|     symbol_favorite = symbol.getAttribute("favorite")
 | |
|     if not symbol_favorite:
 | |
|         symbol_favorite = 0
 | |
| 
 | |
|     c.execute("INSERT INTO colorramp VALUES (?,?,?,?)", (None, ramp_name, ramp.toxml(), symbol_favorite))
 | |
| conn.commit()
 | |
| 
 | |
| # Finally close the sqlite cursor
 | |
| c.close()
 |