21
Implementation of an Open- Source Internet Map Server Lowell Ballard Virginia Economic Development Partnership

Implementation of an Open-Source Internet Map Server Lowell Ballard Virginia Economic Development Partnership

  • View
    216

  • Download
    0

Embed Size (px)

Citation preview

Implementation of an Open-Source Internet Map Server

Lowell BallardVirginia Economic Development Partnership

Topics to be Covered

• Overview of “MapServer”

• Various methods to implement MapServer

• The Implementation at VEDP

• The gory details

• Comparison to other Internet Map Servers

• What you should consider when choosing an Internet Map Server

MapServer Overview

• MapServer is an OpenSource development environment for building spatially enabled Internet applications.

• The MapServer was originally developed by (UMN) ForNet project in cooperation with NASA and the Minnesota DNR

• Current development is funded by the TerraSIP project, a NASA sponsored project between the UMN and consortium of land management interests.

• MapServer will run where most commercial systems won't or can't, on Linux/Apache platforms.

• MapServer is known to compile on most UNIXes and will run under Windows NT/98/95/00.

MapServer Implementation Options

• MapServer can be implemented as a CGI application.

• The MapServer CGI application provides a significant number of "out-of-the-box" features.

• vector formats supported: ESRI shapefiles, simple embedded features, ESRI ArcSDE• raster formats supported: TIFF/GeoTIFF, GIF, PNG, ERDAS, JPEG and EPPL7 • quadtree spatial indexing for shapefiles • fully customizable, template driven output • feature selection by item/value, point, area or another feature • TrueType font support • support for tiled raster and vector data (display only) • automatic legend and scalebar building• scale dependent feature drawing and application execution• thematic map building using logical or regular expression based classes• feature labeling including label collision mediation• on-the-fly configuration via URLs• on-the-fly projection

MapServer Implementation Options• MapServer system supports MapScript which allows popular scripting

languages such as Perl, Python, Tk/Tcl, Guile and even Java to access the MapServer C API.

• This is analogous to Active Server Pages (.asp) and ColdFusion (.cfm) in the ClosedSource world.

• MapScript provides a rich environment for developing applications that integrate disparate data.

• If the data have a spatial component, and you can get to it via your favorite scripting environment, you can map it.

• Additionally MapScript allows you to integrate your business data in an RDBMS (e.g., Oracle, MySQL, Sybase) into your MapServer application.

• In addition, there is now a PHP/MapScript module included in the current release.

• This provides a powerful OpenSource alternative to .asp, .cfm and other server-side scripting languages.

Example 1: HTML alone

Hello, World!

Example 2: PHP code alone

<?php print "Hello, World!"; ?>

Example 3: PHP embedded within HTML

<?php print "Hello,"; ?> World!

MapServer Implementation Options

Implementation at the VEDP

• We have used the CGI version for the past year.

• Recently we added a PHP version.

• Both are linked from the main page of http:gis.vedp.org

The Gory Details - CGIMAP FILE-------------

Contains thebasic configurationfor the map service:

LayersImage output directory

ProjectionsImage SizeSymbology

Legend propertiesScale bar Property

MapServer CGI---------------------

Compiled to supportVarious functionality needed:

SDEMapInfo support

png, gif, jpgTrueType fonts

TEMPLATE FILE(s)-------------

Contains thecode to create

the map interface:

HTMLJavaScriptLayers list

Zoom buttonsTables

Image, legend andScale bar placement

Submit form

Calls

References

Generates andreturns images

.map File Example

NAME DEMO

STATUS ON

SIZE 600 500

FONTSET /usr/local/apache/htdocs/vedp_maps/fonts/fonts.list

SYMBOLSET symbols/symbol.sym

EXTENT -400000 50000 400000 400000

UNITS FEET

SHAPEPATH "data"

IMAGECOLOR 255 255 255

.map File Example - simpleLAYER

NAME counties #Layer nameTYPE POLYGONDATA county #shapefile nameSTATUS ONCLASSITEM tile_name #for queries use thisLABELITEM "name“ #label using this itemSYMBOLSCALE 1500000 #Start scaling at this resolutionLABELMAXSCALE 600000 #Start labeling at this scaleHEADER county_header.html #Header template for queriesCLASS #Start of a map class NAME "Counties“ #Name for Legend EXPRESSION /./ #could be pop90 > 10000 e.g. OUTLINECOLOR 128 128 128 COLOR 245 240 219 TEMPLATE county.html #used to build query output LABEL #Builds the label

SIZE 8 MINSIZE 2 MAXSIZE 8 COLOR 0 0 0 BACKGROUNDCOLOR 255 255 204 BACKGROUNDSHADOWSIZE 4 4 BACKGROUNDSHADOWCOLOR 0 0 0 TYPE TRUETYPE FONT tahoma ANTIALIAS BUFFER 1 ENDEND

END

