mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-22 00:06:12 -05:00
112 lines
3.6 KiB
Python
112 lines
3.6 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()
|