Monday, 16 January 2017

qgis - Using the API of QSpatiaLite plugin


I am using the popular QSpatiaLite plugin for QGIS. Since I am creating and modifying SpatiaLite tables directly with Python (using pyspatialite), I wonder whether I can automate tasks such as converting from a Shapefile to SpatiaLite directly from the Python code (similar to the plugin's "Import OGR files").


Thus, does the plugin provide some sort of an API to do that kind of stuff? Or can I do this from within pyspatialite without using any QGIS-related API?


I know there is a QGIS Python API but I have never dealt with it, that's why I am kind of confused here.



Answer



If you use Python, you can perfectly use one of the modules that can read shapefiles like ogr, Fiona or Pyshp to extract the geometries and the attributes of a shapefile and insert them into SQLite/SpatiaLite with pyspatialite without QGIS and QSpatiaLite.


With pyshp (result = Python lists)


import shapefile

input = shapefile.Reader("joinpolypt.shp")
# fields
input.fields[1:]
[['test', 'N', 1, 0], ['color', 'C', 80, 0]]
# geometries and attributes of the layer
shapes = input.shapes()
attributes = input.records()
# first record
shapes[0].points[0]
[273781.244220372, 154668.35103545961]

attributes[0]
[1, 'red']
.....

With Fiona (result = Python dictionaries):


import fiona
points = fiona.open('testpoint.shp')
# schema of the shapefile
points.schema
{'geometry': 'Point', 'properties': {u'test': 'int', u'color': 'str'}}

# first point
points.next()
{'geometry': {'type': 'Point', 'coordinates': (273781.244220372, 154668.35103545961)}, 'id': '0', 'properties': {'test': 1, 'color': u'red'}}
...

It is similar with ogr.


In all the cases you get the geometries and the attributes as lists or dictionaries


Then it is easy to use pyspatialite to incorporate these values ​​in a spatialite database.


Note that with OGR 1.10, the GDAL/OGR library can be loaded as a SQLite extension (like spatialite) and you can use directly Python and ogr (SQLite / Spatialite RDBMS)


No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...