Worskhop Leicester 2010
-
Upload
joanne-cook -
Category
Documents
-
view
1.233 -
download
0
description
Transcript of Worskhop Leicester 2010
Beyond Google Maps and Mashups
Practicalities
● Download: www.archaeogeek.com/downloads/leics2010.zip
●Save to /home/user and extract
●/home/user/leics2010 folder should then contain:shape_files (folder)demo.mapmapserver.htmlbaselayers.htmlleicester_2010_notes.pdf
Installing Quantum GIS plugins
Needed Plugins: Mapserver Export, PostGIS manager, SPIT
Databases
Databases
● Server-based database (not like access)● Data is entirely separate from user interface● Inside the database, data stored in schemas
for finer control
+
www.postgresql.orgpostgis.refractions.net
How to connect to a database
● HOST: localhost, 192.168.3.40, myserver.com● DATABASE: ??? (your choice)● USERNAME: user● PASSWORD: user● PORT: 5432 (default)
Getting spatial data into PostgreSQL
● OGR2OGR (command line)● SHP2PGSQL (command line)● SPIT plugin for Quantum GIS● Essential Parameters:
host, username, password, dbname, port (as before)
● Additionally: name and location of shapefile, name of table in database, coordinate system of data
Loading data with SPIT
Create new database with pgadmin3and connect to it with SPIT in QGIS
SPIT (continued)
Make “DB Relation Name” all lower case!!!
Database house-keeping
● Each table should have a primary key● Each spatial table should be recorded in
the geometry_columns table● Each spatial table should have a spatial
indexCREATE INDEX yourtable_idx ON yourtable USING GIST(geometry_column);
Querying data
● SQL: Structured Query LanguageSELECT some comma de-limited columns FROM your_table WHERE some condition is met;
● Use PSQL from command line, PgAdmin3, or PostgreSQL Manager/SQL Editor
● SQL is case-sensitive for table and column names, and keywords are usually in capitals
Querying data
● Display on the map using CREATE VIEW AS:
CREATE VIEW viewname AS SELECT * FROM united_kingdom_counties WHERE...
● Add to QGIS using Add Layer/Add PostGIS layer
Spatial Querying
● Find out which county a point is in:SELECT “PROV3NAME” FROM united_kingdom_counties WHERE st_within(geomfromtext('point(-1.4 52.6)', 4326), the_geom);
● Find out the spatial extent of your data:SELECT st_extent(the_geom) FROM united_kingdom_counties;
Map Servers
Types of Map Server
● cgi program on a web server. Configuration via text files
● java-based program. Configuration via web interface
The Map FileMAP NAME "sample" STATUS ON SIZE 600 400 EXTENT -180 -90 180 90 UNITS DD SHAPEPATH "../data" IMAGECOLOR 255 255 255 WEB IMAGEPATH "/ms4w/tmp/ms_tmp/" IMAGEURL "/ms_tmp/" END LAYER NAME 'global-raster' TYPE RASTER STATUS DEFAULT DATA bluemarble.gif ENDEND
Checking and Viewing a map file
● SHP2IMG at the command lineshp2img -m /home/user/leics2010/demo.map -o /home/user/demo.png
● With a browserhttp://localhost.com/cgi-bin/mapserv?map=/home/user/leics2010/demo.map&mode=map
Adding new layers to a mapfileLAYER NAME "your layer" STATUS DEFAULT TYPE POLYGON DATA "yourshapefile.shp" CLASS
NAME "your name for this symbology"STYLE
SYMBOL 0 OUTLINECOLOR 0 0 0 COLOR 207 150 123 END
ENDEND
Connecting to PostgreSQL from Mapserver
LAYER NAME "UK Counties" STATUS DEFAULT TYPE POLYGON CONNECTIONTYPE POSTGIS CONNECTION "host=localhost port=5432 dbname=osgis2010 user=user password=user" DATA "the_geom from united_kingdom_counties" CLASS
…END
END
Displaying single layers
● Set the Layer status to “ON” rather than “DEFAULT”
● Specify the layers as part of the URL:http://localhost/cgi-bin/mapserv?map=/home/user/leics2010/demo.map&layer=counties
Web Mapping
Web Mapping: Practicalities
● Make the web folder writeablesudo chown -R user /var/wwwsudo chmod -R 755 /var/www
● If asked for a password, it's user
Structure of a web page
<html>
<head><title> My Home Page </title>
</head>
<body>HELLO WORLD!
</body>
</html>
Scripting
● SERVER-SIDE:php, asp
<?phpphpinfo();
?>● CLIENT-SIDE:
javascript
Solving Problems using Firefox
OpenLayers
OpenLayers page structure<html>
<head><script src="..lib/OpenLayers.js"></script><script type="text/javascript">
var map, mylayer; function init() {map = new OpenLayers.Map('map');mylayer = new OpenLayers.Layer.MapServer( "World Map",
"http://localhost/cgi-bin/mapserv.exe",{map: 'C:/world_mapfile.map'});
map.addLayer(mylayer);map.zoomToMaxExtent();}
</script></head><body onload="init()">
<div id="map" style="width: 600px; height: 300px"></div></body>
</html>
Adding Controls
Scale Bars, Permalink and Mouse Position
Layer Switcher and Overview Map
Base Mapping● Can use base data from Google, Microsoft,
Yahoo, Openstreetmap, etc● Specify base layer (not always necessary)
{'isBaseLayer': true}● Overlay needs to be transparent
{'transparent':true, 'format': png}
● Change addlayers directivemap.addLayers([layer1,layer2]);
Beyond OpenLayers
•MapGuide Open Source http://mapguide.osgeo.org•Mapfish http://mapfish.org/•Mapchat http://mapchat.ca/•Featureserver http://featureserver.org/
And Finally...
Jo CookOA Digitalhttp://[email protected]+44 (0)1524 880212
This work is licenced under the Creative Commons Attribution-Share Alike 2.0 UK: England & Wales License. To view a copy of this licence, visit http://creativecommons.org/licenses/by-sa/2.0/uk/ or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.
Have fun!!!