CLASSITEM "ROAD_TYPE" CLASS EXPRESSION "1" COLOR 0 0 0 SYMBOL 'symbols/images/interstate.png' LABEL SIZE 2 MINFEATURESIZE 40 MINDISTANCE 150 POSITION CC SIZE TINY COLOR 255 255 255 END END CLASS EXPRESSION "2" COLOR 0 0 0 # dummy color SYMBOL 'symbols/images/ushwy.png' LABEL MINFEATURESIZE 50 MINDISTANCE 150 POSITION CC SIZE TINY COLOR 0 0 0 END END

.map File Example – multiple classes

LAYER NAME spot2001 TYPE RASTER STATUS OFF TILEINDEX spot_2001/spotindex TILEITEM "LOCATION" MAXSCALE 25000 MINSCALE 3000 OFFSITE 0END

.map File Example - Raster

• The hardest part is the compilation process.

• Because it’s open source it pulls from many different projects with many different developers.

• If you need support for something (e.g., TrueType fonts) it has to be compiled in (e.g., FreeType).

• This can be a pain.

• However, installation of most IMServers is a pain.

The Gory Details

• --with-gd[=[static,]DIR] Specify which version of GD to use (DIR is GD's • install dir).• --with-freetype=DIR Specify where FreeType is installed (DIR is path to • FreeType 2.x freetype-config program or FreeType 1.x/2.x install dir).• --with-zlib=DIR Specify where zlib is installed (DIR is path to • zlib install dir).• --with-png=DIR Specify where PNG is installed (DIR is path to • PNG install dir).• --without-tiff Disable TIFF support.• --with-tiff[=DIR] Include TIFF support (DIR is LibTIFF's install dir).• --without-eppl Disable EPPL7 support.• --with-eppl Include EPPL7 support.• --with-proj[=DIR] Include PROJ.4 support (DIR is PROJ.4's install dir).• --with-sde[=DIR] Include ESRI SDE support (DIR is SDE's install dir).• --with-sde-version[=VERSION NUMBER] Set ESRI SDE verion number (Default is

80).• --with-mpatrol[=DIR] Include MPATROL support (DIR is MPATROL's install dir).• --with-ogr[=DIR] Include OGR support (DIR is OGR's install dir).• --with-gdal[=DIR] Include GDAL support (DIR is path to gdal-config• --with-postgis[=ARG] Include PostGIS Support (ARG=yes/path to pg_config)• --without-wms Disable OGC WMS Compatibility (enabled by default).• --without-wmsclient Disable OGC WMS Client Connections (enabled by default).

Subset of Compilation Options

Comparison--Speed

• MapServer is faster• I compared MapServer running on a PII

Desktop with 128 MB RAM to another IMS running on a PIII 512 MB RAM Server.

• CPU usage for MapServer was about 20% per map rendered and took about 1 second.

• CPU on other IMS took about 8-10 seconds and 100% CPU utilization.

Comparison--SupportTo: [email protected] Subject: [mapserver-users] mapraster.c compile error--- From: "Ballard,Lowell" <[email protected]> Date: Mon, 20 Aug 2001 10:45:56 -0400 I've tried compiling nightly with several options and I always get the same parse

errors.----------------------------------------- gcc -c -O2 -Wall -DIGNORE_MISSING_DATA -DUSE_EPPL -DUSE_TIFF -DUSE_JPEG -DUSE_GD_GIF -DUSE_GD_SWAP_XY -DUSE_SDE -I/home/baldur/mapserver/./gd-1.2/ -I/home/baldur/mapserver/../sdeexe81//include mapraster.c -o mapraster.o

===========================================To: "Ballard,Lowell" <[email protected]> Subject: Re: [mapserver-users] mapraster.c compile error--- From: Daniel Morissette <[email protected]> Date: Mon, 20 Aug 2001 11:04:40 -0400 CC: [email protected] References: <509989F9E1D38D47ADA73ED9CF5BF32A16CEDD@communications> > I've tried compiling nightly with several options and I always get the > same parse

errors. > mapraster.c: In function `msDrawRasterLayer': > mapraster.c:1698: parse error before `{' It's a typo related to a change I made last week. It was a missing bracket inside an #ifdef'd case that was never compiled in my case. I've committed a fix, so please do a CVS update and try again.

• The ListServ is very active and very responsive

• Messages are archived and searchable

• I usually get a response to my problem in in hour or less

Comparison--Support

• MapServer is completely free.

• It is free from cost

• You are free to modify the source code

• As people make changes or develop enhancements they are committed to the development tree.

• This is how the product grows so rapidly

Comparison—Cost

Recent Developments

• Major advancements in Web Mapping Services.

• Ability to handle .axl requests from ArcGIS

What to consider

• Your “Need for Speed”

• Your in-house abilities

• Database connectivity

• GIS data formats

• Your budget

Resources

• http://gis.vedp.org (“about this site” link)

• DM Solutions (PHP MapScript) (http://www.dmsolutions.on.ca/)

• ApacheToolbox (http://www.apachetoolbox.com)

• Google (http://www.google.com) which runs on a Linux cluster .