-
Notifications
You must be signed in to change notification settings - Fork 63
4.4 Use H2GIS with Python
Palominos Sylvain edited this page Feb 12, 2020
·
15 revisions
The following example demonstrates how to use H2GIS with the Python scripting language. The advantage is the ability to run it on dedicated server without X11.
Requirements:
- To use H2GIS, you have to install Java from version 7.
To install H2GIS, follow this steps:
- Download the latest H2GIS version on the home page, unzip it.
- On Linux you can execute the following commands:
~ $ wget https://github.com/orbisgis/h2gis/releases/download/v1.3.2/h2gis-dist-1.3.2-bin.zip -O h2gis.zip
~ $ unzip h2gis.zip
http://initd.org/psycopg/docs/install.html#installation
On Windows, Linux, Mac
java -cp "bin/*" org.h2.tools.Server -pg
python myscript.py
#!/usr/bin/python
from __future__ import print_function
import os
try:
import psycopg2
except ImportError:
print("Module psycopg2 is missing, cannot connect to PostgreSQL")
exit(1)
def main():
#Define our connection string
# db name has to be an absolute path
db_name = (os.path.abspath(".")+os.sep+"mydb").replace(os.sep, "/")
conn_string = "host='localhost' port=5435 dbname='"+db_name+"' user='sa' password='sa'"
# print the connection string we will use to connect
print("Connecting to database\n ->%s" % (conn_string))
# get a connection, if a connect cannot be made an exception will be raised here
conn = psycopg2.connect(conn_string)
# conn.cursor will return a cursor object, you can use this cursor to perform queries
cursor = conn.cursor()
print("Connected!\n")
# Init spatial features
cursor.execute("CREATE ALIAS IF NOT EXISTS H2GIS_SPATIAL FOR \"org.h2gis.functions.factory.H2GISFunctions.load\";")
cursor.execute("CALL H2GIS_SPATIAL();")
print("Spatial functions added!\n")
# Add spatial table and query it
cursor.execute("DROP TABLE IF EXISTS VANNES;")
cursor.execute("CREATE TABLE VANNES (the_geom geometry, id int);")
cursor.execute("INSERT INTO VANNES VALUES('POLYGON ((100 300, 210 300, 210 200, 100 200, 100 300))'::geometry, 1),('POINT (100 100)'::geometry, 2);")
cursor.execute("SELECT * FROM VANNES;")
print("Show me the table:\n")
rows = cursor.fetchall()
for row in rows:
print(row)
main()