Tuesday, May 25, 2010

PostGIS on Ubuntu

With this post I will show how to install PostGIS 1.2.1 on Postgres

8.2.5 in Ubuntu 7.10 (but this procedure should work also for previous

PostGIS/Postgres/Ubuntu versions) from repositories.I will also show

you how to load and secure GIS data and how to access them with

some cool OS GIS Client (QGIS, UDig and gvSIG).

-1- Install Postgres

If you haven’t Postgres, you need to install it (PostGIS runs on top of it).

Open an Ubuntu terminal, and type:

sudo apt-get install postgresql postgresql-client
postgresql-contrib pgadmin3
sudo apt-get install postgresql pgadmin3
Postgres (8.2.5) will be now on your Ubuntu box.
-2- Install PostGIS

Still from the terminal, type:
sudo apt-get install postgresql-8.2-postgis
PostGIS (1.2.1) will now be installed, to be precise this
2 packages are installed:
postgresql
-8.2-postgis
postgis
under file:///usr/share/doc/postgis/postgis.html you will
find the PostGIS Manual, for more help about installation
and configuration.
-3- Create a PostGIS database template

Creating a PostGIS database template is the way to go if
you want to make it easy the creations of many GIS database
on the same server. Without creating this template, you
would need to repeat this steps every time you need to
create a PostGIS database.
sudo su postgres
createdb postgistemplate
createlang plpgsql postgistemplate
psql -d postgistemplate -f /usr/share/postgresql-8.2
-postgis/lwpostgis.sql
psql -d postgistemplate -f /usr/share/postgresql-8.2
-postgis/spatial_ref_sys.sql
The template is now ready (a lot of functions and two
tables – geometry_columns and spatial_ref_sys – were
created in it).
Now we can test of postgistemplate we just created:
$ psql -d postgistemplate -c “SELECT postgis_full_version();”

postgis_full_version
————————————————————
POSTGIS=”1.2.1″ GEOS=”2.2.3-CAPI-1.1.1″ PROJ=”Rel.
4.5.0, 22 Oct 2006″ USE_STATS
(1 row)
-4- Create group role and user

  • Generally the best way is to create the GIS data in
  • the PostGIS database by using a different role and
    user than using the postgres one, that should be used
    only for administrative tasks.
    Typically I use to create a GIS role and user for
    managing data in the PostGIS database. You can even
    create more GIS users with different rights (SELECT,
    INSERT, UPDATE, DELETE on the different GIS feature
    classes), to generate a more safe environment. This
    depends on the configuration of your GIS scenario.
  • Connect to postgres (with postgres user): psql and
  • enter in the command prompt:
  • type this to create the group role, that here i
    name gisgroup (choose less permissions if needed
    for security reasons):
  • CREATE ROLE gisgroup NOSUPERUSER NOINHERIT CREATEDB
    NOCREATEROLE;
  • type this to create the login role, here named gis
    (feel free to change it):
  • CREATE ROLE gis LOGIN PASSWORD ‘mypassword’ NOINHERIT;
  • assign the gis login role to the gisgroup group role:
  • GRANT gisgroup TO gis;
    -5- Assign permissions
  • We need to assign permissions for the postgistemplate
    tables
  • (geometry_columns and spatial_ref_sys will be owned from
    the gis user):
  • exit from the previous connection (type \q), and connect
    to the postgistemplate database as the postgres user:
  • psql -d postgistemplate
  • assign the permissions:
    ALTER
    TABLE geometry_columns OWNER TO gis;
  • ALTER TABLE spatial_ref_sys OWNER TO gis;
  • Create a schema for your gis data (we shouldn’t create the
    gis data in the public schema):
  • CREATE SCHEMA gis_schema AUTHORIZATION gis;
  • exit from the connection (\q)
    -6- Database creation
  • Now we are ready to create the database (or more databases)
    where to load the data (named gisdb), using the createdb
    command, from the postgistemplate we just have created:
  • $ createdb -T postgistemplate -O gis gisdb
    -7- Data loading
  • Download this test data: there are 4 shapefiles that we
  • will load in the new PostGIS database we have created.
    We can import shapefiles in PostGis with the shp2pgsql
    command. First we will create the sql files with this
  • command, and then we will run this files with Postgres
    to import the data in PostGIS.
  • To create the sql files (if you want to avoid this step,
    the zip file already contains this *.sql files we are
    generating):
  • $ shp2pgsql -I -s 32633 POI.shp gis_schema.poi > poi.sql
  • Shapefile type: Point
  • Postgis type: POINT[2]
  • $ shp2pgsql -I -s 32633 vestizioni.shp gis_schema.vestizioni
  • > vestizioni.sql
  • Shapefile type: Arc
  • Postgis type: MULTILINESTRING[2]
  • $ shp2pgsql -I -s 32633 compfun.shp gis_schema.compfun >
    compfun.sql
  • Shapefile type: Polygon
  • Postgis type: MULTIPOLYGON[2]
  • $ shp2pgsql -I -s 32633 zone.shp gis_schema.zone > zone.sql
  • Shapefile type: Polygon
  • Postgis type: MULTIPOLYGON[2]
  • Note that we used 2 options of the shp2pgsql:
    -I will also create a GiST index on the geometry column
    -s will give to PostGIS the information of the srid of the
    data (srid=32633 is for gis data with a spatial reference
    WGS84, UTM 33 N)
  • Now it is time to execute the *.sql scripts with the gis user:
  • $ psql -d gisdb -h localhost -U gis -f poi.sql
  • BEGIN
    psql:poi.sql:4: NOTICE: CREATE TABLE will create implicit sequence
  • “poi_gid_seq” for serial column “poi.gid”
    psql:poi.sql:4: NOTICE: CREATE TABLE / PRIMARY KEY will create
    implicit index “poi_pkey” for table “poi”
    CREATE TABLE
    addgeometrycolumn
    ——————————————————
    gis_schema.poi.the_geom SRID:32633 TYPE:POINT DIMS:2
  • (1 row)
  • CREATE INDEX
    COMMIT
  • Do the same with the other 3 sqls generated from the
    previous step:
  • $ psql -d gisdb -h localhost -U gis -f compfun.sql
  • $ psql -d gisdb -h localhost -U gis -f vestizioni.sql
    $ psql -d gisdb -h localhost -U gis -f zone.sql

No comments:

Post a Comment

Pages

About Me

My photo
- A competent M.S. Software Engineer and B.E. (Comp) with 6 years of rich experience in Java/ C / C++ / Oracle/PHP/Postgresql/Mysql in IT industry.
- Resourceful in developing Applications with various platforms and different domains.
A strategic planner with expertise in designing internal control systems towards the accomplishment of corporate business goals.
- A keen analyst with exceptional relationship management skills and abilities in liaising with different clients.
- Team player with excellent analytical and communications skills.
Worked with development projects with software brands like Cognizant and Infosys
Specialties
- Master in struts
- Good hands on in core Java
- Understanding of other building blocks of Enterprise applications like middle ware technologies.
- Knowledge of database like Oracle,postgresql,mysql