mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-23 00:02:38 -05:00
96 lines
3.3 KiB
Python
96 lines
3.3 KiB
Python
|
#!/usr/bin/python
|
||
|
"""
|
||
|
/***************************************************************************
|
||
|
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-ng-style.xml"
|
||
|
dbfile = "../resources/symbology-ng-style.db"
|
||
|
|
||
|
_symbol = "CREATE TABLE symbol("\
|
||
|
"id INTEGER PRIMARY KEY,"\
|
||
|
"name TEXT UNIQUE,"\
|
||
|
"xml TEXT,"\
|
||
|
"groupid INTEGER)"
|
||
|
|
||
|
_colorramp = "CREATE TABLE colorramp("\
|
||
|
"id INTEGER PRIMARY KEY,"\
|
||
|
"name TEXT,"\
|
||
|
"xml TEXT)"
|
||
|
|
||
|
_tag = "CREATE TABLE tag("\
|
||
|
"id INTEGER PRIMARY KEY,"\
|
||
|
"name TEXT)"
|
||
|
|
||
|
_tagmap = "CREATE TABLE tagmap("\
|
||
|
"tag_id INTEGER NOT NULL,"\
|
||
|
"symbol_id INTEGER)"
|
||
|
|
||
|
_symgroup = "CREATE TABLE symgroup("\
|
||
|
"id INTEGER PRIMARY KEY,"\
|
||
|
"name TEXT,"\
|
||
|
"parent INTEGER)"
|
||
|
|
||
|
create_tables = [ _symbol, _colorramp, _tag, _tagmap, _symgroup ]
|
||
|
|
||
|
# 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" )
|
||
|
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(), None ) )
|
||
|
conn.commit()
|
||
|
|
||
|
|
||
|
# ColorRamps
|
||
|
colorramps = dom.getElementsByTagName( "colorramp" )
|
||
|
for ramp in colorramps:
|
||
|
ramp_name = ramp.getAttribute( "name" )
|
||
|
c.execute( "INSERT INTO colorramp VALUES (?,?,?)", ( None, ramp_name, ramp.toxml() ) )
|
||
|
conn.commit()
|
||
|
|
||
|
# Finally close the sqlite cursor
|
||
|
c.close()
|