<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.osgeo.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wiki-Nhermann</id>
	<title>OSGeo - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.osgeo.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wiki-Nhermann"/>
	<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/wiki/Special:Contributions/Wiki-Nhermann"/>
	<updated>2026-04-05T14:37:04Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.9</generator>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Live_GIS_Disc&amp;diff=29378</id>
		<title>Live GIS Disc</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Live_GIS_Disc&amp;diff=29378"/>
		<updated>2008-09-21T14:25:41Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Nhermann: /* Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=FOSS4G 2008 LiveDVD=&lt;br /&gt;
== Goal ==&lt;br /&gt;
&lt;br /&gt;
To create a live CD\DVD with as much OSGEO software as possible to be used in workshops, as handouts at conferences and to demonstrate a full functioning FOSS GIS stack.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Download the live DVD from here: http://download.osgeo.org/livedvd/ .&lt;br /&gt;
&lt;br /&gt;
== FOSS4G 2008 LiveDVD Contents ==&lt;br /&gt;
'''Applications:'''&lt;br /&gt;
{|border=1&lt;br /&gt;
|-&lt;br /&gt;
|GeoServer 1.6.4&lt;br /&gt;
|GDAL 1.5.0&lt;br /&gt;
|GRASS 6.3.0&lt;br /&gt;
|-&lt;br /&gt;
|gvSIG 1.1.1&lt;br /&gt;
|Java 1.6.0&lt;br /&gt;
|PgAdmin 1.6.3&lt;br /&gt;
|-&lt;br /&gt;
|PostGIS 1.3.1&lt;br /&gt;
|PostgreSQL 8.3.1&lt;br /&gt;
|Proj 4.5.0&lt;br /&gt;
|-&lt;br /&gt;
|QGIS 0.11.0&lt;br /&gt;
|R 2.4.1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Windows Installers:'''&lt;br /&gt;
{|border=1&lt;br /&gt;
|-&lt;br /&gt;
|FWTools 2.2.1&lt;br /&gt;
|gvSIG 1.1.1&lt;br /&gt;
|-&lt;br /&gt;
|ms4w 2.2.8&lt;br /&gt;
|QGIS 0.11.0&lt;br /&gt;
|-&lt;br /&gt;
|WinGRASS 6.3.0&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Data:&lt;br /&gt;
{|border=1&lt;br /&gt;
|-&lt;br /&gt;
|North Carolina GRASS Dataset&lt;br /&gt;
|QGIS Alaskan Dataset&lt;br /&gt;
|Spearfish&lt;br /&gt;
|-&lt;br /&gt;
|Tasmania Dataset&lt;br /&gt;
|US States&lt;br /&gt;
|NYC Dataset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Development=&lt;br /&gt;
==Communication==&lt;br /&gt;
&lt;br /&gt;
* Communication on the [http://lists.alioth.debian.org/mailman/listinfo/pkg-grass-general Debian GIS list]&lt;br /&gt;
* IRC will be on irc://freenode.net#osgeo&lt;br /&gt;
* Logs:&lt;br /&gt;
** [http://logs.qgis.org/osgeo/%23osgeo.2008-09-11.log Kickoff discussion]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What exists as of September, 11 2008 ==&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Authors!!Distro Base!!Packages!!Building tool!!Link&lt;br /&gt;
|-&lt;br /&gt;
|Camptocamp &lt;br /&gt;
|Ubuntu: &lt;br /&gt;
|MapGuideOS, adding SDI?&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LisaSoft &lt;br /&gt;
|Ubuntu&lt;br /&gt;
|PostGIS, geoserver, gvsig&lt;br /&gt;
|[[LISAsoft-LiveCD process]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ominiverdi&lt;br /&gt;
|Xubuntu&lt;br /&gt;
| QGIS, Grass, PostGIS, GDAL, R&lt;br /&gt;
|[http://uck.sourceforge.net/ UCK]&lt;br /&gt;
|[http://livecd.ominiverdi.org/index.php?page=LiveCD&amp;amp;toc=livecd Omini Edu Live]&lt;br /&gt;
|-&lt;br /&gt;
|Gvsig&lt;br /&gt;
|Knoppix &lt;br /&gt;
|Postgis, geoserver, deegree, geonetwork&lt;br /&gt;
|&lt;br /&gt;
|[http://www.gvsig.gva.es/index.php?id=1992&amp;amp;L=0&amp;amp;K=1 gvsig live]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Live DVD for [[FOSS4G2008]] ==&lt;br /&gt;
&lt;br /&gt;
* DVD in size (not CD)&lt;br /&gt;
* '''Base Distribution:''' Xubuntu&lt;br /&gt;
* We will start from the Ominiverdi [http://download.osgeo.org/livedvd/ image]&lt;br /&gt;
* LISAsoft will add Geoserver and hopefully other java packages&lt;br /&gt;
&lt;br /&gt;
===Testing===&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Who did testing!!ISO Image!!Results!!Machines&lt;br /&gt;
|-&lt;br /&gt;
| Cameron Shorter&lt;br /&gt;
| FOSS4G-2008-LiveDVD-Alpha2.iso  &lt;br /&gt;
| Loaded fine, didn't note any problems with images &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Wildintellect|Alex Mandel]]&lt;br /&gt;
| FOSS4G-2008-LiveDVD-Alpha3_4.iso&lt;br /&gt;
| Loaded ok, no login problems. QGIS ok, sampledata ok, Mapserver appears to be working but the desktop icon doesn't go to anything useful, actually goes to an error page saying that no query was provided.&lt;br /&gt;
| VMWare Beta 2 on Ubuntu 8.04 amd64&lt;br /&gt;
|-&lt;br /&gt;
| [[User:darkblue_b|Brian Hamlin]]&lt;br /&gt;
| FOSS4G-2008-LiveDVD-Alpha3_4.iso&lt;br /&gt;
|PGAdmin/psql, QGis Pg layers, ok.. ''GeoServer MapPreview of Alaska Layer in OpenLayers shows no results??''&lt;br /&gt;
| MacBook,  VirtualBox 2 on amd64&lt;br /&gt;
|-&lt;br /&gt;
| [[User:nhermann|Nicol Hermann]]&lt;br /&gt;
| FOSS4G-2008-LiveDVD-Alpha3_4.iso&lt;br /&gt;
| Loading OK. Missing raster layer in gvSIG project, unsure what password to use for postgis ODBC connection during gvSIG startup. I found no logout/shoutdown link on the Desktop. Does this happen intentionally?&lt;br /&gt;
| Lenovo T60, WLAN was not detected&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DVD Burning ===&lt;br /&gt;
Requirements:&lt;br /&gt;
* Burn onto a DVD&lt;br /&gt;
* Graphics to be printed onto the other side with a suitable logo and contents. A simple one colour print run will be sufficient.&lt;br /&gt;
* Target print run of at least 100. If budget permits, 250 would be better. It would be good to give one to all local delegates who want one.&lt;br /&gt;
&lt;br /&gt;
Timeline:&lt;br /&gt;
* We need to know when we need to hand over the ISO image so that it can be burned.&lt;br /&gt;
* The more time we have, the more testing we can do on the image and the more polished it will be.&lt;br /&gt;
** We can hand the image over on Tuesday 23 September, but would prefer if we had till Thursday 2 October.&lt;br /&gt;
&lt;br /&gt;
Potential Printers:&lt;br /&gt;
&lt;br /&gt;
From the 2008 Local Organising Committee:&lt;br /&gt;
* Heindrich Du Plessis&lt;br /&gt;
* Burnie / Inge, have a list of service providers that is being used for the conference CDs?&lt;br /&gt;
&lt;br /&gt;
Tim Bowden has found someone as well ...&lt;br /&gt;
&lt;br /&gt;
=== Build Process ===&lt;br /&gt;
&lt;br /&gt;
=== LiveCD for FOSS4G2008 Schedule ===&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Date!!Milestone!!Responsible&lt;br /&gt;
|-&lt;br /&gt;
|| Fr 12 Sept || &amp;lt;s&amp;gt;IRC kickoff meeting&amp;lt;/s&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|| Fr 19 Sept || &amp;lt;s&amp;gt;Draft ISO to be released for testing (feature freeze)&amp;lt;/s&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|| We 24 Sept || Final ISO complete ||&lt;br /&gt;
|-&lt;br /&gt;
|| Th 25 Sept || Burn CDs || Tim Bowden&lt;br /&gt;
|-&lt;br /&gt;
|| Mo 29 Sept || FOSS4G 2008 Starts||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Who's helping ===&lt;br /&gt;
* LISAsoft can provide equivalent of 1 resource, split between Mark Leslie, Stefan Hansen, Volker Mische, &amp;amp; Cameron Shorter.&lt;br /&gt;
* jsanz, chevi&lt;br /&gt;
* wildintellect have offered 2 days&lt;br /&gt;
* Tim Bowden is looking into CD burning&lt;br /&gt;
* Luca Casagrande and Ominiverdi Family&lt;br /&gt;
* [[HamishBowman]] can provide DebianGIS integration help&lt;br /&gt;
* ... (add your name)&lt;br /&gt;
&lt;br /&gt;
== Long Term Plan ==&lt;br /&gt;
Not discussed yet. To be considered at the FOSS4G BOF? &lt;br /&gt;
http://wiki.osgeo.org/wiki/FOSS4G2008_BOF_Sessions&lt;br /&gt;
&lt;br /&gt;
Suggestions:&lt;br /&gt;
* Next updated release for [[GIS Day 2008]], November 19th&lt;br /&gt;
**Include QGIS 1.0&lt;br /&gt;
* Addition of some more python tools: &lt;br /&gt;
**OGR&lt;br /&gt;
**Shapely&lt;br /&gt;
**Featureserver &lt;br /&gt;
**Tilecache&lt;br /&gt;
* Add JTS-1.8.0, with a script to launch the TestBuilder as a demo&lt;br /&gt;
&lt;br /&gt;
== Links to related projects ==&lt;br /&gt;
&lt;br /&gt;
* [http://wiki.debian.org/DebianGis/LiveImages DebianGIS Live Image]&lt;br /&gt;
: [http://svn.debian.org/wsvn/pkg-grass/packages/debian-gis/?rev=0&amp;amp;sc=0 build scripts in SVN]&lt;br /&gt;
* [http://livecd.ominiverdi.org/index.php?page=LiveCD&amp;amp;toc=livecd Omniverdi LiveCD project]&lt;br /&gt;
* [http://grass.osgeo.org/download/cdrom.php List of live CDs from the GRASS download site]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links to Build tool options ==&lt;br /&gt;
* [http://packages.debian.org/sid/live-helper live-helper]&lt;br /&gt;
* [http://www.gnewsense.org/Builder/HowToCreateYourOwnGNULinuxDistribution Gnewsense method]&lt;br /&gt;
* [http://www.howtoforge.com/ubuntu-linux-mint-livecd-with-remastersys Remastersys]&lt;br /&gt;
* [http://www.debuntu.org/how-to-customize-your-ubuntu-live-cd Debian\Ubuntu Tricks]&lt;br /&gt;
* [https://help.ubuntu.com/community/LiveCDCustomization Ubuntu Help Way]&lt;/div&gt;</summary>
		<author><name>Wiki-Nhermann</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=HBUMNMapServer_ger&amp;diff=24899</id>
		<title>HBUMNMapServer ger</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=HBUMNMapServer_ger&amp;diff=24899"/>
		<updated>2008-05-12T11:58:51Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Nhermann: /* Inhaltsverzeichnis des 'neuen' Handbuchs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Links =&lt;br /&gt;
* [[UMNHB_ger_Lizenzen | Klärung der Lizenzfrage]]&lt;br /&gt;
* [[ Komitee_f%C3%BCr_Bildung_und_Dokumentationserstellung | Komitee für Bildung und Dokumentationserstellung ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Inhaltsverzeichnis des 'aktuellen' Handbuchs =&lt;br /&gt;
&lt;br /&gt;
1 Einfährung&amp;lt;br&amp;gt;&lt;br /&gt;
1.1 Aufbau dieses Buches&amp;lt;br&amp;gt;&lt;br /&gt;
1.2 Was ist ein Mapserver?&amp;lt;br&amp;gt;&lt;br /&gt;
1.2.1 Vorteile des UMN MapServer&amp;lt;br&amp;gt;&lt;br /&gt;
1.3 Die verschiedenen Funktionsweisen&amp;lt;br&amp;gt;&lt;br /&gt;
1.3.1 MapServer als CGI&amp;lt;br&amp;gt;&lt;br /&gt;
1.3.2 MapServer OGC-konform&amp;lt;br&amp;gt;&lt;br /&gt;
1.3.3 MapScript&amp;lt;br&amp;gt;&lt;br /&gt;
1.3.4 ChangeLog&amp;lt;br&amp;gt;&lt;br /&gt;
1.4 Migration&amp;lt;br&amp;gt;&lt;br /&gt;
1.5 Danksagung&amp;lt;br&amp;gt;&lt;br /&gt;
2 Mapﬁle&amp;lt;br&amp;gt;&lt;br /&gt;
2.1 Bedeutung des Mapﬁles&amp;lt;br&amp;gt;&lt;br /&gt;
2.1.1 MapServer als CGI&amp;lt;br&amp;gt;&lt;br /&gt;
2.1.2 Die Modi&amp;lt;br&amp;gt;&lt;br /&gt;
2.1.3 Die weiteren Parameter&amp;lt;br&amp;gt;&lt;br /&gt;
2.2 Grundlegender Aufbau des Mapﬁles&amp;lt;br&amp;gt;&lt;br /&gt;
2.3 Der Header&amp;lt;br&amp;gt;&lt;br /&gt;
2.4 Die Web-Sektion&amp;lt;br&amp;gt;&lt;br /&gt;
2.5 Layer&amp;lt;br&amp;gt;&lt;br /&gt;
2.5.1 Gruppierungen von Layern&amp;lt;br&amp;gt;&lt;br /&gt;
2.5.2 Weitere Layer-Optionen&amp;lt;br&amp;gt;&lt;br /&gt;
2.6 Classes&amp;lt;br&amp;gt;&lt;br /&gt;
2.7 Styles&amp;lt;br&amp;gt;&lt;br /&gt;
2.8 Rasterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
2.8.1 Bildkataloge&amp;lt;br&amp;gt;&lt;br /&gt;
2.8.2 Rasterdaten klassiﬁzieren&amp;lt;br&amp;gt;&lt;br /&gt;
2.8.3 Umprojizieren von Rasterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
2.8.4 Rasterdaten mit GDAL&amp;lt;br&amp;gt;&lt;br /&gt;
2.9 Vektordaten &amp;lt;br&amp;gt;&lt;br /&gt;
2.9.1 Indizes für Shapeﬁles&amp;lt;br&amp;gt;&lt;br /&gt;
2.9.2 Graticule-Layer&amp;lt;br&amp;gt;&lt;br /&gt;
2.10 Projektionen&amp;lt;br&amp;gt;&lt;br /&gt;
2.10.1 Notation&amp;lt;br&amp;gt;&lt;br /&gt;
2.10.2 Orthographische Projektion&amp;lt;br&amp;gt;&lt;br /&gt;
2.10.3 Projektionen im realen Einsatz&amp;lt;br&amp;gt;&lt;br /&gt;
2.11 Schriften&amp;lt;br&amp;gt;&lt;br /&gt;
2.12 Annotationen &amp;lt;br&amp;gt;&lt;br /&gt;
2.12.1 Die Label-Sektion&amp;lt;br&amp;gt;&lt;br /&gt;
2.12.2 Bitmap-Schriften&amp;lt;br&amp;gt;&lt;br /&gt;
2.12.3 TrueType-Schriften&amp;lt;br&amp;gt;&lt;br /&gt;
2.12.4 Beschriftungen ohne Annotationslayer&amp;lt;br&amp;gt;&lt;br /&gt;
2.12.5 Der Label-Cache&amp;lt;br&amp;gt;&lt;br /&gt;
2.12.6 Hinweise&amp;lt;br&amp;gt;&lt;br /&gt;
2.13 Symbole &amp;lt;br&amp;gt;&lt;br /&gt;
2.13.1 TrueType-Symbole &amp;lt;br&amp;gt;&lt;br /&gt;
2.13.2 Pixmap-Symbole &amp;lt;br&amp;gt;&lt;br /&gt;
2.13.3 Overlay-Symbole &amp;lt;br&amp;gt;&lt;br /&gt;
2.13.4 Beispiele&amp;lt;br&amp;gt;&lt;br /&gt;
2.14 Maßst¨ abe &amp;lt;br&amp;gt;&lt;br /&gt;
2.15 Legenden &amp;lt;br&amp;gt;&lt;br /&gt;
2.15.1 Die klassische MapServer-Legende &amp;lt;br&amp;gt;&lt;br /&gt;
2.15.2 HTML-Legenden &amp;lt;br&amp;gt;&lt;br /&gt;
2.16 Templates &amp;lt;br&amp;gt;&lt;br /&gt;
2.16.1 Die verschiedenen Arten von Templates &amp;lt;br&amp;gt;&lt;br /&gt;
2.16.2 Aufbau &amp;lt;br&amp;gt;&lt;br /&gt;
2.17 Metadaten &amp;lt;br&amp;gt;&lt;br /&gt;
2.18 Queries &amp;lt;br&amp;gt;&lt;br /&gt;
2.18.1 Notation &amp;lt;br&amp;gt;&lt;br /&gt;
2.18.2 Query maps &amp;lt;br&amp;gt;&lt;br /&gt;
2.18.3 Weitere Arten von Queries &amp;lt;br&amp;gt;&lt;br /&gt;
2.19 PostgreSQL und PostGIS &amp;lt;br&amp;gt;&lt;br /&gt;
2.20 OGR &amp;lt;br&amp;gt;&lt;br /&gt;
2.21 Speziﬁkation von Ausgabeformaten &amp;lt;br&amp;gt;&lt;br /&gt;
2.21.1 Rasterbilder &amp;lt;br&amp;gt;&lt;br /&gt;
2.21.2 Vektorformate &amp;lt;br&amp;gt;&lt;br /&gt;
2.22 Features &amp;lt;br&amp;gt;&lt;br /&gt;
2.22.1 Fix positionierte Elemente .&amp;lt;br&amp;gt;&lt;br /&gt;
2.23 CGI-Parameter &amp;lt;br&amp;gt;&lt;br /&gt;
2.23.1 Parameter einschr¨ anken .&amp;lt;br&amp;gt;&lt;br /&gt;
2.23.2 Variablensubstitution &amp;lt;br&amp;gt;&lt;br /&gt;
3 OGC-Konformit¨ at &lt;br /&gt;
3.1 Warum macht man das? &amp;lt;br&amp;gt;&lt;br /&gt;
3.2 Web Mappping Server (WMS) &amp;lt;br&amp;gt;&lt;br /&gt;
3.2.1 Servermodi .&amp;lt;br&amp;gt;&lt;br /&gt;
3.2.2 Der aufrufende URL &amp;lt;br&amp;gt;&lt;br /&gt;
3.2.3 WMS-Metadaten im Mapﬁle .&amp;lt;br&amp;gt;&lt;br /&gt;
3.2.4 Exceptions &amp;lt;br&amp;gt;&lt;br /&gt;
3.2.5 getFeatureInfo &amp;lt;br&amp;gt;&lt;br /&gt;
3.2.6 WMS Clients &amp;lt;br&amp;gt;&lt;br /&gt;
3.2.7 Exceptions&amp;lt;br&amp;gt;&lt;br /&gt;
3.2.8 Hinweise &amp;lt;br&amp;gt;&lt;br /&gt;
3.3 Web Feature Server (WFS) &amp;lt;br&amp;gt;&lt;br /&gt;
3.3.1 WFS Server &amp;lt;br&amp;gt;&lt;br /&gt;
3.3.2 Projektionen in WFS-Servern &amp;lt;br&amp;gt;&lt;br /&gt;
3.3.3 Schemas&amp;lt;br&amp;gt;&lt;br /&gt;
3.3.4 Aufruf &amp;amp; Capabilities &amp;lt;br&amp;gt;&lt;br /&gt;
3.3.5 WFS Client &amp;lt;br&amp;gt;&lt;br /&gt;
3.4 Map Context&amp;lt;br&amp;gt;&lt;br /&gt;
3.4.1 Das Context-Dokument &amp;lt;br&amp;gt;&lt;br /&gt;
3.4.2 Den Kontext verwenden &amp;lt;br&amp;gt;&lt;br /&gt;
4 Datenbankanbindungen &amp;lt;br&amp;gt;&lt;br /&gt;
4.1 PostgreSQL und PostGIS .&amp;lt;br&amp;gt;&lt;br /&gt;
4.1.1 Shapeﬁles in PostGIS laden &amp;lt;br&amp;gt;&lt;br /&gt;
4.1.2 Notation in Layern &amp;lt;br&amp;gt;&lt;br /&gt;
4.1.3 PostGIS außerhalb des MapServers &amp;lt;br&amp;gt;&lt;br /&gt;
5 Demos &amp;lt;br&amp;gt;&lt;br /&gt;
5.1 Itasca &amp;lt;br&amp;gt;&lt;br /&gt;
5.2 GMap &amp;lt;br&amp;gt;&lt;br /&gt;
6 MapScript&amp;lt;br&amp;gt;&lt;br /&gt;
6.1 PHP MapScript &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.1 Laden des Moduls &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.2 Setzen von Objekt-Eigenschaften .&amp;lt;br&amp;gt;&lt;br /&gt;
6.1.3 Formulareingaben in PHP verarbeiten&amp;lt;br&amp;gt;&lt;br /&gt;
6.1.4 Die mapObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.5 Fehlerbehandlung &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.6 Die layerObj-Klasse&amp;lt;br&amp;gt;&lt;br /&gt;
6.1.7 Die classObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.8 Die imageObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.9 Die labelObj-Klasse&amp;lt;br&amp;gt;&lt;br /&gt;
6.1.10 Die webObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.11 Die referenceMapObj-Klasse&amp;lt;br&amp;gt;&lt;br /&gt;
6.1.12 Die colorObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.13 Die pointObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.14 Die lineObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.15 Die projectionObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.16 Die shapeﬁleObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.17 Struktur von PHP MapScript-Seiten &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.18 Speichern von Map-Objekten in PHP-Sessions &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.19 Speicherverwaltung mit MapScript &amp;lt;br&amp;gt;&lt;br /&gt;
6.2 Weitere Sprachen &amp;lt;br&amp;gt;&lt;br /&gt;
6.2.1 Perl &amp;lt;br&amp;gt;&lt;br /&gt;
6.2.2 Java &amp;lt;br&amp;gt;&lt;br /&gt;
6.2.3 Python &amp;lt;br&amp;gt;&lt;br /&gt;
7 Zus¨ atzliche Werkzeuge &amp;lt;br&amp;gt;&lt;br /&gt;
7.1 Werkzeuge der Bibliothek Shapelib &amp;lt;br&amp;gt;&lt;br /&gt;
7.1.1 shpdump &amp;lt;br&amp;gt;&lt;br /&gt;
7.1.2 shpcreate, shpadd, dbfcreate und dbfadd &amp;lt;br&amp;gt;&lt;br /&gt;
7.1.3 dbfdump &amp;lt;br&amp;gt;&lt;br /&gt;
7.1.4 shpinfo &amp;lt;br&amp;gt;&lt;br /&gt;
7.1.5 dbﬁnfo &amp;lt;br&amp;gt;&lt;br /&gt;
7.2 Werkzeuge des MapServers&amp;lt;br&amp;gt;&lt;br /&gt;
7.2.1 shp2img&amp;lt;br&amp;gt;&lt;br /&gt;
7.2.2 shptree &amp;lt;br&amp;gt;&lt;br /&gt;
7.2.3 shptreevis &amp;lt;br&amp;gt;&lt;br /&gt;
7.3 Werkzeuge der GDAL-Bibliothek &amp;lt;br&amp;gt;&lt;br /&gt;
7.3.1 gdaltindex .&amp;lt;br&amp;gt;&lt;br /&gt;
II Anhang &amp;lt;br&amp;gt;&lt;br /&gt;
A Referenz &amp;lt;br&amp;gt;&lt;br /&gt;
A.1 Limits &amp;lt;br&amp;gt;&lt;br /&gt;
A.2 Organisation der Daten &amp;lt;br&amp;gt;&lt;br /&gt;
A.3 ¨ Anderungen &amp;lt;br&amp;gt;&lt;br /&gt;
A.3.1 3.6 nach 4.0&amp;lt;br&amp;gt;&lt;br /&gt;
A.3.2 3.5 nach 3.6&amp;lt;br&amp;gt;&lt;br /&gt;
A.4 PHP MapScript &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.1 Konstanten &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.2 Allgemeine Funktionen &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.3 mapObj&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.4 layerObj .&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.5 classObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.6 styleObj&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.7 imageObj&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.8 labelObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.9 labelCacheObj .&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.10 webObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.11 referenceMapObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.12 colorObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.13 pointObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.14 lineObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.15 rectObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.16 shapeObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.17 projectionObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.18 shapeﬁleObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.19 resultCacheMemberObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.20 scalebarObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.21 legendObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.22 outputformatObj .&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.23 gridObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.24 errorObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.5 CGI-Parameter &amp;lt;br&amp;gt;&lt;br /&gt;
A.5.1 Normale Parameter .&amp;lt;br&amp;gt;&lt;br /&gt;
A.5.2 CGI-Modus .&amp;lt;br&amp;gt;&lt;br /&gt;
A.5.3 Parameter für Java-Applets &amp;lt;br&amp;gt;&lt;br /&gt;
B Bezug und Installation &amp;lt;br&amp;gt;&lt;br /&gt;
B.1 Bezug &amp;lt;br&amp;gt;&lt;br /&gt;
B.1.1 Vorkompiliert &amp;lt;br&amp;gt;&lt;br /&gt;
B.1.2 Quelltexte &amp;lt;br&amp;gt;&lt;br /&gt;
B.1.3 ¨ Anderungen &amp;lt;br&amp;gt;&lt;br /&gt;
B.1.4 CVS . &amp;lt;br&amp;gt;&lt;br /&gt;
B.2 Installation von Binaries &amp;lt;br&amp;gt;&lt;br /&gt;
B.2.1 Binaries für Windows&amp;lt;br&amp;gt;&lt;br /&gt;
B.2.2 Binaries für Linux . . . &amp;lt;br&amp;gt;&lt;br /&gt;
B.3 Die MapMedia MapServer Suite &amp;lt;br&amp;gt;&lt;br /&gt;
B.4 Kompilieren der Quelltexte &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.1 GD &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.2 Proj.4-Unterstüzung &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.3 EPPL7-Unterstützung &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.4 Funktionalit¨ at als WMS-Server &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.5 Funktionalit¨ at als WMS-Client &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.6 Funktionalit¨ at als WFS-Server &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.7 Funktionalit¨ at als WFS-Client&amp;lt;br&amp;gt;&lt;br /&gt;
B.4.8 Unterstützung für PostGIS &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.9 GDAL und OGR &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.10 Unterstützung für PDF-Output&amp;lt;br&amp;gt;&lt;br /&gt;
B.4.11 Unterstützung für Shockwave Flash &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.12 Kompilieren des MapServers&amp;lt;br&amp;gt;&lt;br /&gt;
B.5 MapScript &amp;lt;br&amp;gt;&lt;br /&gt;
B.5.1 Binaries . . &amp;lt;br&amp;gt;&lt;br /&gt;
B.5.2 Aus den Quellen &amp;lt;br&amp;gt;&lt;br /&gt;
C Migration 239&lt;br /&gt;
C.1 Von Version 3.6 nach Version 4.0&amp;lt;br&amp;gt;&lt;br /&gt;
C.1.1 Geänderte und neue Parameter &amp;lt;br&amp;gt;&lt;br /&gt;
C.1.2 MapServer kompilieren &amp;lt;br&amp;gt;&lt;br /&gt;
C.1.3 Queries &amp;lt;br&amp;gt;&lt;br /&gt;
C.1.4 Diverse Probleme&amp;lt;br&amp;gt;&lt;br /&gt;
C.1.5 MapScript &amp;lt;br&amp;gt;&lt;br /&gt;
D Sicherheit&amp;lt;br&amp;gt;&lt;br /&gt;
D.1 Komprommittierung des MapServer-Rechners &amp;lt;br&amp;gt;&lt;br /&gt;
D.2 Zugänglichkeit der Originaldaten &amp;lt;br&amp;gt;&lt;br /&gt;
D.3 Verschleiern des Mapﬁlenamens &amp;lt;br&amp;gt;&lt;br /&gt;
D.4 MapScript-Anwendungen&amp;lt;br&amp;gt;&lt;br /&gt;
D.5 Die Clientseite: Active Scripting &amp;lt;br&amp;gt;&lt;br /&gt;
E Tips zur Performance &amp;lt;br&amp;gt;&lt;br /&gt;
E.1 Vermeiden Sie unn¨ otige Funktionalität&amp;lt;br&amp;gt;&lt;br /&gt;
E.2 Nutzen Sie MINSCALE und MAXSCALE &amp;lt;br&amp;gt;&lt;br /&gt;
E.3 Legen Sie Indizes an &amp;lt;br&amp;gt;&lt;br /&gt;
E.4 Kacheln Sie Ihre Daten &amp;lt;br&amp;gt;&lt;br /&gt;
E.5 Kompression muß verstanden werden &amp;lt;br&amp;gt;&lt;br /&gt;
E.6 Datenbankabfragen .&amp;lt;br&amp;gt;&lt;br /&gt;
E.7 Hardware &amp;lt;br&amp;gt;&lt;br /&gt;
E.8 Schließlich: Zeigen Sie nie alles auf einmal&amp;lt;br&amp;gt;&lt;br /&gt;
F Unterstützte Formate&amp;lt;br&amp;gt;&lt;br /&gt;
F.1 Lesbare Formate&amp;lt;br&amp;gt;&lt;br /&gt;
F.1.1 GD &amp;lt;br&amp;gt;&lt;br /&gt;
F.1.2 Räumliche Datenbanken &amp;lt;br&amp;gt;&lt;br /&gt;
F.1.3 Rasterformate mit GDAL &amp;lt;br&amp;gt;&lt;br /&gt;
F.1.4 Vektorformate mit OGR &amp;lt;br&amp;gt;&lt;br /&gt;
F.2 Schreibbare Formate &amp;lt;br&amp;gt;&lt;br /&gt;
F.3 Nicht unterstützte Formate&amp;lt;br&amp;gt;&lt;br /&gt;
G MapServer im Internet&amp;lt;br&amp;gt;&lt;br /&gt;
G.1 Website &amp;lt;br&amp;gt;&lt;br /&gt;
G.2 Mailinglisten &amp;lt;br&amp;gt;&lt;br /&gt;
G.2.1 Archiv &amp;lt;br&amp;gt;&lt;br /&gt;
G.2.2 Wiki &amp;lt;br&amp;gt;&lt;br /&gt;
G.3 Beispielseiten &amp;lt;br&amp;gt;&lt;br /&gt;
G.3.1 Capabilities XML &amp;lt;br&amp;gt;&lt;br /&gt;
H Lizenz der Software &amp;lt;br&amp;gt;&lt;br /&gt;
H.1 Die Lizenz aus der Datei README &amp;lt;br&amp;gt;&lt;br /&gt;
H.2 Erläuterungen&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Inhaltsverzeichnis aus der internationalen Diskussion =&lt;br /&gt;
&lt;br /&gt;
Kurzes Update zum internationalen User Manual (09.04.2008). Jeff McKenna hat gestern ein PDF mit dem ersten Entwurf des Buches veröffentlicht. Der Entwurf umfasst 134 Seiten und ist unter der Adresse: &lt;br /&gt;
http://download.osgeo.org/mapserver/docs/mapserver-users-manual.pdf (1MB)&lt;br /&gt;
einsehbar.&lt;br /&gt;
&lt;br /&gt;
Some comments:&lt;br /&gt;
&lt;br /&gt;
- has gaping holes &amp;lt;br&amp;gt;&lt;br /&gt;
- plan is to use SteveL's demo as part of the missing 'application' section &amp;lt;br&amp;gt;&lt;br /&gt;
- most if not all examples in this doc were manually executed, and in many cases i've updated the associated existing website docs accordingly &amp;lt;br&amp;gt;&lt;br /&gt;
- many more existing website docs will be ported into the Appendix &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier die Zusammenfassung zum Thread 'Feedback required: plans for Downloadable Users Manual' auf der mapserver-dev Liste. &lt;br /&gt;
Der Original-Thread findet sich unter:&lt;br /&gt;
http://www.nabble.com/Feedback-required:-plans-for-Downloadable-Users-Manual-td16260533.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Vorgeschlagen wurde zunächst folgende Struktur: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Table of Contents &amp;lt;br&amp;gt;&lt;br /&gt;
-----------------&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Introduction &amp;lt;br&amp;gt;&lt;br /&gt;
Getting Started &amp;lt;br&amp;gt;&lt;br /&gt;
- Installing &amp;lt;br&amp;gt;&lt;br /&gt;
- Architecture of MapServer &amp;lt;br&amp;gt;&lt;br /&gt;
Preparing Data &amp;lt;br&amp;gt;&lt;br /&gt;
- The .Map File &amp;lt;br&amp;gt;&lt;br /&gt;
- Supported Formats &amp;lt;br&amp;gt;&lt;br /&gt;
- Tips and Tricks &amp;lt;br&amp;gt;&lt;br /&gt;
- Factors Affecting Performance &amp;lt;br&amp;gt;&lt;br /&gt;
Building a MapServer Application &amp;lt;br&amp;gt;&lt;br /&gt;
- Flavors &amp;lt;br&amp;gt;&lt;br /&gt;
- Example Code &amp;lt;br&amp;gt;&lt;br /&gt;
Community &amp;lt;br&amp;gt;&lt;br /&gt;
- History of MapServer &amp;lt;br&amp;gt;&lt;br /&gt;
- Project Steering Committee &amp;lt;br&amp;gt;&lt;br /&gt;
- Contributing &amp;lt;br&amp;gt;&lt;br /&gt;
- Getting Help &amp;lt;br&amp;gt;&lt;br /&gt;
- Conferences/Workshops&lt;br /&gt;
Glossary &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als inhaltliche Ergänzungen wurden dann noch folgende Punkte vorgeschlagen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
- client software (ka-map!, OpenLayers, GeoMoose, PMapper, etc.) &amp;lt;br&amp;gt;&lt;br /&gt;
- map file management software (MapStorer, any others)&amp;lt;br&amp;gt;&lt;br /&gt;
- including copies of all HOWTOs and references in the appendices? &amp;lt;br&amp;gt;&lt;br /&gt;
- configuration of an application and data.&amp;lt;br&amp;gt;&lt;br /&gt;
- include a complete production sample mapfile like Bob Basques Googlish mapfile &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Inhaltsverzeichnis des 'neuen' Handbuchs =&lt;br /&gt;
&lt;br /&gt;
- Änderungen bitte unter das jeweilige Thema fett schreiben &amp;lt;br&amp;gt;&lt;br /&gt;
- Zuständigkeiten / Autoren im besten Fall mit angeben &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1 Einführung&amp;lt;br&amp;gt;&lt;br /&gt;
1.1 Aufbau dieses Buches&amp;lt;br&amp;gt;&lt;br /&gt;
1.2 Was ist ein Mapserver?&amp;lt;br&amp;gt;&lt;br /&gt;
1.2.1 Vorteile des UMN MapServer&amp;lt;br&amp;gt;&lt;br /&gt;
1.3 Die verschiedenen Funktionsweisen&amp;lt;br&amp;gt;&lt;br /&gt;
1.3.1 MapServer als CGI&amp;lt;br&amp;gt;&lt;br /&gt;
1.3.2 MapServer OGC-konform&amp;lt;br&amp;gt;&lt;br /&gt;
1.3.3 MapScript&amp;lt;br&amp;gt;&lt;br /&gt;
1.3.4 ChangeLog&amp;lt;br&amp;gt;&lt;br /&gt;
1.4 Migration&amp;lt;br&amp;gt;&lt;br /&gt;
1.5 Danksagung&amp;lt;br&amp;gt;&lt;br /&gt;
2 Mapﬁle&amp;lt;br&amp;gt;&lt;br /&gt;
2.1 Bedeutung des Mapﬁles&amp;lt;br&amp;gt;&lt;br /&gt;
2.1.1 MapServer als CGI&amp;lt;br&amp;gt;&lt;br /&gt;
2.1.2 Die Modi&amp;lt;br&amp;gt;&lt;br /&gt;
2.1.3 Die weiteren Parameter&amp;lt;br&amp;gt;&lt;br /&gt;
2.2 Grundlegender Aufbau des Mapﬁles&amp;lt;br&amp;gt;&lt;br /&gt;
2.3 Der Header&amp;lt;br&amp;gt;&lt;br /&gt;
2.4 Die Web-Sektion&amp;lt;br&amp;gt;&lt;br /&gt;
2.5 Layer&amp;lt;br&amp;gt;&lt;br /&gt;
2.5.1 Gruppierungen von Layern&amp;lt;br&amp;gt;&lt;br /&gt;
2.5.2 Weitere Layer-Optionen&amp;lt;br&amp;gt;&lt;br /&gt;
'''2.5.3 Diagramme (Kai Behncke? / Nicol Hermann)''' &amp;lt;br&amp;gt;&lt;br /&gt;
2.6 Classes&amp;lt;br&amp;gt;&lt;br /&gt;
2.7 Styles&amp;lt;br&amp;gt;&lt;br /&gt;
2.8 Rasterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
2.8.1 Bildkataloge&amp;lt;br&amp;gt;&lt;br /&gt;
2.8.2 Rasterdaten klassiﬁzieren&amp;lt;br&amp;gt;&lt;br /&gt;
2.8.3 Umprojizieren von Rasterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
2.8.4 Rasterdaten mit GDAL&amp;lt;br&amp;gt;&lt;br /&gt;
2.9 Vektordaten &amp;lt;br&amp;gt;&lt;br /&gt;
2.9.1 Indizes für Shapeﬁles&amp;lt;br&amp;gt;&lt;br /&gt;
2.9.2 Graticule-Layer&amp;lt;br&amp;gt;&lt;br /&gt;
2.10 Projektionen&amp;lt;br&amp;gt;&lt;br /&gt;
2.10.1 Notation&amp;lt;br&amp;gt;&lt;br /&gt;
2.10.2 Orthographische Projektion&amp;lt;br&amp;gt;&lt;br /&gt;
2.10.3 Projektionen im realen Einsatz&amp;lt;br&amp;gt;&lt;br /&gt;
2.11 Schriften&amp;lt;br&amp;gt;&lt;br /&gt;
2.12 Annotationen &amp;lt;br&amp;gt;&lt;br /&gt;
2.12.1 Die Label-Sektion&amp;lt;br&amp;gt;&lt;br /&gt;
2.12.2 Bitmap-Schriften&amp;lt;br&amp;gt;&lt;br /&gt;
2.12.3 TrueType-Schriften&amp;lt;br&amp;gt;&lt;br /&gt;
2.12.4 Beschriftungen ohne Annotationslayer&amp;lt;br&amp;gt;&lt;br /&gt;
2.12.5 Der Label-Cache&amp;lt;br&amp;gt;&lt;br /&gt;
2.12.6 Hinweise&amp;lt;br&amp;gt;&lt;br /&gt;
2.13 Symbole &amp;lt;br&amp;gt;&lt;br /&gt;
2.13.1 TrueType-Symbole &amp;lt;br&amp;gt;&lt;br /&gt;
2.13.2 Pixmap-Symbole &amp;lt;br&amp;gt;&lt;br /&gt;
2.13.3 Overlay-Symbole &amp;lt;br&amp;gt;&lt;br /&gt;
2.13.4 Beispiele&amp;lt;br&amp;gt;&lt;br /&gt;
2.14 Maßstäbe &amp;lt;br&amp;gt;&lt;br /&gt;
2.15 Legenden &amp;lt;br&amp;gt;&lt;br /&gt;
2.15.1 Die klassische MapServer-Legende &amp;lt;br&amp;gt;&lt;br /&gt;
2.15.2 HTML-Legenden &amp;lt;br&amp;gt;&lt;br /&gt;
'''2.15.3 GetLegendGraphics Request''' ( evtl. auch bei WMS 3.2)&amp;lt;br&amp;gt;&lt;br /&gt;
2.16 Templates &amp;lt;br&amp;gt;&lt;br /&gt;
2.16.1 Die verschiedenen Arten von Templates &amp;lt;br&amp;gt;&lt;br /&gt;
2.16.2 Aufbau &amp;lt;br&amp;gt;&lt;br /&gt;
2.17 Metadaten &amp;lt;br&amp;gt;&lt;br /&gt;
2.18 Queries &amp;lt;br&amp;gt;&lt;br /&gt;
2.18.1 Notation &amp;lt;br&amp;gt;&lt;br /&gt;
2.18.2 Query maps &amp;lt;br&amp;gt;&lt;br /&gt;
2.18.3 Weitere Arten von Queries &amp;lt;br&amp;gt;&lt;br /&gt;
2.19 PostgreSQL und PostGIS &amp;lt;br&amp;gt;&lt;br /&gt;
2.20 OGR &amp;lt;br&amp;gt;&lt;br /&gt;
2.21 Speziﬁkation von Ausgabeformaten &amp;lt;br&amp;gt;&lt;br /&gt;
2.21.1 Rasterbilder &amp;lt;br&amp;gt;&lt;br /&gt;
2.21.2 Vektorformate &amp;lt;br&amp;gt;&lt;br /&gt;
2.22 Features &amp;lt;br&amp;gt;&lt;br /&gt;
2.22.1 Fix positionierte Elemente .&amp;lt;br&amp;gt;&lt;br /&gt;
2.23 CGI-Parameter &amp;lt;br&amp;gt;&lt;br /&gt;
2.23.1 Parameter einschr¨ anken .&amp;lt;br&amp;gt;&lt;br /&gt;
2.23.2 Variablensubstitution &amp;lt;br&amp;gt;&lt;br /&gt;
3 OGC-Konformit¨ at &lt;br /&gt;
3.1 Warum macht man das? &amp;lt;br&amp;gt;&lt;br /&gt;
3.2 Web Mappping Server (WMS) &amp;lt;br&amp;gt;&lt;br /&gt;
3.2.1 Servermodi .&amp;lt;br&amp;gt;&lt;br /&gt;
3.2.2 Der aufrufende URL &amp;lt;br&amp;gt;&lt;br /&gt;
3.2.3 WMS-Metadaten im Mapﬁle .&amp;lt;br&amp;gt;&lt;br /&gt;
3.2.4 Exceptions &amp;lt;br&amp;gt;&lt;br /&gt;
3.2.5 getFeatureInfo &amp;lt;br&amp;gt;&lt;br /&gt;
3.2.6 WMS Clients &amp;lt;br&amp;gt;&lt;br /&gt;
3.2.7 Exceptions&amp;lt;br&amp;gt;&lt;br /&gt;
'''3.2.8 Styled Layer Descriptor (SLD)''' &amp;lt;br&amp;gt;&lt;br /&gt;
3.2.9 Hinweise &amp;lt;br&amp;gt;&lt;br /&gt;
3.3 Web Feature Server (WFS) &amp;lt;br&amp;gt;&lt;br /&gt;
3.3.1 WFS Server &amp;lt;br&amp;gt;&lt;br /&gt;
3.3.2 Projektionen in WFS-Servern &amp;lt;br&amp;gt;&lt;br /&gt;
3.3.3 Schemas&amp;lt;br&amp;gt;&lt;br /&gt;
3.3.4 Aufruf &amp;amp; Capabilities &amp;lt;br&amp;gt;&lt;br /&gt;
3.3.5 WFS Client &amp;lt;br&amp;gt;&lt;br /&gt;
3.4 Map Context&amp;lt;br&amp;gt;&lt;br /&gt;
3.4.1 Das Context-Dokument &amp;lt;br&amp;gt;&lt;br /&gt;
3.4.2 Den Kontext verwenden &amp;lt;br&amp;gt;&lt;br /&gt;
4 Datenbankanbindungen &amp;lt;br&amp;gt;&lt;br /&gt;
4.1 PostgreSQL und PostGIS .&amp;lt;br&amp;gt;&lt;br /&gt;
4.1.1 Shapeﬁles in PostGIS laden &amp;lt;br&amp;gt;&lt;br /&gt;
4.1.2 Notation in Layern &amp;lt;br&amp;gt;&lt;br /&gt;
4.1.3 PostGIS außerhalb des MapServers &amp;lt;br&amp;gt;&lt;br /&gt;
'''4.1.3 PgRouting (Kai Behncke, Florian Thuerkow)''' &amp;lt;br&amp;gt;&lt;br /&gt;
'''4.1.4 Ein paar Worte zu MySQL, Oracle (Spatial) etc.''' &amp;lt;br&amp;gt;&lt;br /&gt;
5 Demos &amp;lt;br&amp;gt;&lt;br /&gt;
5.1 Itasca &amp;lt;br&amp;gt;&lt;br /&gt;
5.2 GMap &amp;lt;br&amp;gt;&lt;br /&gt;
6 MapScript&amp;lt;br&amp;gt;&lt;br /&gt;
6.1 PHP MapScript '''(Nicol Hermann)''' &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.1 Laden des Moduls &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.2 Setzen von Objekt-Eigenschaften .&amp;lt;br&amp;gt;&lt;br /&gt;
6.1.3 Formulareingaben in PHP verarbeiten&amp;lt;br&amp;gt;&lt;br /&gt;
6.1.4 Die mapObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.5 Fehlerbehandlung &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.6 Die layerObj-Klasse&amp;lt;br&amp;gt;&lt;br /&gt;
6.1.7 Die classObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
'''6.1.7.1 Dynamische Klassifizierungen ''' &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.8 Die imageObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.9 Die labelObj-Klasse&amp;lt;br&amp;gt;&lt;br /&gt;
6.1.10 Die webObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.11 Die referenceMapObj-Klasse&amp;lt;br&amp;gt;&lt;br /&gt;
6.1.12 Die colorObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.13 Die pointObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.14 Die lineObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.15 Die projectionObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.16 Die shapeﬁleObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
'''6.1.16.1 Dynamisches Erzeugen eines Shape-Files''' &amp;lt;br&amp;gt;&lt;br /&gt;
''' 6.1.17 Die SymbolObj-Klasse''' &amp;lt;br&amp;gt;&lt;br /&gt;
''' 6.1.17.1 Dynamisches Erzeugung von Symbol-Objekten''' &amp;lt;br&amp;gt;&lt;br /&gt;
'''6.1.18 Die ShapeObj Klasse ''' &amp;lt;br&amp;gt;&lt;br /&gt;
'''6.1.18.1 Feature-Anlage (Punkt-, Linien, Polygon-Objekte) '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''6.1.18.2 Geometrie-Verarbeibung mit PHP MapScript '''&amp;lt;br&amp;gt;&lt;br /&gt;
6.1.19 Struktur von PHP MapScript-Seiten &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.20 Speichern von Map-Objekten in PHP-Sessions &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.21 Speicherverwaltung mit MapScript &amp;lt;br&amp;gt;&lt;br /&gt;
'''6.1.22 OGC Konformität mit PHP MapScript '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''6.1.22.1 PHP Mapscript als WxS-Server''' &amp;lt;br&amp;gt;&lt;br /&gt;
'''6.1.22.2 Erzeugen und Laden von SLD-Dokumenten''' &amp;lt;br&amp;gt;&lt;br /&gt;
'''6.1.22.3 Erzeugen und Laden von WMS Map Context Dokumenten ''' &amp;lt;br&amp;gt;&lt;br /&gt;
'''6.1.23 Nutzung von PHP Mapscript ohne MapFile'''&amp;lt;br&amp;gt;&lt;br /&gt;
6.2 Weitere Sprachen &amp;lt;br&amp;gt;&lt;br /&gt;
6.2.1 Perl &amp;lt;br&amp;gt;&lt;br /&gt;
6.2.2 Java &amp;lt;br&amp;gt;&lt;br /&gt;
6.2.3 Python &amp;lt;br&amp;gt;&lt;br /&gt;
'''6.2.3 Mapservers goes Web 2.0 - AJAX mit msCross (Florian Thuerkow)''' &amp;lt;br&amp;gt;&lt;br /&gt;
7 Zusätzliche Werkzeuge &amp;lt;br&amp;gt;&lt;br /&gt;
7.1 Werkzeuge der Bibliothek Shapelib &amp;lt;br&amp;gt;&lt;br /&gt;
7.1.1 shpdump &amp;lt;br&amp;gt;&lt;br /&gt;
7.1.2 shpcreate, shpadd, dbfcreate und dbfadd &amp;lt;br&amp;gt;&lt;br /&gt;
7.1.3 dbfdump &amp;lt;br&amp;gt;&lt;br /&gt;
7.1.4 shpinfo &amp;lt;br&amp;gt;&lt;br /&gt;
7.1.5 dbﬁnfo &amp;lt;br&amp;gt;&lt;br /&gt;
7.2 Werkzeuge des MapServers&amp;lt;br&amp;gt;&lt;br /&gt;
7.2.1 shp2img&amp;lt;br&amp;gt;&lt;br /&gt;
7.2.2 shptree &amp;lt;br&amp;gt;&lt;br /&gt;
7.2.3 shptreevis &amp;lt;br&amp;gt;&lt;br /&gt;
7.3 Werkzeuge der GDAL/'''OGR'''-Bibliothek &amp;lt;br&amp;gt;&lt;br /&gt;
7.3.1 gdaltindex &amp;lt;br&amp;gt;&lt;br /&gt;
'''7.3.2 gdalinfo''' &amp;lt;br&amp;gt;&lt;br /&gt;
'''7.3.3 ogrinfo''' &amp;lt;br&amp;gt;&lt;br /&gt;
'''7.3.4 FWTools''' &amp;lt;br&amp;gt;&lt;br /&gt;
II Anhang &amp;lt;br&amp;gt;&lt;br /&gt;
A Referenz &amp;lt;br&amp;gt;&lt;br /&gt;
A.1 Limits &amp;lt;br&amp;gt;&lt;br /&gt;
A.2 Organisation der Daten &amp;lt;br&amp;gt;&lt;br /&gt;
A.3 Änderungen &amp;lt;br&amp;gt;&lt;br /&gt;
A.3.1 3.6 nach 4.0&amp;lt;br&amp;gt;&lt;br /&gt;
A.3.2 3.5 nach 3.6&amp;lt;br&amp;gt;&lt;br /&gt;
A.4 PHP MapScript &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.1 Konstanten &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.2 Allgemeine Funktionen &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.3 mapObj&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.4 layerObj .&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.5 classObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.6 styleObj&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.7 imageObj&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.8 labelObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.9 labelCacheObj .&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.10 webObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.11 referenceMapObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.12 colorObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.13 pointObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.14 lineObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.15 rectObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.16 shapeObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.17 projectionObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.18 shapeﬁleObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.19 resultCacheMemberObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.20 scalebarObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.21 legendObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.22 outputformatObj .&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.23 gridObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.24 errorObj &amp;lt;br&amp;gt;&lt;br /&gt;
'''A.4.25 symbolObj''' &amp;lt;br&amp;gt;&lt;br /&gt;
'''A.4.26 querymapObj''' &amp;lt;br&amp;gt;&lt;br /&gt;
'''A.4.27 owsrequestObj''' &amp;lt;br&amp;gt;&lt;br /&gt;
'''A.4.28 imageObj''' &amp;lt;br&amp;gt;&lt;br /&gt;
A.5 CGI-Parameter &amp;lt;br&amp;gt;&lt;br /&gt;
A.5.1 Normale Parameter .&amp;lt;br&amp;gt;&lt;br /&gt;
A.5.2 CGI-Modus .&amp;lt;br&amp;gt;&lt;br /&gt;
A.5.3 Parameter für Java-Applets &amp;lt;br&amp;gt;&lt;br /&gt;
B Bezug und Installation ''' (Nur als Kapitel im Anhang?, finde ich zu wenig, nh)'''&amp;lt;br&amp;gt;&lt;br /&gt;
B.1 Bezug &amp;lt;br&amp;gt;&lt;br /&gt;
B.1.1 Vorkompiliert &amp;lt;br&amp;gt;&lt;br /&gt;
B.1.2 Quelltexte &amp;lt;br&amp;gt;&lt;br /&gt;
B.1.3 Änderungen &amp;lt;br&amp;gt;&lt;br /&gt;
B.1.4 CVS . &amp;lt;br&amp;gt;&lt;br /&gt;
B.2 Installation von Binaries &amp;lt;br&amp;gt;&lt;br /&gt;
B.2.1 Binaries für Windows&amp;lt;br&amp;gt;&lt;br /&gt;
'''Nicht wirklich? Link zu ms4w!''' &amp;lt;br&amp;gt;&lt;br /&gt;
B.2.2 Binaries für Linux . . . &amp;lt;br&amp;gt;&lt;br /&gt;
'''Hinweis auf: FGS Installer'''&amp;lt;br&amp;gt;&lt;br /&gt;
B.3 Die MapMedia MapServer Suite &amp;lt;br&amp;gt;&lt;br /&gt;
B.4 Kompilieren der Quelltexte &amp;lt;br&amp;gt;&lt;br /&gt;
'''mit Zusatzinformationen für besondere *Unixe'''&amp;lt;br&amp;gt;&lt;br /&gt;
B.4.1 GD &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.2 Proj.4-Unterstüzung &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.3 EPPL7-Unterstützung &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.4 Funktionalit¨ at als WMS-Server &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.5 Funktionalit¨ at als WMS-Client &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.6 Funktionalit¨ at als WFS-Server &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.7 Funktionalit¨ at als WFS-Client&amp;lt;br&amp;gt;&lt;br /&gt;
B.4.8 Unterstützung für PostGIS &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.9 GDAL und OGR &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.10 Unterstützung für PDF-Output&amp;lt;br&amp;gt;&lt;br /&gt;
B.4.11 Unterstützung für Shockwave Flash &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.12 Kompilieren des MapServers&amp;lt;br&amp;gt;&lt;br /&gt;
B.5 MapScript &amp;lt;br&amp;gt;&lt;br /&gt;
B.5.1 Binaries . . &amp;lt;br&amp;gt;&lt;br /&gt;
B.5.2 Aus den Quellen &amp;lt;br&amp;gt;&lt;br /&gt;
C Migration 239&lt;br /&gt;
C.1 Von Version 3.6 nach Version 4.0&amp;lt;br&amp;gt;&lt;br /&gt;
'''raus, Migration 4.x nach 5.x'''&amp;lt;br&amp;gt;&lt;br /&gt;
C.1.1 Geänderte und neue Parameter &amp;lt;br&amp;gt;&lt;br /&gt;
C.1.2 MapServer kompilieren &amp;lt;br&amp;gt;&lt;br /&gt;
C.1.3 Queries &amp;lt;br&amp;gt;&lt;br /&gt;
C.1.4 Diverse Probleme&amp;lt;br&amp;gt;&lt;br /&gt;
C.1.5 MapScript &amp;lt;br&amp;gt;&lt;br /&gt;
D Sicherheit&amp;lt;br&amp;gt;&lt;br /&gt;
D.1 Komprommittierung des MapServer-Rechners &amp;lt;br&amp;gt;&lt;br /&gt;
D.2 Zugänglichkeit der Originaldaten &amp;lt;br&amp;gt;&lt;br /&gt;
D.3 Verschleiern des Mapﬁlenamens &amp;lt;br&amp;gt;&lt;br /&gt;
D.4 MapScript-Anwendungen&amp;lt;br&amp;gt;&lt;br /&gt;
D.5 Die Clientseite: Active Scripting &amp;lt;br&amp;gt;&lt;br /&gt;
E Tips zur Performance &amp;lt;br&amp;gt;&lt;br /&gt;
E.1 Vermeiden Sie unnötige Funktionalität&amp;lt;br&amp;gt;&lt;br /&gt;
E.2 Nutzen Sie MINSCALE und MAXSCALE &amp;lt;br&amp;gt;&lt;br /&gt;
'''Kann raus - MINSCALEDENOM und MAXSCALEDENOM''' &amp;lt;br&amp;gt;&lt;br /&gt;
E.3 Legen Sie Indizes an &amp;lt;br&amp;gt;&lt;br /&gt;
E.4 Kacheln Sie Ihre Daten &amp;lt;br&amp;gt;&lt;br /&gt;
E.5 Kompression muß verstanden werden &amp;lt;br&amp;gt;&lt;br /&gt;
E.6 Datenbankabfragen .&amp;lt;br&amp;gt;&lt;br /&gt;
E.7 Hardware &amp;lt;br&amp;gt;&lt;br /&gt;
E.8 Schließlich: Zeigen Sie nie alles auf einmal&amp;lt;br&amp;gt;&lt;br /&gt;
F Unterstützte Formate&amp;lt;br&amp;gt;&lt;br /&gt;
F.1 Lesbare Formate&amp;lt;br&amp;gt;&lt;br /&gt;
F.1.1 GD &amp;lt;br&amp;gt;&lt;br /&gt;
F.1.2 Räumliche Datenbanken &amp;lt;br&amp;gt;&lt;br /&gt;
F.1.3 Rasterformate mit GDAL &amp;lt;br&amp;gt;&lt;br /&gt;
F.1.4 Vektorformate mit OGR &amp;lt;br&amp;gt;&lt;br /&gt;
'''F.1.5 ArcSDE (Florian Thuerkow)''' &amp;lt;br&amp;gt;&lt;br /&gt;
F.2 Schreibbare Formate &amp;lt;br&amp;gt;&lt;br /&gt;
F.3 Nicht unterstützte Formate&amp;lt;br&amp;gt;&lt;br /&gt;
G MapServer im Internet&amp;lt;br&amp;gt;&lt;br /&gt;
G.1 Website &amp;lt;br&amp;gt;&lt;br /&gt;
G.2 Mailinglisten &amp;lt;br&amp;gt;&lt;br /&gt;
G.2.1 Archiv &amp;lt;br&amp;gt;&lt;br /&gt;
G.2.2 Wiki &amp;lt;br&amp;gt;&lt;br /&gt;
G.3 Beispielseiten &amp;lt;br&amp;gt;&lt;br /&gt;
G.3.1 Capabilities XML &amp;lt;br&amp;gt;&lt;br /&gt;
H Lizenz der Software &amp;lt;br&amp;gt;&lt;br /&gt;
H.1 Die Lizenz aus der Datei README &amp;lt;br&amp;gt;&lt;br /&gt;
H.2 Erläuterungen&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wiki-Nhermann</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=HBUMNMapServer_ger&amp;diff=24076</id>
		<title>HBUMNMapServer ger</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=HBUMNMapServer_ger&amp;diff=24076"/>
		<updated>2008-04-09T05:08:10Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Nhermann: /* Inhaltsverzeichnis aus der internationalen Diskussion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Links =&lt;br /&gt;
* [[UMNHB_ger_Lizenzen | Klärung der Lizenzfrage]]&lt;br /&gt;
* [[ Komitee_f%C3%BCr_Bildung_und_Dokumentationserstellung | Komitee für Bildung und Dokumentationserstellung ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Inhaltsverzeichnis des 'aktuellen' Handbuchs =&lt;br /&gt;
&lt;br /&gt;
1 Einfährung&amp;lt;br&amp;gt;&lt;br /&gt;
1.1 Aufbau dieses Buches&amp;lt;br&amp;gt;&lt;br /&gt;
1.2 Was ist ein Mapserver?&amp;lt;br&amp;gt;&lt;br /&gt;
1.2.1 Vorteile des UMN MapServer&amp;lt;br&amp;gt;&lt;br /&gt;
1.3 Die verschiedenen Funktionsweisen&amp;lt;br&amp;gt;&lt;br /&gt;
1.3.1 MapServer als CGI&amp;lt;br&amp;gt;&lt;br /&gt;
1.3.2 MapServer OGC-konform&amp;lt;br&amp;gt;&lt;br /&gt;
1.3.3 MapScript&amp;lt;br&amp;gt;&lt;br /&gt;
1.3.4 ChangeLog&amp;lt;br&amp;gt;&lt;br /&gt;
1.4 Migration&amp;lt;br&amp;gt;&lt;br /&gt;
1.5 Danksagung&amp;lt;br&amp;gt;&lt;br /&gt;
2 Mapﬁle&amp;lt;br&amp;gt;&lt;br /&gt;
2.1 Bedeutung des Mapﬁles&amp;lt;br&amp;gt;&lt;br /&gt;
2.1.1 MapServer als CGI&amp;lt;br&amp;gt;&lt;br /&gt;
2.1.2 Die Modi&amp;lt;br&amp;gt;&lt;br /&gt;
2.1.3 Die weiteren Parameter&amp;lt;br&amp;gt;&lt;br /&gt;
2.2 Grundlegender Aufbau des Mapﬁles&amp;lt;br&amp;gt;&lt;br /&gt;
2.3 Der Header&amp;lt;br&amp;gt;&lt;br /&gt;
2.4 Die Web-Sektion&amp;lt;br&amp;gt;&lt;br /&gt;
2.5 Layer&amp;lt;br&amp;gt;&lt;br /&gt;
2.5.1 Gruppierungen von Layern&amp;lt;br&amp;gt;&lt;br /&gt;
2.5.2 Weitere Layer-Optionen&amp;lt;br&amp;gt;&lt;br /&gt;
2.6 Classes&amp;lt;br&amp;gt;&lt;br /&gt;
2.7 Styles&amp;lt;br&amp;gt;&lt;br /&gt;
2.8 Rasterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
2.8.1 Bildkataloge&amp;lt;br&amp;gt;&lt;br /&gt;
2.8.2 Rasterdaten klassiﬁzieren&amp;lt;br&amp;gt;&lt;br /&gt;
2.8.3 Umprojizieren von Rasterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
2.8.4 Rasterdaten mit GDAL&amp;lt;br&amp;gt;&lt;br /&gt;
2.9 Vektordaten &amp;lt;br&amp;gt;&lt;br /&gt;
2.9.1 Indizes für Shapeﬁles&amp;lt;br&amp;gt;&lt;br /&gt;
2.9.2 Graticule-Layer&amp;lt;br&amp;gt;&lt;br /&gt;
2.10 Projektionen&amp;lt;br&amp;gt;&lt;br /&gt;
2.10.1 Notation&amp;lt;br&amp;gt;&lt;br /&gt;
2.10.2 Orthographische Projektion&amp;lt;br&amp;gt;&lt;br /&gt;
2.10.3 Projektionen im realen Einsatz&amp;lt;br&amp;gt;&lt;br /&gt;
2.11 Schriften&amp;lt;br&amp;gt;&lt;br /&gt;
2.12 Annotationen &amp;lt;br&amp;gt;&lt;br /&gt;
2.12.1 Die Label-Sektion&amp;lt;br&amp;gt;&lt;br /&gt;
2.12.2 Bitmap-Schriften&amp;lt;br&amp;gt;&lt;br /&gt;
2.12.3 TrueType-Schriften&amp;lt;br&amp;gt;&lt;br /&gt;
2.12.4 Beschriftungen ohne Annotationslayer&amp;lt;br&amp;gt;&lt;br /&gt;
2.12.5 Der Label-Cache&amp;lt;br&amp;gt;&lt;br /&gt;
2.12.6 Hinweise&amp;lt;br&amp;gt;&lt;br /&gt;
2.13 Symbole &amp;lt;br&amp;gt;&lt;br /&gt;
2.13.1 TrueType-Symbole &amp;lt;br&amp;gt;&lt;br /&gt;
2.13.2 Pixmap-Symbole &amp;lt;br&amp;gt;&lt;br /&gt;
2.13.3 Overlay-Symbole &amp;lt;br&amp;gt;&lt;br /&gt;
2.13.4 Beispiele&amp;lt;br&amp;gt;&lt;br /&gt;
2.14 Maßst¨ abe &amp;lt;br&amp;gt;&lt;br /&gt;
2.15 Legenden &amp;lt;br&amp;gt;&lt;br /&gt;
2.15.1 Die klassische MapServer-Legende &amp;lt;br&amp;gt;&lt;br /&gt;
2.15.2 HTML-Legenden &amp;lt;br&amp;gt;&lt;br /&gt;
2.16 Templates &amp;lt;br&amp;gt;&lt;br /&gt;
2.16.1 Die verschiedenen Arten von Templates &amp;lt;br&amp;gt;&lt;br /&gt;
2.16.2 Aufbau &amp;lt;br&amp;gt;&lt;br /&gt;
2.17 Metadaten &amp;lt;br&amp;gt;&lt;br /&gt;
2.18 Queries &amp;lt;br&amp;gt;&lt;br /&gt;
2.18.1 Notation &amp;lt;br&amp;gt;&lt;br /&gt;
2.18.2 Query maps &amp;lt;br&amp;gt;&lt;br /&gt;
2.18.3 Weitere Arten von Queries &amp;lt;br&amp;gt;&lt;br /&gt;
2.19 PostgreSQL und PostGIS &amp;lt;br&amp;gt;&lt;br /&gt;
2.20 OGR &amp;lt;br&amp;gt;&lt;br /&gt;
2.21 Speziﬁkation von Ausgabeformaten &amp;lt;br&amp;gt;&lt;br /&gt;
2.21.1 Rasterbilder &amp;lt;br&amp;gt;&lt;br /&gt;
2.21.2 Vektorformate &amp;lt;br&amp;gt;&lt;br /&gt;
2.22 Features &amp;lt;br&amp;gt;&lt;br /&gt;
2.22.1 Fix positionierte Elemente .&amp;lt;br&amp;gt;&lt;br /&gt;
2.23 CGI-Parameter &amp;lt;br&amp;gt;&lt;br /&gt;
2.23.1 Parameter einschr¨ anken .&amp;lt;br&amp;gt;&lt;br /&gt;
2.23.2 Variablensubstitution &amp;lt;br&amp;gt;&lt;br /&gt;
3 OGC-Konformit¨ at &lt;br /&gt;
3.1 Warum macht man das? &amp;lt;br&amp;gt;&lt;br /&gt;
3.2 Web Mappping Server (WMS) &amp;lt;br&amp;gt;&lt;br /&gt;
3.2.1 Servermodi .&amp;lt;br&amp;gt;&lt;br /&gt;
3.2.2 Der aufrufende URL &amp;lt;br&amp;gt;&lt;br /&gt;
3.2.3 WMS-Metadaten im Mapﬁle .&amp;lt;br&amp;gt;&lt;br /&gt;
3.2.4 Exceptions &amp;lt;br&amp;gt;&lt;br /&gt;
3.2.5 getFeatureInfo &amp;lt;br&amp;gt;&lt;br /&gt;
3.2.6 WMS Clients &amp;lt;br&amp;gt;&lt;br /&gt;
3.2.7 Exceptions&amp;lt;br&amp;gt;&lt;br /&gt;
3.2.8 Hinweise &amp;lt;br&amp;gt;&lt;br /&gt;
3.3 Web Feature Server (WFS) &amp;lt;br&amp;gt;&lt;br /&gt;
3.3.1 WFS Server &amp;lt;br&amp;gt;&lt;br /&gt;
3.3.2 Projektionen in WFS-Servern &amp;lt;br&amp;gt;&lt;br /&gt;
3.3.3 Schemas&amp;lt;br&amp;gt;&lt;br /&gt;
3.3.4 Aufruf &amp;amp; Capabilities &amp;lt;br&amp;gt;&lt;br /&gt;
3.3.5 WFS Client &amp;lt;br&amp;gt;&lt;br /&gt;
3.4 Map Context&amp;lt;br&amp;gt;&lt;br /&gt;
3.4.1 Das Context-Dokument &amp;lt;br&amp;gt;&lt;br /&gt;
3.4.2 Den Kontext verwenden &amp;lt;br&amp;gt;&lt;br /&gt;
4 Datenbankanbindungen &amp;lt;br&amp;gt;&lt;br /&gt;
4.1 PostgreSQL und PostGIS .&amp;lt;br&amp;gt;&lt;br /&gt;
4.1.1 Shapeﬁles in PostGIS laden &amp;lt;br&amp;gt;&lt;br /&gt;
4.1.2 Notation in Layern &amp;lt;br&amp;gt;&lt;br /&gt;
4.1.3 PostGIS außerhalb des MapServers &amp;lt;br&amp;gt;&lt;br /&gt;
5 Demos &amp;lt;br&amp;gt;&lt;br /&gt;
5.1 Itasca &amp;lt;br&amp;gt;&lt;br /&gt;
5.2 GMap &amp;lt;br&amp;gt;&lt;br /&gt;
6 MapScript&amp;lt;br&amp;gt;&lt;br /&gt;
6.1 PHP MapScript &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.1 Laden des Moduls &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.2 Setzen von Objekt-Eigenschaften .&amp;lt;br&amp;gt;&lt;br /&gt;
6.1.3 Formulareingaben in PHP verarbeiten&amp;lt;br&amp;gt;&lt;br /&gt;
6.1.4 Die mapObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.5 Fehlerbehandlung &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.6 Die layerObj-Klasse&amp;lt;br&amp;gt;&lt;br /&gt;
6.1.7 Die classObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.8 Die imageObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.9 Die labelObj-Klasse&amp;lt;br&amp;gt;&lt;br /&gt;
6.1.10 Die webObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.11 Die referenceMapObj-Klasse&amp;lt;br&amp;gt;&lt;br /&gt;
6.1.12 Die colorObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.13 Die pointObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.14 Die lineObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.15 Die projectionObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.16 Die shapeﬁleObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.17 Struktur von PHP MapScript-Seiten &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.18 Speichern von Map-Objekten in PHP-Sessions &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.19 Speicherverwaltung mit MapScript &amp;lt;br&amp;gt;&lt;br /&gt;
6.2 Weitere Sprachen &amp;lt;br&amp;gt;&lt;br /&gt;
6.2.1 Perl &amp;lt;br&amp;gt;&lt;br /&gt;
6.2.2 Java &amp;lt;br&amp;gt;&lt;br /&gt;
6.2.3 Python &amp;lt;br&amp;gt;&lt;br /&gt;
7 Zus¨ atzliche Werkzeuge &amp;lt;br&amp;gt;&lt;br /&gt;
7.1 Werkzeuge der Bibliothek Shapelib &amp;lt;br&amp;gt;&lt;br /&gt;
7.1.1 shpdump &amp;lt;br&amp;gt;&lt;br /&gt;
7.1.2 shpcreate, shpadd, dbfcreate und dbfadd &amp;lt;br&amp;gt;&lt;br /&gt;
7.1.3 dbfdump &amp;lt;br&amp;gt;&lt;br /&gt;
7.1.4 shpinfo &amp;lt;br&amp;gt;&lt;br /&gt;
7.1.5 dbﬁnfo &amp;lt;br&amp;gt;&lt;br /&gt;
7.2 Werkzeuge des MapServers&amp;lt;br&amp;gt;&lt;br /&gt;
7.2.1 shp2img&amp;lt;br&amp;gt;&lt;br /&gt;
7.2.2 shptree &amp;lt;br&amp;gt;&lt;br /&gt;
7.2.3 shptreevis &amp;lt;br&amp;gt;&lt;br /&gt;
7.3 Werkzeuge der GDAL-Bibliothek &amp;lt;br&amp;gt;&lt;br /&gt;
7.3.1 gdaltindex .&amp;lt;br&amp;gt;&lt;br /&gt;
II Anhang &amp;lt;br&amp;gt;&lt;br /&gt;
A Referenz &amp;lt;br&amp;gt;&lt;br /&gt;
A.1 Limits &amp;lt;br&amp;gt;&lt;br /&gt;
A.2 Organisation der Daten &amp;lt;br&amp;gt;&lt;br /&gt;
A.3 ¨ Anderungen &amp;lt;br&amp;gt;&lt;br /&gt;
A.3.1 3.6 nach 4.0&amp;lt;br&amp;gt;&lt;br /&gt;
A.3.2 3.5 nach 3.6&amp;lt;br&amp;gt;&lt;br /&gt;
A.4 PHP MapScript &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.1 Konstanten &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.2 Allgemeine Funktionen &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.3 mapObj&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.4 layerObj .&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.5 classObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.6 styleObj&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.7 imageObj&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.8 labelObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.9 labelCacheObj .&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.10 webObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.11 referenceMapObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.12 colorObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.13 pointObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.14 lineObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.15 rectObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.16 shapeObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.17 projectionObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.18 shapeﬁleObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.19 resultCacheMemberObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.20 scalebarObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.21 legendObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.22 outputformatObj .&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.23 gridObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.24 errorObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.5 CGI-Parameter &amp;lt;br&amp;gt;&lt;br /&gt;
A.5.1 Normale Parameter .&amp;lt;br&amp;gt;&lt;br /&gt;
A.5.2 CGI-Modus .&amp;lt;br&amp;gt;&lt;br /&gt;
A.5.3 Parameter für Java-Applets &amp;lt;br&amp;gt;&lt;br /&gt;
B Bezug und Installation &amp;lt;br&amp;gt;&lt;br /&gt;
B.1 Bezug &amp;lt;br&amp;gt;&lt;br /&gt;
B.1.1 Vorkompiliert &amp;lt;br&amp;gt;&lt;br /&gt;
B.1.2 Quelltexte &amp;lt;br&amp;gt;&lt;br /&gt;
B.1.3 ¨ Anderungen &amp;lt;br&amp;gt;&lt;br /&gt;
B.1.4 CVS . &amp;lt;br&amp;gt;&lt;br /&gt;
B.2 Installation von Binaries &amp;lt;br&amp;gt;&lt;br /&gt;
B.2.1 Binaries für Windows&amp;lt;br&amp;gt;&lt;br /&gt;
B.2.2 Binaries für Linux . . . &amp;lt;br&amp;gt;&lt;br /&gt;
B.3 Die MapMedia MapServer Suite &amp;lt;br&amp;gt;&lt;br /&gt;
B.4 Kompilieren der Quelltexte &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.1 GD &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.2 Proj.4-Unterstüzung &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.3 EPPL7-Unterstützung &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.4 Funktionalit¨ at als WMS-Server &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.5 Funktionalit¨ at als WMS-Client &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.6 Funktionalit¨ at als WFS-Server &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.7 Funktionalit¨ at als WFS-Client&amp;lt;br&amp;gt;&lt;br /&gt;
B.4.8 Unterstützung für PostGIS &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.9 GDAL und OGR &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.10 Unterstützung für PDF-Output&amp;lt;br&amp;gt;&lt;br /&gt;
B.4.11 Unterstützung für Shockwave Flash &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.12 Kompilieren des MapServers&amp;lt;br&amp;gt;&lt;br /&gt;
B.5 MapScript &amp;lt;br&amp;gt;&lt;br /&gt;
B.5.1 Binaries . . &amp;lt;br&amp;gt;&lt;br /&gt;
B.5.2 Aus den Quellen &amp;lt;br&amp;gt;&lt;br /&gt;
C Migration 239&lt;br /&gt;
C.1 Von Version 3.6 nach Version 4.0&amp;lt;br&amp;gt;&lt;br /&gt;
C.1.1 Geänderte und neue Parameter &amp;lt;br&amp;gt;&lt;br /&gt;
C.1.2 MapServer kompilieren &amp;lt;br&amp;gt;&lt;br /&gt;
C.1.3 Queries &amp;lt;br&amp;gt;&lt;br /&gt;
C.1.4 Diverse Probleme&amp;lt;br&amp;gt;&lt;br /&gt;
C.1.5 MapScript &amp;lt;br&amp;gt;&lt;br /&gt;
D Sicherheit&amp;lt;br&amp;gt;&lt;br /&gt;
D.1 Komprommittierung des MapServer-Rechners &amp;lt;br&amp;gt;&lt;br /&gt;
D.2 Zugänglichkeit der Originaldaten &amp;lt;br&amp;gt;&lt;br /&gt;
D.3 Verschleiern des Mapﬁlenamens &amp;lt;br&amp;gt;&lt;br /&gt;
D.4 MapScript-Anwendungen&amp;lt;br&amp;gt;&lt;br /&gt;
D.5 Die Clientseite: Active Scripting &amp;lt;br&amp;gt;&lt;br /&gt;
E Tips zur Performance &amp;lt;br&amp;gt;&lt;br /&gt;
E.1 Vermeiden Sie unn¨ otige Funktionalität&amp;lt;br&amp;gt;&lt;br /&gt;
E.2 Nutzen Sie MINSCALE und MAXSCALE &amp;lt;br&amp;gt;&lt;br /&gt;
E.3 Legen Sie Indizes an &amp;lt;br&amp;gt;&lt;br /&gt;
E.4 Kacheln Sie Ihre Daten &amp;lt;br&amp;gt;&lt;br /&gt;
E.5 Kompression muß verstanden werden &amp;lt;br&amp;gt;&lt;br /&gt;
E.6 Datenbankabfragen .&amp;lt;br&amp;gt;&lt;br /&gt;
E.7 Hardware &amp;lt;br&amp;gt;&lt;br /&gt;
E.8 Schließlich: Zeigen Sie nie alles auf einmal&amp;lt;br&amp;gt;&lt;br /&gt;
F Unterstützte Formate&amp;lt;br&amp;gt;&lt;br /&gt;
F.1 Lesbare Formate&amp;lt;br&amp;gt;&lt;br /&gt;
F.1.1 GD &amp;lt;br&amp;gt;&lt;br /&gt;
F.1.2 Räumliche Datenbanken &amp;lt;br&amp;gt;&lt;br /&gt;
F.1.3 Rasterformate mit GDAL &amp;lt;br&amp;gt;&lt;br /&gt;
F.1.4 Vektorformate mit OGR &amp;lt;br&amp;gt;&lt;br /&gt;
F.2 Schreibbare Formate &amp;lt;br&amp;gt;&lt;br /&gt;
F.3 Nicht unterstützte Formate&amp;lt;br&amp;gt;&lt;br /&gt;
G MapServer im Internet&amp;lt;br&amp;gt;&lt;br /&gt;
G.1 Website &amp;lt;br&amp;gt;&lt;br /&gt;
G.2 Mailinglisten &amp;lt;br&amp;gt;&lt;br /&gt;
G.2.1 Archiv &amp;lt;br&amp;gt;&lt;br /&gt;
G.2.2 Wiki &amp;lt;br&amp;gt;&lt;br /&gt;
G.3 Beispielseiten &amp;lt;br&amp;gt;&lt;br /&gt;
G.3.1 Capabilities XML &amp;lt;br&amp;gt;&lt;br /&gt;
H Lizenz der Software &amp;lt;br&amp;gt;&lt;br /&gt;
H.1 Die Lizenz aus der Datei README &amp;lt;br&amp;gt;&lt;br /&gt;
H.2 Erläuterungen&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Inhaltsverzeichnis aus der internationalen Diskussion =&lt;br /&gt;
&lt;br /&gt;
Kurzes Update zum internationalen User Manual (09.04.2008). Jeff McKenna hat gestern ein PDF mit dem ersten Entwurf des Buches veröffentlicht. Der Entwurf umfasst 134 Seiten und ist unter der Adresse: &lt;br /&gt;
http://download.osgeo.org/mapserver/docs/mapserver-users-manual.pdf (1MB)&lt;br /&gt;
einsehbar.&lt;br /&gt;
&lt;br /&gt;
Some comments:&lt;br /&gt;
&lt;br /&gt;
- has gaping holes &amp;lt;br&amp;gt;&lt;br /&gt;
- plan is to use SteveL's demo as part of the missing 'application' section &amp;lt;br&amp;gt;&lt;br /&gt;
- most if not all examples in this doc were manually executed, and in many cases i've updated the associated existing website docs accordingly &amp;lt;br&amp;gt;&lt;br /&gt;
- many more existing website docs will be ported into the Appendix &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier die Zusammenfassung zum Thread 'Feedback required: plans for Downloadable Users Manual' auf der mapserver-dev Liste. &lt;br /&gt;
Der Original-Thread findet sich unter:&lt;br /&gt;
http://www.nabble.com/Feedback-required:-plans-for-Downloadable-Users-Manual-td16260533.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Vorgeschlagen wurde zunächst folgende Struktur: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Table of Contents &amp;lt;br&amp;gt;&lt;br /&gt;
-----------------&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Introduction &amp;lt;br&amp;gt;&lt;br /&gt;
Getting Started &amp;lt;br&amp;gt;&lt;br /&gt;
- Installing &amp;lt;br&amp;gt;&lt;br /&gt;
- Architecture of MapServer &amp;lt;br&amp;gt;&lt;br /&gt;
Preparing Data &amp;lt;br&amp;gt;&lt;br /&gt;
- The .Map File &amp;lt;br&amp;gt;&lt;br /&gt;
- Supported Formats &amp;lt;br&amp;gt;&lt;br /&gt;
- Tips and Tricks &amp;lt;br&amp;gt;&lt;br /&gt;
- Factors Affecting Performance &amp;lt;br&amp;gt;&lt;br /&gt;
Building a MapServer Application &amp;lt;br&amp;gt;&lt;br /&gt;
- Flavors &amp;lt;br&amp;gt;&lt;br /&gt;
- Example Code &amp;lt;br&amp;gt;&lt;br /&gt;
Community &amp;lt;br&amp;gt;&lt;br /&gt;
- History of MapServer &amp;lt;br&amp;gt;&lt;br /&gt;
- Project Steering Committee &amp;lt;br&amp;gt;&lt;br /&gt;
- Contributing &amp;lt;br&amp;gt;&lt;br /&gt;
- Getting Help &amp;lt;br&amp;gt;&lt;br /&gt;
- Conferences/Workshops&lt;br /&gt;
Glossary &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als inhaltliche Ergänzungen wurden dann noch folgende Punkte vorgeschlagen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
- client software (ka-map!, OpenLayers, GeoMoose, PMapper, etc.) &amp;lt;br&amp;gt;&lt;br /&gt;
- map file management software (MapStorer, any others)&amp;lt;br&amp;gt;&lt;br /&gt;
- including copies of all HOWTOs and references in the appendices? &amp;lt;br&amp;gt;&lt;br /&gt;
- configuration of an application and data.&amp;lt;br&amp;gt;&lt;br /&gt;
- include a complete production sample mapfile like Bob Basques Googlish mapfile &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wiki-Nhermann</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=HBUMNMapServer_ger&amp;diff=23921</id>
		<title>HBUMNMapServer ger</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=HBUMNMapServer_ger&amp;diff=23921"/>
		<updated>2008-04-04T20:44:54Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Nhermann: /* Inhaltsverzeichnis aus der internationalen Diskussion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Inhaltsverzeichnis des 'aktuellen' Handbuchs =&lt;br /&gt;
&lt;br /&gt;
1 Einfährung&amp;lt;br&amp;gt;&lt;br /&gt;
1.1 Aufbau dieses Buches&amp;lt;br&amp;gt;&lt;br /&gt;
1.2 Was ist ein Mapserver?&amp;lt;br&amp;gt;&lt;br /&gt;
1.2.1 Vorteile des UMN MapServer&amp;lt;br&amp;gt;&lt;br /&gt;
1.3 Die verschiedenen Funktionsweisen&amp;lt;br&amp;gt;&lt;br /&gt;
1.3.1 MapServer als CGI&amp;lt;br&amp;gt;&lt;br /&gt;
1.3.2 MapServer OGC-konform&amp;lt;br&amp;gt;&lt;br /&gt;
1.3.3 MapScript&amp;lt;br&amp;gt;&lt;br /&gt;
1.3.4 ChangeLog&amp;lt;br&amp;gt;&lt;br /&gt;
1.4 Migration&amp;lt;br&amp;gt;&lt;br /&gt;
1.5 Danksagung&amp;lt;br&amp;gt;&lt;br /&gt;
2 Mapﬁle&amp;lt;br&amp;gt;&lt;br /&gt;
2.1 Bedeutung des Mapﬁles&amp;lt;br&amp;gt;&lt;br /&gt;
2.1.1 MapServer als CGI&amp;lt;br&amp;gt;&lt;br /&gt;
2.1.2 Die Modi&amp;lt;br&amp;gt;&lt;br /&gt;
2.1.3 Die weiteren Parameter&amp;lt;br&amp;gt;&lt;br /&gt;
2.2 Grundlegender Aufbau des Mapﬁles&amp;lt;br&amp;gt;&lt;br /&gt;
2.3 Der Header&amp;lt;br&amp;gt;&lt;br /&gt;
2.4 Die Web-Sektion&amp;lt;br&amp;gt;&lt;br /&gt;
2.5 Layer&amp;lt;br&amp;gt;&lt;br /&gt;
2.5.1 Gruppierungen von Layern&amp;lt;br&amp;gt;&lt;br /&gt;
2.5.2 Weitere Layer-Optionen&amp;lt;br&amp;gt;&lt;br /&gt;
2.6 Classes&amp;lt;br&amp;gt;&lt;br /&gt;
2.7 Styles&amp;lt;br&amp;gt;&lt;br /&gt;
2.8 Rasterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
2.8.1 Bildkataloge&amp;lt;br&amp;gt;&lt;br /&gt;
2.8.2 Rasterdaten klassiﬁzieren&amp;lt;br&amp;gt;&lt;br /&gt;
2.8.3 Umprojizieren von Rasterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
2.8.4 Rasterdaten mit GDAL&amp;lt;br&amp;gt;&lt;br /&gt;
2.9 Vektordaten &amp;lt;br&amp;gt;&lt;br /&gt;
2.9.1 Indizes für Shapeﬁles&amp;lt;br&amp;gt;&lt;br /&gt;
2.9.2 Graticule-Layer&amp;lt;br&amp;gt;&lt;br /&gt;
2.10 Projektionen&amp;lt;br&amp;gt;&lt;br /&gt;
2.10.1 Notation&amp;lt;br&amp;gt;&lt;br /&gt;
2.10.2 Orthographische Projektion&amp;lt;br&amp;gt;&lt;br /&gt;
2.10.3 Projektionen im realen Einsatz&amp;lt;br&amp;gt;&lt;br /&gt;
2.11 Schriften&amp;lt;br&amp;gt;&lt;br /&gt;
2.12 Annotationen &amp;lt;br&amp;gt;&lt;br /&gt;
2.12.1 Die Label-Sektion&amp;lt;br&amp;gt;&lt;br /&gt;
2.12.2 Bitmap-Schriften&amp;lt;br&amp;gt;&lt;br /&gt;
2.12.3 TrueType-Schriften&amp;lt;br&amp;gt;&lt;br /&gt;
2.12.4 Beschriftungen ohne Annotationslayer&amp;lt;br&amp;gt;&lt;br /&gt;
2.12.5 Der Label-Cache&amp;lt;br&amp;gt;&lt;br /&gt;
2.12.6 Hinweise&amp;lt;br&amp;gt;&lt;br /&gt;
2.13 Symbole &amp;lt;br&amp;gt;&lt;br /&gt;
2.13.1 TrueType-Symbole &amp;lt;br&amp;gt;&lt;br /&gt;
2.13.2 Pixmap-Symbole &amp;lt;br&amp;gt;&lt;br /&gt;
2.13.3 Overlay-Symbole &amp;lt;br&amp;gt;&lt;br /&gt;
2.13.4 Beispiele&amp;lt;br&amp;gt;&lt;br /&gt;
2.14 Maßst¨ abe &amp;lt;br&amp;gt;&lt;br /&gt;
2.15 Legenden &amp;lt;br&amp;gt;&lt;br /&gt;
2.15.1 Die klassische MapServer-Legende &amp;lt;br&amp;gt;&lt;br /&gt;
2.15.2 HTML-Legenden &amp;lt;br&amp;gt;&lt;br /&gt;
2.16 Templates &amp;lt;br&amp;gt;&lt;br /&gt;
2.16.1 Die verschiedenen Arten von Templates &amp;lt;br&amp;gt;&lt;br /&gt;
2.16.2 Aufbau &amp;lt;br&amp;gt;&lt;br /&gt;
2.17 Metadaten &amp;lt;br&amp;gt;&lt;br /&gt;
2.18 Queries &amp;lt;br&amp;gt;&lt;br /&gt;
2.18.1 Notation &amp;lt;br&amp;gt;&lt;br /&gt;
2.18.2 Query maps &amp;lt;br&amp;gt;&lt;br /&gt;
2.18.3 Weitere Arten von Queries &amp;lt;br&amp;gt;&lt;br /&gt;
2.19 PostgreSQL und PostGIS &amp;lt;br&amp;gt;&lt;br /&gt;
2.20 OGR &amp;lt;br&amp;gt;&lt;br /&gt;
2.21 Speziﬁkation von Ausgabeformaten &amp;lt;br&amp;gt;&lt;br /&gt;
2.21.1 Rasterbilder &amp;lt;br&amp;gt;&lt;br /&gt;
2.21.2 Vektorformate &amp;lt;br&amp;gt;&lt;br /&gt;
2.22 Features &amp;lt;br&amp;gt;&lt;br /&gt;
2.22.1 Fix positionierte Elemente .&amp;lt;br&amp;gt;&lt;br /&gt;
2.23 CGI-Parameter &amp;lt;br&amp;gt;&lt;br /&gt;
2.23.1 Parameter einschr¨ anken .&amp;lt;br&amp;gt;&lt;br /&gt;
2.23.2 Variablensubstitution &amp;lt;br&amp;gt;&lt;br /&gt;
3 OGC-Konformit¨ at &lt;br /&gt;
3.1 Warum macht man das? &amp;lt;br&amp;gt;&lt;br /&gt;
3.2 Web Mappping Server (WMS) &amp;lt;br&amp;gt;&lt;br /&gt;
3.2.1 Servermodi .&amp;lt;br&amp;gt;&lt;br /&gt;
3.2.2 Der aufrufende URL &amp;lt;br&amp;gt;&lt;br /&gt;
3.2.3 WMS-Metadaten im Mapﬁle .&amp;lt;br&amp;gt;&lt;br /&gt;
3.2.4 Exceptions &amp;lt;br&amp;gt;&lt;br /&gt;
3.2.5 getFeatureInfo &amp;lt;br&amp;gt;&lt;br /&gt;
3.2.6 WMS Clients &amp;lt;br&amp;gt;&lt;br /&gt;
3.2.7 Exceptions&amp;lt;br&amp;gt;&lt;br /&gt;
3.2.8 Hinweise &amp;lt;br&amp;gt;&lt;br /&gt;
3.3 Web Feature Server (WFS) &amp;lt;br&amp;gt;&lt;br /&gt;
3.3.1 WFS Server &amp;lt;br&amp;gt;&lt;br /&gt;
3.3.2 Projektionen in WFS-Servern &amp;lt;br&amp;gt;&lt;br /&gt;
3.3.3 Schemas&amp;lt;br&amp;gt;&lt;br /&gt;
3.3.4 Aufruf &amp;amp; Capabilities &amp;lt;br&amp;gt;&lt;br /&gt;
3.3.5 WFS Client &amp;lt;br&amp;gt;&lt;br /&gt;
3.4 Map Context&amp;lt;br&amp;gt;&lt;br /&gt;
3.4.1 Das Context-Dokument &amp;lt;br&amp;gt;&lt;br /&gt;
3.4.2 Den Kontext verwenden &amp;lt;br&amp;gt;&lt;br /&gt;
4 Datenbankanbindungen &amp;lt;br&amp;gt;&lt;br /&gt;
4.1 PostgreSQL und PostGIS .&amp;lt;br&amp;gt;&lt;br /&gt;
4.1.1 Shapeﬁles in PostGIS laden &amp;lt;br&amp;gt;&lt;br /&gt;
4.1.2 Notation in Layern &amp;lt;br&amp;gt;&lt;br /&gt;
4.1.3 PostGIS außerhalb des MapServers &amp;lt;br&amp;gt;&lt;br /&gt;
5 Demos &amp;lt;br&amp;gt;&lt;br /&gt;
5.1 Itasca &amp;lt;br&amp;gt;&lt;br /&gt;
5.2 GMap &amp;lt;br&amp;gt;&lt;br /&gt;
6 MapScript&amp;lt;br&amp;gt;&lt;br /&gt;
6.1 PHP MapScript &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.1 Laden des Moduls &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.2 Setzen von Objekt-Eigenschaften .&amp;lt;br&amp;gt;&lt;br /&gt;
6.1.3 Formulareingaben in PHP verarbeiten&amp;lt;br&amp;gt;&lt;br /&gt;
6.1.4 Die mapObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.5 Fehlerbehandlung &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.6 Die layerObj-Klasse&amp;lt;br&amp;gt;&lt;br /&gt;
6.1.7 Die classObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.8 Die imageObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.9 Die labelObj-Klasse&amp;lt;br&amp;gt;&lt;br /&gt;
6.1.10 Die webObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.11 Die referenceMapObj-Klasse&amp;lt;br&amp;gt;&lt;br /&gt;
6.1.12 Die colorObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.13 Die pointObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.14 Die lineObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.15 Die projectionObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.16 Die shapeﬁleObj-Klasse &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.17 Struktur von PHP MapScript-Seiten &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.18 Speichern von Map-Objekten in PHP-Sessions &amp;lt;br&amp;gt;&lt;br /&gt;
6.1.19 Speicherverwaltung mit MapScript &amp;lt;br&amp;gt;&lt;br /&gt;
6.2 Weitere Sprachen &amp;lt;br&amp;gt;&lt;br /&gt;
6.2.1 Perl &amp;lt;br&amp;gt;&lt;br /&gt;
6.2.2 Java &amp;lt;br&amp;gt;&lt;br /&gt;
6.2.3 Python &amp;lt;br&amp;gt;&lt;br /&gt;
7 Zus¨ atzliche Werkzeuge &amp;lt;br&amp;gt;&lt;br /&gt;
7.1 Werkzeuge der Bibliothek Shapelib &amp;lt;br&amp;gt;&lt;br /&gt;
7.1.1 shpdump &amp;lt;br&amp;gt;&lt;br /&gt;
7.1.2 shpcreate, shpadd, dbfcreate und dbfadd &amp;lt;br&amp;gt;&lt;br /&gt;
7.1.3 dbfdump &amp;lt;br&amp;gt;&lt;br /&gt;
7.1.4 shpinfo &amp;lt;br&amp;gt;&lt;br /&gt;
7.1.5 dbﬁnfo &amp;lt;br&amp;gt;&lt;br /&gt;
7.2 Werkzeuge des MapServers&amp;lt;br&amp;gt;&lt;br /&gt;
7.2.1 shp2img&amp;lt;br&amp;gt;&lt;br /&gt;
7.2.2 shptree &amp;lt;br&amp;gt;&lt;br /&gt;
7.2.3 shptreevis &amp;lt;br&amp;gt;&lt;br /&gt;
7.3 Werkzeuge der GDAL-Bibliothek &amp;lt;br&amp;gt;&lt;br /&gt;
7.3.1 gdaltindex .&amp;lt;br&amp;gt;&lt;br /&gt;
II Anhang &amp;lt;br&amp;gt;&lt;br /&gt;
A Referenz &amp;lt;br&amp;gt;&lt;br /&gt;
A.1 Limits &amp;lt;br&amp;gt;&lt;br /&gt;
A.2 Organisation der Daten &amp;lt;br&amp;gt;&lt;br /&gt;
A.3 ¨ Anderungen &amp;lt;br&amp;gt;&lt;br /&gt;
A.3.1 3.6 nach 4.0&amp;lt;br&amp;gt;&lt;br /&gt;
A.3.2 3.5 nach 3.6&amp;lt;br&amp;gt;&lt;br /&gt;
A.4 PHP MapScript &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.1 Konstanten &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.2 Allgemeine Funktionen &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.3 mapObj&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.4 layerObj .&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.5 classObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.6 styleObj&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.7 imageObj&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.8 labelObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.9 labelCacheObj .&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.10 webObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.11 referenceMapObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.12 colorObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.13 pointObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.14 lineObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.15 rectObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.16 shapeObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.17 projectionObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.18 shapeﬁleObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.19 resultCacheMemberObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.20 scalebarObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.21 legendObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.22 outputformatObj .&amp;lt;br&amp;gt;&lt;br /&gt;
A.4.23 gridObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.4.24 errorObj &amp;lt;br&amp;gt;&lt;br /&gt;
A.5 CGI-Parameter &amp;lt;br&amp;gt;&lt;br /&gt;
A.5.1 Normale Parameter .&amp;lt;br&amp;gt;&lt;br /&gt;
A.5.2 CGI-Modus .&amp;lt;br&amp;gt;&lt;br /&gt;
A.5.3 Parameter für Java-Applets &amp;lt;br&amp;gt;&lt;br /&gt;
B Bezug und Installation &amp;lt;br&amp;gt;&lt;br /&gt;
B.1 Bezug &amp;lt;br&amp;gt;&lt;br /&gt;
B.1.1 Vorkompiliert &amp;lt;br&amp;gt;&lt;br /&gt;
B.1.2 Quelltexte &amp;lt;br&amp;gt;&lt;br /&gt;
B.1.3 ¨ Anderungen &amp;lt;br&amp;gt;&lt;br /&gt;
B.1.4 CVS . &amp;lt;br&amp;gt;&lt;br /&gt;
B.2 Installation von Binaries &amp;lt;br&amp;gt;&lt;br /&gt;
B.2.1 Binaries für Windows&amp;lt;br&amp;gt;&lt;br /&gt;
B.2.2 Binaries für Linux . . . &amp;lt;br&amp;gt;&lt;br /&gt;
B.3 Die MapMedia MapServer Suite &amp;lt;br&amp;gt;&lt;br /&gt;
B.4 Kompilieren der Quelltexte &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.1 GD &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.2 Proj.4-Unterstüzung &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.3 EPPL7-Unterstützung &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.4 Funktionalit¨ at als WMS-Server &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.5 Funktionalit¨ at als WMS-Client &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.6 Funktionalit¨ at als WFS-Server &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.7 Funktionalit¨ at als WFS-Client&amp;lt;br&amp;gt;&lt;br /&gt;
B.4.8 Unterstützung für PostGIS &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.9 GDAL und OGR &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.10 Unterstützung für PDF-Output&amp;lt;br&amp;gt;&lt;br /&gt;
B.4.11 Unterstützung für Shockwave Flash &amp;lt;br&amp;gt;&lt;br /&gt;
B.4.12 Kompilieren des MapServers&amp;lt;br&amp;gt;&lt;br /&gt;
B.5 MapScript &amp;lt;br&amp;gt;&lt;br /&gt;
B.5.1 Binaries . . &amp;lt;br&amp;gt;&lt;br /&gt;
B.5.2 Aus den Quellen &amp;lt;br&amp;gt;&lt;br /&gt;
C Migration 239&lt;br /&gt;
C.1 Von Version 3.6 nach Version 4.0&amp;lt;br&amp;gt;&lt;br /&gt;
C.1.1 Geänderte und neue Parameter &amp;lt;br&amp;gt;&lt;br /&gt;
C.1.2 MapServer kompilieren &amp;lt;br&amp;gt;&lt;br /&gt;
C.1.3 Queries &amp;lt;br&amp;gt;&lt;br /&gt;
C.1.4 Diverse Probleme&amp;lt;br&amp;gt;&lt;br /&gt;
C.1.5 MapScript &amp;lt;br&amp;gt;&lt;br /&gt;
D Sicherheit&amp;lt;br&amp;gt;&lt;br /&gt;
D.1 Komprommittierung des MapServer-Rechners &amp;lt;br&amp;gt;&lt;br /&gt;
D.2 Zugänglichkeit der Originaldaten &amp;lt;br&amp;gt;&lt;br /&gt;
D.3 Verschleiern des Mapﬁlenamens &amp;lt;br&amp;gt;&lt;br /&gt;
D.4 MapScript-Anwendungen&amp;lt;br&amp;gt;&lt;br /&gt;
D.5 Die Clientseite: Active Scripting &amp;lt;br&amp;gt;&lt;br /&gt;
E Tips zur Performance &amp;lt;br&amp;gt;&lt;br /&gt;
E.1 Vermeiden Sie unn¨ otige Funktionalität&amp;lt;br&amp;gt;&lt;br /&gt;
E.2 Nutzen Sie MINSCALE und MAXSCALE &amp;lt;br&amp;gt;&lt;br /&gt;
E.3 Legen Sie Indizes an &amp;lt;br&amp;gt;&lt;br /&gt;
E.4 Kacheln Sie Ihre Daten &amp;lt;br&amp;gt;&lt;br /&gt;
E.5 Kompression muß verstanden werden &amp;lt;br&amp;gt;&lt;br /&gt;
E.6 Datenbankabfragen .&amp;lt;br&amp;gt;&lt;br /&gt;
E.7 Hardware &amp;lt;br&amp;gt;&lt;br /&gt;
E.8 Schließlich: Zeigen Sie nie alles auf einmal&amp;lt;br&amp;gt;&lt;br /&gt;
F Unterstützte Formate&amp;lt;br&amp;gt;&lt;br /&gt;
F.1 Lesbare Formate&amp;lt;br&amp;gt;&lt;br /&gt;
F.1.1 GD &amp;lt;br&amp;gt;&lt;br /&gt;
F.1.2 Räumliche Datenbanken &amp;lt;br&amp;gt;&lt;br /&gt;
F.1.3 Rasterformate mit GDAL &amp;lt;br&amp;gt;&lt;br /&gt;
F.1.4 Vektorformate mit OGR &amp;lt;br&amp;gt;&lt;br /&gt;
F.2 Schreibbare Formate &amp;lt;br&amp;gt;&lt;br /&gt;
F.3 Nicht unterstützte Formate&amp;lt;br&amp;gt;&lt;br /&gt;
G MapServer im Internet&amp;lt;br&amp;gt;&lt;br /&gt;
G.1 Website &amp;lt;br&amp;gt;&lt;br /&gt;
G.2 Mailinglisten &amp;lt;br&amp;gt;&lt;br /&gt;
G.2.1 Archiv &amp;lt;br&amp;gt;&lt;br /&gt;
G.2.2 Wiki &amp;lt;br&amp;gt;&lt;br /&gt;
G.3 Beispielseiten &amp;lt;br&amp;gt;&lt;br /&gt;
G.3.1 Capabilities XML &amp;lt;br&amp;gt;&lt;br /&gt;
H Lizenz der Software &amp;lt;br&amp;gt;&lt;br /&gt;
H.1 Die Lizenz aus der Datei README &amp;lt;br&amp;gt;&lt;br /&gt;
H.2 Erläuterungen&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Inhaltsverzeichnis aus der internationalen Diskussion =&lt;br /&gt;
&lt;br /&gt;
Hier die Zusammenfassung zum Thread 'Feedback required: plans for Downloadable Users Manual' auf der mapserver-dev Liste. &lt;br /&gt;
Der Original-Thread findet sich unter:&lt;br /&gt;
http://www.nabble.com/Feedback-required:-plans-for-Downloadable-Users-Manual-td16260533.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Vorgeschlagen wurde zunächst folgende Struktur: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Table of Contents &amp;lt;br&amp;gt;&lt;br /&gt;
-----------------&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Introduction &amp;lt;br&amp;gt;&lt;br /&gt;
Getting Started &amp;lt;br&amp;gt;&lt;br /&gt;
- Installing &amp;lt;br&amp;gt;&lt;br /&gt;
- Architecture of MapServer &amp;lt;br&amp;gt;&lt;br /&gt;
Preparing Data &amp;lt;br&amp;gt;&lt;br /&gt;
- The .Map File &amp;lt;br&amp;gt;&lt;br /&gt;
- Supported Formats &amp;lt;br&amp;gt;&lt;br /&gt;
- Tips and Tricks &amp;lt;br&amp;gt;&lt;br /&gt;
- Factors Affecting Performance &amp;lt;br&amp;gt;&lt;br /&gt;
Building a MapServer Application &amp;lt;br&amp;gt;&lt;br /&gt;
- Flavors &amp;lt;br&amp;gt;&lt;br /&gt;
- Example Code &amp;lt;br&amp;gt;&lt;br /&gt;
Community &amp;lt;br&amp;gt;&lt;br /&gt;
- History of MapServer &amp;lt;br&amp;gt;&lt;br /&gt;
- Project Steering Committee &amp;lt;br&amp;gt;&lt;br /&gt;
- Contributing &amp;lt;br&amp;gt;&lt;br /&gt;
- Getting Help &amp;lt;br&amp;gt;&lt;br /&gt;
- Conferences/Workshops&lt;br /&gt;
Glossary &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als inhaltliche Ergänzungen wurden dann noch folgende Punkte vorgeschlagen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
- client software (ka-map!, OpenLayers, GeoMoose, PMapper, etc.) &amp;lt;br&amp;gt;&lt;br /&gt;
- map file management software (MapStorer, any others)&amp;lt;br&amp;gt;&lt;br /&gt;
- including copies of all HOWTOs and references in the appendices? &amp;lt;br&amp;gt;&lt;br /&gt;
- configuration of an application and data.&amp;lt;br&amp;gt;&lt;br /&gt;
- include a complete production sample mapfile like Bob Basques Googlish mapfile &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wiki-Nhermann</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Anleitung_f%C3%BCr_Routing_(Pgrouting)_und_UMN_MapServer_mit_den_Freien_Geodaten_aus_Osnabr%C3%BCck_(Frida)&amp;diff=20670</id>
		<title>Anleitung für Routing (Pgrouting) und UMN MapServer mit den Freien Geodaten aus Osnabrück (Frida)</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Anleitung_f%C3%BCr_Routing_(Pgrouting)_und_UMN_MapServer_mit_den_Freien_Geodaten_aus_Osnabr%C3%BCck_(Frida)&amp;diff=20670"/>
		<updated>2007-11-12T17:03:30Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Nhermann: /* Routingvisualisierung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung ==&lt;br /&gt;
&lt;br /&gt;
Mittels dieser Anleitung soll Ihnen etwas Hilfestellung beim Thema pgRouting und UMN&lt;br /&gt;
MapServer gegeben werden. Die Anleitung basiert im Wesentlichen auf Know-how, welches auf der Homepage&lt;br /&gt;
http://pgrouting.postlbs.org vermittelt wird.&lt;br /&gt;
&lt;br /&gt;
Weitere hilfreiche Quellen:&lt;br /&gt;
&lt;br /&gt;
[http://freegis.org/pipermail/mapserver-de/2006-August/002433.html Mailinglist von umn-mapserver.de] (mit 14 Antworten)&lt;br /&gt;
&lt;br /&gt;
[http://lists.umn.edu/cgi-bin/wa?A2=ind0612&amp;amp;L=mapserver-users&amp;amp;T=0&amp;amp;F=&amp;amp;S=&amp;amp;P=30653 Englischsprachige Mailinglist des UMN MapServers] (mit 8 Antworten)&lt;br /&gt;
&lt;br /&gt;
[http://www.selbstverwaltungbundesweit.de/mapserver/modules.php?name=Forums&amp;amp;file=viewtopic&amp;amp;t=331 Forum auf umn-mapserver-community.de] (mit 25 Antworten)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung ist für Windows XP geschrieben, funktioniert (mit den entsprechenden&lt;br /&gt;
Änderungen) natürlich auch auf Linux-Systemen.&lt;br /&gt;
Für diese Anwendung sollten Sie Grundkenntnisse im Umgang mit dem UMN MapServer,&lt;br /&gt;
PostgreSQL/PostGIS sowie PHP/Mapscript besitzen.&lt;br /&gt;
&lt;br /&gt;
Folgende Umgebung wurde installiert:&lt;br /&gt;
&lt;br /&gt;
* Das ms4w-Paket (2.2.3)&lt;br /&gt;
* PostgreSQL 8.2.4 mit PostGIS-Aufsatz 1.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wie gehen wir nun vor? &lt;br /&gt;
Zunächst einmal laden Sie von der Seite http://pgrouting.postlbs.org den pgRouting&lt;br /&gt;
1.0.0a-win32-installer herunter. Anschließen ein Doppelklick auf das Paket. Die Installation&lt;br /&gt;
läuft quasi von alleine.&lt;br /&gt;
&lt;br /&gt;
Installieren Sie pgrouting am Besten in das Verzeichnis C:\Programme\PostgreSQL\8.2&lt;br /&gt;
(siehe Abbildung 1).&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 1: Installation von PgRouting''' &lt;br /&gt;
&lt;br /&gt;
[[Image:Pgrouting_installation.png|Installationsroutine von pgRouting]]&lt;br /&gt;
&lt;br /&gt;
== Daten ==&lt;br /&gt;
Anschließend brauchen wir natürlich Geodaten.&lt;br /&gt;
Wir verwenden dafür die Freien Geodaten aus dem von der Intevation GmbH initiierten&lt;br /&gt;
Projekt „Frida“ (http://frida.intevation.org/) (siehe Abbildung 2).&lt;br /&gt;
&lt;br /&gt;
''' Abbildung 2: Homepage der Frida-Daten'''&lt;br /&gt;
&lt;br /&gt;
[[Image:frida.png|Homepage der Frida-Daten]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Laden Sie sich hier folgende Daten herunter: frida-1.0.1-shp-joined.tar.gz&lt;br /&gt;
und entpacken Sie diese.&lt;br /&gt;
Im ersten Schritt brauchen wir die „strassen-joined.shp“-Daten.&lt;br /&gt;
Diese Daten benötigen wir allerdings im SQL-Format um diese in die anzulegende&lt;br /&gt;
PostgreSQL/PostGIS-Datenbank zu lesen.&lt;br /&gt;
Also geben wir auf der Kommandozeile z.B. folgendes ein (siehe auch Abbildung 3):&lt;br /&gt;
 Shp2pgsql D:\frida\strassen-joined.shp fridastreets routingdb &amp;gt; D:\frida\strassen-joined.sql&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 3: Shape in SQL-Format umwandeln'''&lt;br /&gt;
&lt;br /&gt;
[[Image:frida_umwandlung.png|Shape in SQL-Format umwandeln]]&lt;br /&gt;
&lt;br /&gt;
== Datenbank anlegen ==&lt;br /&gt;
Anschließend legen wir eine Datenbank mit PostGIS-Unterstützung an (z.B. mit dem Tool&lt;br /&gt;
pgAdmin III).&lt;br /&gt;
Diese Datenbank nennen wir hier mal „routingdb“ (Abbildung 4).&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 4: Anlegen einer Datenbank mit PgAdminIII'''&lt;br /&gt;
&lt;br /&gt;
[[Image:newdb.png|Anlegen einer Datenbank mit PgAdminIII]]&lt;br /&gt;
&lt;br /&gt;
Anschließend dann muss die Datei strassen-joined.sql in die Datenbank eingelesen&lt;br /&gt;
werden.&lt;br /&gt;
Gegen Sie also auf Kommandozeile folgendes ein:&lt;br /&gt;
 psql -U postgres -f D:/frida/strassen-joined.sql routingdb&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 5: Befehl zum Einlesen der SQL-Datei in die Datenbank'''&lt;br /&gt;
&lt;br /&gt;
[[Image:routingeinlesen.png|Befehl zum Einlesen der SQL-Datei in die Datenbank]]&lt;br /&gt;
&lt;br /&gt;
Die Daten der Tabelle „fridastreets“ haben folgende Struktur (siehe Abbildung 6):&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 6: Ursprüngliche Struktur der Frida-Daten'''&lt;br /&gt;
&lt;br /&gt;
[[Image:struktur.png|Ursprüngliche Struktur der Frida-Daten]]&lt;br /&gt;
&lt;br /&gt;
Die Datenbank ist zu diesem Zeitpunkt allerdings noch nicht in der Lage Routen zu&lt;br /&gt;
berechnen. Das wollen wir ändern.&lt;br /&gt;
Dafür führen wir folgende Befehle aus:&lt;br /&gt;
 psql -U postgres -f C:\Programme\PostgreSQL\8.2\share\contrib\routing.sql routingdb&lt;br /&gt;
sowie anschließend:&lt;br /&gt;
 psql -U postgres -f C:\Programme\PostgreSQL\8.2\share\contrib\routing_postgis.sql routingdb&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 7: Routingfunktionen werden in Datenbank gebracht'''&lt;br /&gt;
&lt;br /&gt;
[[Image:routing_postgis_eingelesen.png|Routingfunktionen werden in Datenbank gebracht]]&lt;br /&gt;
&lt;br /&gt;
Ok, die Datenbank ist für Routing im Grunde präpariert. Das bedeutet aber noch lange&lt;br /&gt;
nicht, dass sie nun auch diesbezüglich funktioniert.&lt;br /&gt;
Für verschiedene Funktionen von pgRouting muss eine bestimmte Tabellenstruktur&lt;br /&gt;
vorliegen.&lt;br /&gt;
Neben der gid und der Geometrie (the_geom) müssen auch die Anfangskoordinaten (x1,&lt;br /&gt;
y1 jeweils als eigene Spalte (Datentyp numerisch)) bzw Endkoordinaten (x2,y2 ebenso&lt;br /&gt;
jeweils als eigene Spalte) vorliegen.&lt;br /&gt;
Zudem muss die Tabellenspalte „length“ (numeric) sowie source und target (bigint)&lt;br /&gt;
vorliegen (siehe Abbildung 8).&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 8: Tabellenstruktur für verschiedene Funktionen von pgRouting'''&lt;br /&gt;
&lt;br /&gt;
[[Image:tabellen_ueberischt.png|Tabellenstruktur für verschiedene Funktionen von pgRouting]]&lt;br /&gt;
&lt;br /&gt;
== Daten mittels PHP-Skript einlesen ==&lt;br /&gt;
&lt;br /&gt;
Nachdem diese Spalten angelegt worden sind geht es darum automatisiert die Werte von&lt;br /&gt;
x1,y1,x2,y2 einzulesen.&lt;br /&gt;
Dafür wurde folgendes PHP-Skript geschrieben:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 $host = &amp;quot;localhost&amp;quot;;&lt;br /&gt;
 $port = &amp;quot;5432&amp;quot;;&lt;br /&gt;
 $dbname = &amp;quot;routingdb&amp;quot;;&lt;br /&gt;
 $user = &amp;quot;postgres&amp;quot;;&lt;br /&gt;
 $password = &amp;quot;postgres&amp;quot;;&lt;br /&gt;
 $con_string = &amp;quot;host=$host port=$port dbname=$dbname user=$user password=$password&amp;quot;;&lt;br /&gt;
 $con = pg_connect ($con_string);&lt;br /&gt;
 //Hier der Code für das Ermitteln von x1 und y1&lt;br /&gt;
 $id_check = &amp;quot;SELECT max(gid)as gid from roads&amp;quot;;&lt;br /&gt;
 $res_id_check = pg_query($con,$id_check);&lt;br /&gt;
 $count = pg_result($res_id_check,&amp;quot;gid&amp;quot;);&lt;br /&gt;
 echo &amp;quot;Anzahl der Eintraegege in der DB: &amp;quot;.$count;&lt;br /&gt;
 echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
 for ($x=1;$x&amp;lt;=$count;$x++)&lt;br /&gt;
 {&lt;br /&gt;
 $start = &amp;quot;SELECT astext(StartPoint(the_geom))as startpoint from roads where gid='$x'&amp;quot;;&lt;br /&gt;
 $res_start= pg_query($con,$start);&lt;br /&gt;
 $start_ergebnis = pg_result($res_start,&amp;quot;startpoint&amp;quot;);&lt;br /&gt;
 echo &amp;quot;&amp;lt;b&amp;gt;Geometrie $x&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;quot;;&lt;br /&gt;
 echo &amp;quot;Anfangspunkte (x1,y1): &amp;quot;.$start_ergebnis;&lt;br /&gt;
 echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
 $array_01=array(&amp;quot;POINT(&amp;quot;,&amp;quot;)&amp;quot;);&lt;br /&gt;
 $array_02=array(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
   for($r=0;$r&amp;lt;sizeof($array_01);$r++)&lt;br /&gt;
  {&lt;br /&gt;
   $start_ergebnis=str_replace($array_01[$r],$array_02[$r],$start_ergebnis);&lt;br /&gt;
   }&lt;br /&gt;
 $explode=explode(&amp;quot; &amp;quot;,$start_ergebnis);&lt;br /&gt;
 $x1=$explode[0];&lt;br /&gt;
 $y1=$explode[1];&lt;br /&gt;
 echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
 //Hier der Code für das Ermitteln von x2 und y2&lt;br /&gt;
  $end = &amp;quot;SELECT astext(EndPoint(the_geom))as endpoint from roads where gid='$x'&amp;quot;;&lt;br /&gt;
  $res_end= pg_query($con,$end);&lt;br /&gt;
  $end_ergebnis = pg_result($res_end,&amp;quot;endpoint&amp;quot;);&lt;br /&gt;
  echo &amp;quot;Endpunkte (x2,y2): &amp;quot;.$end_ergebnis;&lt;br /&gt;
  echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
  echo &amp;quot;--------------&amp;quot;;&lt;br /&gt;
  echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $array_01=array(&amp;quot;POINT(&amp;quot;,&amp;quot;)&amp;quot;);&lt;br /&gt;
  $array_02=array(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
   for($r=0;$r&amp;lt;sizeof($array_01);$r++)&lt;br /&gt;
   {&lt;br /&gt;
    $end_ergebnis=str_replace($array_01[$r],$array_02[$r],$end_ergebnis);&lt;br /&gt;
    }&lt;br /&gt;
 $explode=explode(&amp;quot; &amp;quot;,$end_ergebnis);&lt;br /&gt;
 $x2=$explode[0];&lt;br /&gt;
 $y2=$explode[1];&lt;br /&gt;
  //Hier werden dann die Werte in die Spalten geschrieben&lt;br /&gt;
  $werte_in_tabelle_schreiben=&amp;quot;UPDATE roads SET x1='$x1',y1='$y1',x2='$x2',y2='$y2' where&lt;br /&gt;
 gid='$x'&amp;quot;;&lt;br /&gt;
 $res = pg_query($werte_in_tabelle_schreiben);&lt;br /&gt;
  }&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
Das Skript funktioniert eigentlich ganz einfach.&lt;br /&gt;
Es stellt eine Verbindung zur PostgreSQL/PostGIS-Datenbank her.&lt;br /&gt;
Dann wird ermittelt wie viele Geometrie-Einträge insgesamt vorliegen und in einer Schleife&lt;br /&gt;
werden Rechtswerte und Hochwerte der Vertices in die Tabelle gelesen.&lt;br /&gt;
Das Skript dann einfach über einen Webserver (z.B. innerhalb des ms4w-Paketes)&lt;br /&gt;
abschicken.&lt;br /&gt;
 Wichtig: Es kann eine Weile dauern, bis alle Einträge in die Datenbenk geschrieben&lt;br /&gt;
 sind.&lt;br /&gt;
 Falls Sie mit dem ms4w-Paket arbeiten sollten Sie unbedingt die Werte in der&lt;br /&gt;
 PHP-Konfigurationsdatei php.ini (C:\ms4w\Apache\cgi-bin) ändern.&lt;br /&gt;
 In Zeile 255 sollte die execution-time hochgesetzt werden, z.B.:&lt;br /&gt;
 max_execution_time=300;&lt;br /&gt;
 .........damit auch die kompletten Datensätze eingelesen werden.&lt;br /&gt;
&lt;br /&gt;
Als Bestätigung erscheint beim Aufruf des Skriptes etwa folgendes Fenster (Abb. 9), in&lt;br /&gt;
welchem in diesem Falle alle 12323 Einträge bestätigt werden.&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 9: Start- und Endpunkte der Strassengeometrien erstellen'''&lt;br /&gt;
&lt;br /&gt;
[[Image:startpunkt.PNG|Start- und Endpunkte der Strassengeometrien erstellen]]&lt;br /&gt;
&lt;br /&gt;
Neben der oben beschrieben Möglichkeit die Daten mit PHP einzulesen, befüllt auch das folgende SQL-Kommando die Tabelle:&lt;br /&gt;
 update roads set x1=X(StartPoint(the_geom)), y1=Y(StartPoint(the_geom)), x2=X(EndPoint(the_geom)), y2=Y(EndPoint(the_geom)), length=length(the_geom);&lt;br /&gt;
&lt;br /&gt;
 Wichtig: In neuen Versionen von PostGIS (ab 1.3.x) muss allen Funktionen ein 'ST_' vorangestellt werden.&lt;br /&gt;
&lt;br /&gt;
== Weitere Routingspezifische Werte berechnen ==&lt;br /&gt;
Anschließend sollen die length-Werte berechnet werden.&lt;br /&gt;
Das geht ganz einfach mit folgendem SQL-Befehl in der routingdb-Datenbank (Abbildung&lt;br /&gt;
10):&lt;br /&gt;
 UPDATE fridastreets set length=length(the_geom);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 10: length-Berechnung'''&lt;br /&gt;
&lt;br /&gt;
[[Image:length.PNG|Start- und Endpunkte der Strassengeometrien erstellen]]&lt;br /&gt;
&lt;br /&gt;
Jetzt fehlt aber noch etwas.......&lt;br /&gt;
Um die Werte für source und target zu errechnen benutzen wir eine vorgefertige Funktion:&lt;br /&gt;
 SELECT assign_vertex_id('fridastreets', 5);&lt;br /&gt;
Die Zahl ist letztlich variabel. Die Zahl 5 steht für einen Distanzraum, in welchem Knoten&lt;br /&gt;
die selbe Vertexid erhalten.&lt;br /&gt;
Die Funktion erwartet allerdings, dass die Spaltennamen nicht source bzw. target sondern&lt;br /&gt;
source_id &amp;amp; target_id heissen. Natürlich könnten wir die Funktion jetzt modifizieren.&lt;br /&gt;
Schneller geht’s aber, wenn wir die Spalten mal eben umbenennen, anschließend dann&lt;br /&gt;
die Funktion absenden.&lt;br /&gt;
Das ganze dauert dann ein Weilchen, irgendwann sind die Einträge dann aber getätigt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 11: Source/target-Werte berechnen'''&lt;br /&gt;
&lt;br /&gt;
[[Image:Assign_vertex_routing.PNG|Source/target-Werte berechnen]]&lt;br /&gt;
&lt;br /&gt;
== Routingvisualisierung ==&lt;br /&gt;
Anschließend ändern Sie source_id zu „source“ und „target_id“ zu „target“.&lt;br /&gt;
Ok, dann brauchen wir noch ein PHP/Mapscript-Skript sowie ein passendes Mapfile.&lt;br /&gt;
Unter http://files.orkney.jp/pgrouting/sample/pgRouting-sampleapp.tar.bz kann man sich&lt;br /&gt;
diesbezügliche Dateien herunterladen.&lt;br /&gt;
Diese Dateien wurden etwas verändert und können [http://www.selbstverwaltung-bundesweit.de/mapserver/routinganleitung.zip hier] als routing.map bzw. phtmls/routing_os_frida.phtml heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
Die Datei routing.map ist eigentlich ganz einfach.&lt;br /&gt;
Defaultmäßig werden die Frida-Daten über folgenden Eintrag visualisiert:&lt;br /&gt;
 LAYER&lt;br /&gt;
  NAME &amp;quot;roads&amp;quot;&lt;br /&gt;
  TYPE LINE&lt;br /&gt;
  CONNECTION &amp;quot;user=postgres password=postgres dbname=routingdb host=localhost port=5432&amp;quot;&lt;br /&gt;
  CONNECTIONTYPE postgis&lt;br /&gt;
  DATA &amp;quot;the_geom from fridastreets&amp;quot;&lt;br /&gt;
  STATUS DEFAULT&lt;br /&gt;
 #LABELITEM 'strname'&lt;br /&gt;
 CLASSITEM 'strtypid'&lt;br /&gt;
    CLASS&lt;br /&gt;
         EXPRESSION '1'&lt;br /&gt;
         STYLE&lt;br /&gt;
       COLOR       255 0 0&lt;br /&gt;
       END&lt;br /&gt;
    END&lt;br /&gt;
  CLASS&lt;br /&gt;
         EXPRESSION '3'&lt;br /&gt;
         STYLE&lt;br /&gt;
               COLOR       255 255 0&lt;br /&gt;
         END&lt;br /&gt;
  END&lt;br /&gt;
  CLASS&lt;br /&gt;
         EXPRESSION /./&lt;br /&gt;
         STYLE&lt;br /&gt;
               COLOR       200 200 200&lt;br /&gt;
         END&lt;br /&gt;
  END&lt;br /&gt;
 END&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 12: Darstellung der Frida-Geometrien im UMN MapServer'''&lt;br /&gt;
&lt;br /&gt;
[[Image:Frida_strassen.PNG|Source/Darstellung der Frida-Geometrien]]&lt;br /&gt;
&lt;br /&gt;
Der Layer über welchen letztlich die Ausgabe der Route dargestellt wird nennt sich „path“.&lt;br /&gt;
&lt;br /&gt;
 LAYER&lt;br /&gt;
   NAME &amp;quot;path&amp;quot;&lt;br /&gt;
   CONNECTION &amp;quot;user=postgres password=postgres dbname=frida host=localhost port=5432&amp;quot;&lt;br /&gt;
   CONNECTIONTYPE postgis&lt;br /&gt;
  STATUS ON&lt;br /&gt;
   TYPE LINE&lt;br /&gt;
   CLASS&lt;br /&gt;
    NAME &amp;quot;path&amp;quot;&lt;br /&gt;
       STYLE&lt;br /&gt;
       SYMBOL 'circle'&lt;br /&gt;
 COLOR 255 0 0&lt;br /&gt;
 SIZE 8&lt;br /&gt;
       END&lt;br /&gt;
   END&lt;br /&gt;
 END&lt;br /&gt;
&lt;br /&gt;
Dieser wird dann über PHP/Mapscript aktiviert.&lt;br /&gt;
Schauen Sich sich mal den Quellcode von routing_os_frida.phtml mal an.&lt;br /&gt;
Mittels dieses Codes wird die Angabe zum Map-Objekt getätigt und ein statischer Extent&lt;br /&gt;
definiert, dieser kann über die Variable $delta leicht verändert werden:&lt;br /&gt;
&lt;br /&gt;
 $delta=0;&lt;br /&gt;
 $map_file=MAPFILE;&lt;br /&gt;
 $map=ms_newMapObj($map_file);&lt;br /&gt;
 $l=$map-&amp;gt;getLayerByName(&amp;quot;path&amp;quot;);&lt;br /&gt;
 if($l) {&lt;br /&gt;
  if($l &amp;amp;&amp;amp; $start!=0 &amp;amp;&amp;amp; $end!=0) {&lt;br /&gt;
  $cx1=3429000;&lt;br /&gt;
  $cy1=5787000;&lt;br /&gt;
  $cx2=3444000;&lt;br /&gt;
  $cy2=5800000;&lt;br /&gt;
    if($cx1!=0 &amp;amp;&amp;amp; $cy1!=0 &amp;amp;&amp;amp; $cx2!=0 &amp;amp;&amp;amp; $cy2!=0 &amp;amp;&amp;amp;&lt;br /&gt;
       $cx1!=$cx2 &amp;amp;&amp;amp; $cy1!=$cy2) {&lt;br /&gt;
      $minx = min($cx1,$cx2)-$delta;&lt;br /&gt;
      $miny = min($cy1,$cy2)-$delta;&lt;br /&gt;
      $maxx = max($cx1,$cx2)+$delta;&lt;br /&gt;
      $maxy = max($cy1,$cy2)+$delta;&lt;br /&gt;
      $map-&amp;gt;setextent($minx,$miny,$maxx,$maxy);&lt;br /&gt;
&lt;br /&gt;
Entscheidend ist der Aufruf der Funktion „shortest_path_astar2_as_geometry_internal_id“&lt;br /&gt;
(welcher nur dann gelingt, wenn die Tabelle die entsprechend angelegte Struktur besitzt).&lt;br /&gt;
&lt;br /&gt;
 $ll_x = $rectobj-&amp;gt;minx;&lt;br /&gt;
    $ll_y = $rectobj-&amp;gt;miny;&lt;br /&gt;
    $ur_x = $rectobj-&amp;gt;maxx;&lt;br /&gt;
    $ur_y = $rectobj-&amp;gt;maxy;&lt;br /&gt;
    $sql=&amp;quot;the_geom from (select gid, the_geom from &amp;quot;.&lt;br /&gt;
        &amp;quot;shortest_path_astar2_as_geometry_internal_id('fridastreets', &amp;quot;.&lt;br /&gt;
        $start.&amp;quot;, &amp;quot;.$end.&amp;quot;, &amp;quot;.$ll_x.&amp;quot;, &amp;quot;.$ll_y.&amp;quot;, &amp;quot;.$ur_x.&amp;quot;, &amp;quot;.&lt;br /&gt;
        $ur_y.&amp;quot;)) as g using unique gid using SRID=-1&amp;quot;;&lt;br /&gt;
    $l-&amp;gt;set('data', $sql);&lt;br /&gt;
    $l-&amp;gt;set('status', MS_ON);&lt;br /&gt;
&lt;br /&gt;
Die Funktion selber ist definiert in der Datei routing_postgis.sql und wurde ja von uns in&lt;br /&gt;
die Datenbank eingelesen.&lt;br /&gt;
Wichtig ist dann auch noch das Definieren der Start- bzw. Endpunkte.&lt;br /&gt;
Dieses geht über numerische Werte in einem Formular:&lt;br /&gt;
 &amp;lt;select name=start&amp;gt;&lt;br /&gt;
 &amp;lt;option value=0 &amp;gt;W&amp;amp;auml;hle....&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;option value=7649 &amp;gt;Dom&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;option value=291 &amp;gt;Im Hone&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;option value=7750 &amp;gt;Kolpingstrasse&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;option value=7313 &amp;gt;Martinistr.&amp;lt;/option&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Die Zahlen stehen aber nicht für die gid in der Tabelle sondern für den Wert der&lt;br /&gt;
source- oder aber target-spalte (siehe Werte der Kolpingstr. in Abb. 13).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 13: Source/target-Werte der Kolpingstr.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:datenmodell.PNG|Source/target-Werte der Kolpingstr.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend in der Anwendung dann einfach mal 2 Punkte auswählen. Über die Funktion&lt;br /&gt;
shortest_path_astar2_as_geometry_internal_id wird dann „on_the_fly“ die entsprechende&lt;br /&gt;
Route erstellt und über den Layer „path“ im Mapfile ausgegeben (Abb. 14).&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 14: Route mit pgRouting erstellt'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:endbild.PNG|Route mit pgRouting erstellt]]&lt;br /&gt;
&lt;br /&gt;
Fragen zu dieser Thematik bitte an die Mailinglist von&lt;br /&gt;
http://www.umn-mapserver.de,&lt;br /&gt;
oder in die Foren auf:&lt;br /&gt;
http://www.umn-mapserver-community.de&lt;br /&gt;
bzw. http://pgrouting.postlbs.org&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde von [[User:Kai Behncke | Kai Behncke]] und [[User:Peter_panther | Florian Thürkow]] erstellt. &lt;br /&gt;
Ergänzung von [[User:Nhermann | Nicol Hermann]]&lt;/div&gt;</summary>
		<author><name>Wiki-Nhermann</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Anleitung_f%C3%BCr_Routing_(Pgrouting)_und_UMN_MapServer_mit_den_Freien_Geodaten_aus_Osnabr%C3%BCck_(Frida)&amp;diff=20669</id>
		<title>Anleitung für Routing (Pgrouting) und UMN MapServer mit den Freien Geodaten aus Osnabrück (Frida)</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Anleitung_f%C3%BCr_Routing_(Pgrouting)_und_UMN_MapServer_mit_den_Freien_Geodaten_aus_Osnabr%C3%BCck_(Frida)&amp;diff=20669"/>
		<updated>2007-11-12T17:02:28Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Nhermann: /* Routingvisualisierung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung ==&lt;br /&gt;
&lt;br /&gt;
Mittels dieser Anleitung soll Ihnen etwas Hilfestellung beim Thema pgRouting und UMN&lt;br /&gt;
MapServer gegeben werden. Die Anleitung basiert im Wesentlichen auf Know-how, welches auf der Homepage&lt;br /&gt;
http://pgrouting.postlbs.org vermittelt wird.&lt;br /&gt;
&lt;br /&gt;
Weitere hilfreiche Quellen:&lt;br /&gt;
&lt;br /&gt;
[http://freegis.org/pipermail/mapserver-de/2006-August/002433.html Mailinglist von umn-mapserver.de] (mit 14 Antworten)&lt;br /&gt;
&lt;br /&gt;
[http://lists.umn.edu/cgi-bin/wa?A2=ind0612&amp;amp;L=mapserver-users&amp;amp;T=0&amp;amp;F=&amp;amp;S=&amp;amp;P=30653 Englischsprachige Mailinglist des UMN MapServers] (mit 8 Antworten)&lt;br /&gt;
&lt;br /&gt;
[http://www.selbstverwaltungbundesweit.de/mapserver/modules.php?name=Forums&amp;amp;file=viewtopic&amp;amp;t=331 Forum auf umn-mapserver-community.de] (mit 25 Antworten)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung ist für Windows XP geschrieben, funktioniert (mit den entsprechenden&lt;br /&gt;
Änderungen) natürlich auch auf Linux-Systemen.&lt;br /&gt;
Für diese Anwendung sollten Sie Grundkenntnisse im Umgang mit dem UMN MapServer,&lt;br /&gt;
PostgreSQL/PostGIS sowie PHP/Mapscript besitzen.&lt;br /&gt;
&lt;br /&gt;
Folgende Umgebung wurde installiert:&lt;br /&gt;
&lt;br /&gt;
* Das ms4w-Paket (2.2.3)&lt;br /&gt;
* PostgreSQL 8.2.4 mit PostGIS-Aufsatz 1.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wie gehen wir nun vor? &lt;br /&gt;
Zunächst einmal laden Sie von der Seite http://pgrouting.postlbs.org den pgRouting&lt;br /&gt;
1.0.0a-win32-installer herunter. Anschließen ein Doppelklick auf das Paket. Die Installation&lt;br /&gt;
läuft quasi von alleine.&lt;br /&gt;
&lt;br /&gt;
Installieren Sie pgrouting am Besten in das Verzeichnis C:\Programme\PostgreSQL\8.2&lt;br /&gt;
(siehe Abbildung 1).&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 1: Installation von PgRouting''' &lt;br /&gt;
&lt;br /&gt;
[[Image:Pgrouting_installation.png|Installationsroutine von pgRouting]]&lt;br /&gt;
&lt;br /&gt;
== Daten ==&lt;br /&gt;
Anschließend brauchen wir natürlich Geodaten.&lt;br /&gt;
Wir verwenden dafür die Freien Geodaten aus dem von der Intevation GmbH initiierten&lt;br /&gt;
Projekt „Frida“ (http://frida.intevation.org/) (siehe Abbildung 2).&lt;br /&gt;
&lt;br /&gt;
''' Abbildung 2: Homepage der Frida-Daten'''&lt;br /&gt;
&lt;br /&gt;
[[Image:frida.png|Homepage der Frida-Daten]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Laden Sie sich hier folgende Daten herunter: frida-1.0.1-shp-joined.tar.gz&lt;br /&gt;
und entpacken Sie diese.&lt;br /&gt;
Im ersten Schritt brauchen wir die „strassen-joined.shp“-Daten.&lt;br /&gt;
Diese Daten benötigen wir allerdings im SQL-Format um diese in die anzulegende&lt;br /&gt;
PostgreSQL/PostGIS-Datenbank zu lesen.&lt;br /&gt;
Also geben wir auf der Kommandozeile z.B. folgendes ein (siehe auch Abbildung 3):&lt;br /&gt;
 Shp2pgsql D:\frida\strassen-joined.shp fridastreets routingdb &amp;gt; D:\frida\strassen-joined.sql&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 3: Shape in SQL-Format umwandeln'''&lt;br /&gt;
&lt;br /&gt;
[[Image:frida_umwandlung.png|Shape in SQL-Format umwandeln]]&lt;br /&gt;
&lt;br /&gt;
== Datenbank anlegen ==&lt;br /&gt;
Anschließend legen wir eine Datenbank mit PostGIS-Unterstützung an (z.B. mit dem Tool&lt;br /&gt;
pgAdmin III).&lt;br /&gt;
Diese Datenbank nennen wir hier mal „routingdb“ (Abbildung 4).&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 4: Anlegen einer Datenbank mit PgAdminIII'''&lt;br /&gt;
&lt;br /&gt;
[[Image:newdb.png|Anlegen einer Datenbank mit PgAdminIII]]&lt;br /&gt;
&lt;br /&gt;
Anschließend dann muss die Datei strassen-joined.sql in die Datenbank eingelesen&lt;br /&gt;
werden.&lt;br /&gt;
Gegen Sie also auf Kommandozeile folgendes ein:&lt;br /&gt;
 psql -U postgres -f D:/frida/strassen-joined.sql routingdb&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 5: Befehl zum Einlesen der SQL-Datei in die Datenbank'''&lt;br /&gt;
&lt;br /&gt;
[[Image:routingeinlesen.png|Befehl zum Einlesen der SQL-Datei in die Datenbank]]&lt;br /&gt;
&lt;br /&gt;
Die Daten der Tabelle „fridastreets“ haben folgende Struktur (siehe Abbildung 6):&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 6: Ursprüngliche Struktur der Frida-Daten'''&lt;br /&gt;
&lt;br /&gt;
[[Image:struktur.png|Ursprüngliche Struktur der Frida-Daten]]&lt;br /&gt;
&lt;br /&gt;
Die Datenbank ist zu diesem Zeitpunkt allerdings noch nicht in der Lage Routen zu&lt;br /&gt;
berechnen. Das wollen wir ändern.&lt;br /&gt;
Dafür führen wir folgende Befehle aus:&lt;br /&gt;
 psql -U postgres -f C:\Programme\PostgreSQL\8.2\share\contrib\routing.sql routingdb&lt;br /&gt;
sowie anschließend:&lt;br /&gt;
 psql -U postgres -f C:\Programme\PostgreSQL\8.2\share\contrib\routing_postgis.sql routingdb&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 7: Routingfunktionen werden in Datenbank gebracht'''&lt;br /&gt;
&lt;br /&gt;
[[Image:routing_postgis_eingelesen.png|Routingfunktionen werden in Datenbank gebracht]]&lt;br /&gt;
&lt;br /&gt;
Ok, die Datenbank ist für Routing im Grunde präpariert. Das bedeutet aber noch lange&lt;br /&gt;
nicht, dass sie nun auch diesbezüglich funktioniert.&lt;br /&gt;
Für verschiedene Funktionen von pgRouting muss eine bestimmte Tabellenstruktur&lt;br /&gt;
vorliegen.&lt;br /&gt;
Neben der gid und der Geometrie (the_geom) müssen auch die Anfangskoordinaten (x1,&lt;br /&gt;
y1 jeweils als eigene Spalte (Datentyp numerisch)) bzw Endkoordinaten (x2,y2 ebenso&lt;br /&gt;
jeweils als eigene Spalte) vorliegen.&lt;br /&gt;
Zudem muss die Tabellenspalte „length“ (numeric) sowie source und target (bigint)&lt;br /&gt;
vorliegen (siehe Abbildung 8).&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 8: Tabellenstruktur für verschiedene Funktionen von pgRouting'''&lt;br /&gt;
&lt;br /&gt;
[[Image:tabellen_ueberischt.png|Tabellenstruktur für verschiedene Funktionen von pgRouting]]&lt;br /&gt;
&lt;br /&gt;
== Daten mittels PHP-Skript einlesen ==&lt;br /&gt;
&lt;br /&gt;
Nachdem diese Spalten angelegt worden sind geht es darum automatisiert die Werte von&lt;br /&gt;
x1,y1,x2,y2 einzulesen.&lt;br /&gt;
Dafür wurde folgendes PHP-Skript geschrieben:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 $host = &amp;quot;localhost&amp;quot;;&lt;br /&gt;
 $port = &amp;quot;5432&amp;quot;;&lt;br /&gt;
 $dbname = &amp;quot;routingdb&amp;quot;;&lt;br /&gt;
 $user = &amp;quot;postgres&amp;quot;;&lt;br /&gt;
 $password = &amp;quot;postgres&amp;quot;;&lt;br /&gt;
 $con_string = &amp;quot;host=$host port=$port dbname=$dbname user=$user password=$password&amp;quot;;&lt;br /&gt;
 $con = pg_connect ($con_string);&lt;br /&gt;
 //Hier der Code für das Ermitteln von x1 und y1&lt;br /&gt;
 $id_check = &amp;quot;SELECT max(gid)as gid from roads&amp;quot;;&lt;br /&gt;
 $res_id_check = pg_query($con,$id_check);&lt;br /&gt;
 $count = pg_result($res_id_check,&amp;quot;gid&amp;quot;);&lt;br /&gt;
 echo &amp;quot;Anzahl der Eintraegege in der DB: &amp;quot;.$count;&lt;br /&gt;
 echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
 for ($x=1;$x&amp;lt;=$count;$x++)&lt;br /&gt;
 {&lt;br /&gt;
 $start = &amp;quot;SELECT astext(StartPoint(the_geom))as startpoint from roads where gid='$x'&amp;quot;;&lt;br /&gt;
 $res_start= pg_query($con,$start);&lt;br /&gt;
 $start_ergebnis = pg_result($res_start,&amp;quot;startpoint&amp;quot;);&lt;br /&gt;
 echo &amp;quot;&amp;lt;b&amp;gt;Geometrie $x&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;quot;;&lt;br /&gt;
 echo &amp;quot;Anfangspunkte (x1,y1): &amp;quot;.$start_ergebnis;&lt;br /&gt;
 echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
 $array_01=array(&amp;quot;POINT(&amp;quot;,&amp;quot;)&amp;quot;);&lt;br /&gt;
 $array_02=array(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
   for($r=0;$r&amp;lt;sizeof($array_01);$r++)&lt;br /&gt;
  {&lt;br /&gt;
   $start_ergebnis=str_replace($array_01[$r],$array_02[$r],$start_ergebnis);&lt;br /&gt;
   }&lt;br /&gt;
 $explode=explode(&amp;quot; &amp;quot;,$start_ergebnis);&lt;br /&gt;
 $x1=$explode[0];&lt;br /&gt;
 $y1=$explode[1];&lt;br /&gt;
 echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
 //Hier der Code für das Ermitteln von x2 und y2&lt;br /&gt;
  $end = &amp;quot;SELECT astext(EndPoint(the_geom))as endpoint from roads where gid='$x'&amp;quot;;&lt;br /&gt;
  $res_end= pg_query($con,$end);&lt;br /&gt;
  $end_ergebnis = pg_result($res_end,&amp;quot;endpoint&amp;quot;);&lt;br /&gt;
  echo &amp;quot;Endpunkte (x2,y2): &amp;quot;.$end_ergebnis;&lt;br /&gt;
  echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
  echo &amp;quot;--------------&amp;quot;;&lt;br /&gt;
  echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $array_01=array(&amp;quot;POINT(&amp;quot;,&amp;quot;)&amp;quot;);&lt;br /&gt;
  $array_02=array(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
   for($r=0;$r&amp;lt;sizeof($array_01);$r++)&lt;br /&gt;
   {&lt;br /&gt;
    $end_ergebnis=str_replace($array_01[$r],$array_02[$r],$end_ergebnis);&lt;br /&gt;
    }&lt;br /&gt;
 $explode=explode(&amp;quot; &amp;quot;,$end_ergebnis);&lt;br /&gt;
 $x2=$explode[0];&lt;br /&gt;
 $y2=$explode[1];&lt;br /&gt;
  //Hier werden dann die Werte in die Spalten geschrieben&lt;br /&gt;
  $werte_in_tabelle_schreiben=&amp;quot;UPDATE roads SET x1='$x1',y1='$y1',x2='$x2',y2='$y2' where&lt;br /&gt;
 gid='$x'&amp;quot;;&lt;br /&gt;
 $res = pg_query($werte_in_tabelle_schreiben);&lt;br /&gt;
  }&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
Das Skript funktioniert eigentlich ganz einfach.&lt;br /&gt;
Es stellt eine Verbindung zur PostgreSQL/PostGIS-Datenbank her.&lt;br /&gt;
Dann wird ermittelt wie viele Geometrie-Einträge insgesamt vorliegen und in einer Schleife&lt;br /&gt;
werden Rechtswerte und Hochwerte der Vertices in die Tabelle gelesen.&lt;br /&gt;
Das Skript dann einfach über einen Webserver (z.B. innerhalb des ms4w-Paketes)&lt;br /&gt;
abschicken.&lt;br /&gt;
 Wichtig: Es kann eine Weile dauern, bis alle Einträge in die Datenbenk geschrieben&lt;br /&gt;
 sind.&lt;br /&gt;
 Falls Sie mit dem ms4w-Paket arbeiten sollten Sie unbedingt die Werte in der&lt;br /&gt;
 PHP-Konfigurationsdatei php.ini (C:\ms4w\Apache\cgi-bin) ändern.&lt;br /&gt;
 In Zeile 255 sollte die execution-time hochgesetzt werden, z.B.:&lt;br /&gt;
 max_execution_time=300;&lt;br /&gt;
 .........damit auch die kompletten Datensätze eingelesen werden.&lt;br /&gt;
&lt;br /&gt;
Als Bestätigung erscheint beim Aufruf des Skriptes etwa folgendes Fenster (Abb. 9), in&lt;br /&gt;
welchem in diesem Falle alle 12323 Einträge bestätigt werden.&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 9: Start- und Endpunkte der Strassengeometrien erstellen'''&lt;br /&gt;
&lt;br /&gt;
[[Image:startpunkt.PNG|Start- und Endpunkte der Strassengeometrien erstellen]]&lt;br /&gt;
&lt;br /&gt;
Neben der oben beschrieben Möglichkeit die Daten mit PHP einzulesen, befüllt auch das folgende SQL-Kommando die Tabelle:&lt;br /&gt;
 update roads set x1=X(StartPoint(the_geom)), y1=Y(StartPoint(the_geom)), x2=X(EndPoint(the_geom)), y2=Y(EndPoint(the_geom)), length=length(the_geom);&lt;br /&gt;
&lt;br /&gt;
 Wichtig: In neuen Versionen von PostGIS (ab 1.3.x) muss allen Funktionen ein 'ST_' vorangestellt werden.&lt;br /&gt;
&lt;br /&gt;
== Weitere Routingspezifische Werte berechnen ==&lt;br /&gt;
Anschließend sollen die length-Werte berechnet werden.&lt;br /&gt;
Das geht ganz einfach mit folgendem SQL-Befehl in der routingdb-Datenbank (Abbildung&lt;br /&gt;
10):&lt;br /&gt;
 UPDATE fridastreets set length=length(the_geom);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 10: length-Berechnung'''&lt;br /&gt;
&lt;br /&gt;
[[Image:length.PNG|Start- und Endpunkte der Strassengeometrien erstellen]]&lt;br /&gt;
&lt;br /&gt;
Jetzt fehlt aber noch etwas.......&lt;br /&gt;
Um die Werte für source und target zu errechnen benutzen wir eine vorgefertige Funktion:&lt;br /&gt;
 SELECT assign_vertex_id('fridastreets', 5);&lt;br /&gt;
Die Zahl ist letztlich variabel. Die Zahl 5 steht für einen Distanzraum, in welchem Knoten&lt;br /&gt;
die selbe Vertexid erhalten.&lt;br /&gt;
Die Funktion erwartet allerdings, dass die Spaltennamen nicht source bzw. target sondern&lt;br /&gt;
source_id &amp;amp; target_id heissen. Natürlich könnten wir die Funktion jetzt modifizieren.&lt;br /&gt;
Schneller geht’s aber, wenn wir die Spalten mal eben umbenennen, anschließend dann&lt;br /&gt;
die Funktion absenden.&lt;br /&gt;
Das ganze dauert dann ein Weilchen, irgendwann sind die Einträge dann aber getätigt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 11: Source/target-Werte berechnen'''&lt;br /&gt;
&lt;br /&gt;
[[Image:Assign_vertex_routing.PNG|Source/target-Werte berechnen]]&lt;br /&gt;
&lt;br /&gt;
== Routingvisualisierung ==&lt;br /&gt;
Anschließend ändern Sie source_id zu „source“ und „target_id“ zu „target“.&lt;br /&gt;
Ok, dann brauchen wir noch ein PHP/Mapscript-Skript sowie ein passendes Mapfile.&lt;br /&gt;
Unter http://files.orkney.jp/pgrouting/sample/pgRouting-sampleapp.tar.bz kann man sich&lt;br /&gt;
diesbezügliche Dateien herunterladen.&lt;br /&gt;
Diese Dateien wurden etwas verändert und können [http://www.selbstverwaltung-bundesweit.de/mapserver/routinganleitung.zip hier] als routing.map bzw. phtmls/routing_os_frida.phtml heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
Die Datei routing.map ist eigentlich ganz einfach.&lt;br /&gt;
Defaultmäßig werden die Frida-Daten über folgenden Eintrag visualisiert:&lt;br /&gt;
 LAYER&lt;br /&gt;
  NAME &amp;quot;roads&amp;quot;&lt;br /&gt;
  TYPE LINE&lt;br /&gt;
  CONNECTION &amp;quot;user=postgres password=postgres dbname=routingdb host=localhost port=5432&amp;quot;&lt;br /&gt;
  CONNECTIONTYPE postgis&lt;br /&gt;
  DATA &amp;quot;the_geom from fridastreets&amp;quot;&lt;br /&gt;
  STATUS DEFAULT&lt;br /&gt;
 #LABELITEM 'strname'&lt;br /&gt;
 CLASSITEM 'strtypid'&lt;br /&gt;
    CLASS&lt;br /&gt;
         EXPRESSION '1'&lt;br /&gt;
         STYLE&lt;br /&gt;
       COLOR       255 0 0&lt;br /&gt;
       END&lt;br /&gt;
    END&lt;br /&gt;
  CLASS&lt;br /&gt;
         EXPRESSION '3'&lt;br /&gt;
         STYLE&lt;br /&gt;
               COLOR       255 255 0&lt;br /&gt;
         END&lt;br /&gt;
  END&lt;br /&gt;
  CLASS&lt;br /&gt;
         EXPRESSION /./&lt;br /&gt;
         STYLE&lt;br /&gt;
               COLOR       200 200 200&lt;br /&gt;
         END&lt;br /&gt;
  END&lt;br /&gt;
 END&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 12: Darstellung der Frida-Geometrien im UMN MapServer'''&lt;br /&gt;
&lt;br /&gt;
[[Image:Frida_strassen.PNG|Source/Darstellung der Frida-Geometrien]]&lt;br /&gt;
&lt;br /&gt;
Der Layer über welchen letztlich die Ausgabe der Route dargestellt wird nennt sich „path“.&lt;br /&gt;
&lt;br /&gt;
 LAYER&lt;br /&gt;
   NAME &amp;quot;path&amp;quot;&lt;br /&gt;
   CONNECTION &amp;quot;user=postgres password=postgres dbname=frida host=localhost port=5432&amp;quot;&lt;br /&gt;
   CONNECTIONTYPE postgis&lt;br /&gt;
  STATUS ON&lt;br /&gt;
   TYPE LINE&lt;br /&gt;
   CLASS&lt;br /&gt;
    NAME &amp;quot;path&amp;quot;&lt;br /&gt;
       STYLE&lt;br /&gt;
       SYMBOL 'circle'&lt;br /&gt;
 COLOR 255 0 0&lt;br /&gt;
 SIZE 8&lt;br /&gt;
       END&lt;br /&gt;
   END&lt;br /&gt;
 END&lt;br /&gt;
&lt;br /&gt;
Dieser wird dann über PHP/Mapscript aktiviert.&lt;br /&gt;
Schauen Sich sich mal den Quellcode von routing_os_frida.phtml mal an.&lt;br /&gt;
Mittels dieses Codes wird die Angabe zum Map-Objekt getätigt und ein statischer Extent&lt;br /&gt;
definiert, dieser kann über die Variable $delta leicht verändert werden:&lt;br /&gt;
&lt;br /&gt;
 $delta=0;&lt;br /&gt;
 $map_file=MAPFILE;&lt;br /&gt;
 $map=ms_newMapObj($map_file);&lt;br /&gt;
 $l=$map-&amp;gt;getLayerByName(&amp;quot;path&amp;quot;);&lt;br /&gt;
 if($l) {&lt;br /&gt;
  if($l &amp;amp;&amp;amp; $start!=0 &amp;amp;&amp;amp; $end!=0) {&lt;br /&gt;
  $cx1=3429000;&lt;br /&gt;
  $cy1=5787000;&lt;br /&gt;
  $cx2=3444000;&lt;br /&gt;
  $cy2=5800000;&lt;br /&gt;
    if($cx1!=0 &amp;amp;&amp;amp; $cy1!=0 &amp;amp;&amp;amp; $cx2!=0 &amp;amp;&amp;amp; $cy2!=0 &amp;amp;&amp;amp;&lt;br /&gt;
       $cx1!=$cx2 &amp;amp;&amp;amp; $cy1!=$cy2) {&lt;br /&gt;
      $minx = min($cx1,$cx2)-$delta;&lt;br /&gt;
      $miny = min($cy1,$cy2)-$delta;&lt;br /&gt;
      $maxx = max($cx1,$cx2)+$delta;&lt;br /&gt;
      $maxy = max($cy1,$cy2)+$delta;&lt;br /&gt;
      $map-&amp;gt;setextent($minx,$miny,$maxx,$maxy);&lt;br /&gt;
&lt;br /&gt;
Entscheidend ist der Aufruf der Funktion „shortest_path_astar2_as_geometry_internal_id“&lt;br /&gt;
(welcher nur dann gelingt, wenn die Tabelle die entsprechend angelegte Struktur besitzt).&lt;br /&gt;
&lt;br /&gt;
 $ll_x = $rectobj-&amp;gt;minx;&lt;br /&gt;
    $ll_y = $rectobj-&amp;gt;miny;&lt;br /&gt;
    $ur_x = $rectobj-&amp;gt;maxx;&lt;br /&gt;
    $ur_y = $rectobj-&amp;gt;maxy;&lt;br /&gt;
    $sql=&amp;quot;the_geom from (select gid, the_geom from &amp;quot;.&lt;br /&gt;
        &amp;quot;shortest_path_astar2_as_geometry_internal_id('fridastreets', &amp;quot;.&lt;br /&gt;
        $start.&amp;quot;, &amp;quot;.$end.&amp;quot;, &amp;quot;.$ll_x.&amp;quot;, &amp;quot;.$ll_y.&amp;quot;, &amp;quot;.$ur_x.&amp;quot;, &amp;quot;.&lt;br /&gt;
        $ur_y.&amp;quot;)) as g using unique gid using SRID=-1&amp;quot;;&lt;br /&gt;
    $l-&amp;gt;set('data', $sql);&lt;br /&gt;
    $l-&amp;gt;set('status', MS_ON);&lt;br /&gt;
&lt;br /&gt;
Die Funktion selber ist definiert in der Datei routing_postgis.sql und wurde ja von uns in&lt;br /&gt;
die Datenbank eingelesen.&lt;br /&gt;
Wichtig ist dann auch noch das Definieren der Start- bzw. Endpunkte.&lt;br /&gt;
Dieses geht über numerische Werte in einem Formular:&lt;br /&gt;
 &amp;lt;select name=start&amp;gt;&lt;br /&gt;
 &amp;lt;option value=0 &amp;gt;W&amp;amp;auml;hle....&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;option value=7649 &amp;gt;Dom&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;option value=291 &amp;gt;Im Hone&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;option value=7750 &amp;gt;Kolpingstrasse&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;option value=7313 &amp;gt;Martinistr.&amp;lt;/option&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Die Zahlen stehen aber nicht für die gid in der Tabelle sondern für den Wert der&lt;br /&gt;
source- oder aber target-spalte (siehe Werte der Kolpingstr. in Abb. 13).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 13: Source/target-Werte der Kolpingstr.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:datenmodell.PNG|Source/target-Werte der Kolpingstr.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend in der Anwendung dann einfach mal 2 Punkte auswählen. Über die Funktion&lt;br /&gt;
shortest_path_astar2_as_geometry_internal_id wird dann „on_the_fly“ die entsprechende&lt;br /&gt;
Route erstellt und über den Layer „path“ im Mapfile ausgegeben (Abb. 14).&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 14: Route mit pgRouting erstellt'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:endbild.PNG|Route mit pgRouting erstellt]]&lt;br /&gt;
&lt;br /&gt;
Fragen zu dieser Thematik bitte an die Mailinglist von&lt;br /&gt;
http://www.umn-mapserver.de,&lt;br /&gt;
oder in die Foren auf:&lt;br /&gt;
http://www.umn-mapserver-community.de&lt;br /&gt;
bzw. http://pgrouting.postlbs.org&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde von [[User:Kai Behncke | Kai Behncke]] und [[User:Peter_panther | Florian Thürkow]] erstellt. Ergänzung von [[User:Nhermann] | Nicol Hermann]]&lt;/div&gt;</summary>
		<author><name>Wiki-Nhermann</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Anleitung_f%C3%BCr_Routing_(Pgrouting)_und_UMN_MapServer_mit_den_Freien_Geodaten_aus_Osnabr%C3%BCck_(Frida)&amp;diff=20668</id>
		<title>Anleitung für Routing (Pgrouting) und UMN MapServer mit den Freien Geodaten aus Osnabrück (Frida)</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Anleitung_f%C3%BCr_Routing_(Pgrouting)_und_UMN_MapServer_mit_den_Freien_Geodaten_aus_Osnabr%C3%BCck_(Frida)&amp;diff=20668"/>
		<updated>2007-11-12T17:00:53Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Nhermann: /* Routingvisualisierung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung ==&lt;br /&gt;
&lt;br /&gt;
Mittels dieser Anleitung soll Ihnen etwas Hilfestellung beim Thema pgRouting und UMN&lt;br /&gt;
MapServer gegeben werden. Die Anleitung basiert im Wesentlichen auf Know-how, welches auf der Homepage&lt;br /&gt;
http://pgrouting.postlbs.org vermittelt wird.&lt;br /&gt;
&lt;br /&gt;
Weitere hilfreiche Quellen:&lt;br /&gt;
&lt;br /&gt;
[http://freegis.org/pipermail/mapserver-de/2006-August/002433.html Mailinglist von umn-mapserver.de] (mit 14 Antworten)&lt;br /&gt;
&lt;br /&gt;
[http://lists.umn.edu/cgi-bin/wa?A2=ind0612&amp;amp;L=mapserver-users&amp;amp;T=0&amp;amp;F=&amp;amp;S=&amp;amp;P=30653 Englischsprachige Mailinglist des UMN MapServers] (mit 8 Antworten)&lt;br /&gt;
&lt;br /&gt;
[http://www.selbstverwaltungbundesweit.de/mapserver/modules.php?name=Forums&amp;amp;file=viewtopic&amp;amp;t=331 Forum auf umn-mapserver-community.de] (mit 25 Antworten)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung ist für Windows XP geschrieben, funktioniert (mit den entsprechenden&lt;br /&gt;
Änderungen) natürlich auch auf Linux-Systemen.&lt;br /&gt;
Für diese Anwendung sollten Sie Grundkenntnisse im Umgang mit dem UMN MapServer,&lt;br /&gt;
PostgreSQL/PostGIS sowie PHP/Mapscript besitzen.&lt;br /&gt;
&lt;br /&gt;
Folgende Umgebung wurde installiert:&lt;br /&gt;
&lt;br /&gt;
* Das ms4w-Paket (2.2.3)&lt;br /&gt;
* PostgreSQL 8.2.4 mit PostGIS-Aufsatz 1.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wie gehen wir nun vor? &lt;br /&gt;
Zunächst einmal laden Sie von der Seite http://pgrouting.postlbs.org den pgRouting&lt;br /&gt;
1.0.0a-win32-installer herunter. Anschließen ein Doppelklick auf das Paket. Die Installation&lt;br /&gt;
läuft quasi von alleine.&lt;br /&gt;
&lt;br /&gt;
Installieren Sie pgrouting am Besten in das Verzeichnis C:\Programme\PostgreSQL\8.2&lt;br /&gt;
(siehe Abbildung 1).&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 1: Installation von PgRouting''' &lt;br /&gt;
&lt;br /&gt;
[[Image:Pgrouting_installation.png|Installationsroutine von pgRouting]]&lt;br /&gt;
&lt;br /&gt;
== Daten ==&lt;br /&gt;
Anschließend brauchen wir natürlich Geodaten.&lt;br /&gt;
Wir verwenden dafür die Freien Geodaten aus dem von der Intevation GmbH initiierten&lt;br /&gt;
Projekt „Frida“ (http://frida.intevation.org/) (siehe Abbildung 2).&lt;br /&gt;
&lt;br /&gt;
''' Abbildung 2: Homepage der Frida-Daten'''&lt;br /&gt;
&lt;br /&gt;
[[Image:frida.png|Homepage der Frida-Daten]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Laden Sie sich hier folgende Daten herunter: frida-1.0.1-shp-joined.tar.gz&lt;br /&gt;
und entpacken Sie diese.&lt;br /&gt;
Im ersten Schritt brauchen wir die „strassen-joined.shp“-Daten.&lt;br /&gt;
Diese Daten benötigen wir allerdings im SQL-Format um diese in die anzulegende&lt;br /&gt;
PostgreSQL/PostGIS-Datenbank zu lesen.&lt;br /&gt;
Also geben wir auf der Kommandozeile z.B. folgendes ein (siehe auch Abbildung 3):&lt;br /&gt;
 Shp2pgsql D:\frida\strassen-joined.shp fridastreets routingdb &amp;gt; D:\frida\strassen-joined.sql&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 3: Shape in SQL-Format umwandeln'''&lt;br /&gt;
&lt;br /&gt;
[[Image:frida_umwandlung.png|Shape in SQL-Format umwandeln]]&lt;br /&gt;
&lt;br /&gt;
== Datenbank anlegen ==&lt;br /&gt;
Anschließend legen wir eine Datenbank mit PostGIS-Unterstützung an (z.B. mit dem Tool&lt;br /&gt;
pgAdmin III).&lt;br /&gt;
Diese Datenbank nennen wir hier mal „routingdb“ (Abbildung 4).&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 4: Anlegen einer Datenbank mit PgAdminIII'''&lt;br /&gt;
&lt;br /&gt;
[[Image:newdb.png|Anlegen einer Datenbank mit PgAdminIII]]&lt;br /&gt;
&lt;br /&gt;
Anschließend dann muss die Datei strassen-joined.sql in die Datenbank eingelesen&lt;br /&gt;
werden.&lt;br /&gt;
Gegen Sie also auf Kommandozeile folgendes ein:&lt;br /&gt;
 psql -U postgres -f D:/frida/strassen-joined.sql routingdb&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 5: Befehl zum Einlesen der SQL-Datei in die Datenbank'''&lt;br /&gt;
&lt;br /&gt;
[[Image:routingeinlesen.png|Befehl zum Einlesen der SQL-Datei in die Datenbank]]&lt;br /&gt;
&lt;br /&gt;
Die Daten der Tabelle „fridastreets“ haben folgende Struktur (siehe Abbildung 6):&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 6: Ursprüngliche Struktur der Frida-Daten'''&lt;br /&gt;
&lt;br /&gt;
[[Image:struktur.png|Ursprüngliche Struktur der Frida-Daten]]&lt;br /&gt;
&lt;br /&gt;
Die Datenbank ist zu diesem Zeitpunkt allerdings noch nicht in der Lage Routen zu&lt;br /&gt;
berechnen. Das wollen wir ändern.&lt;br /&gt;
Dafür führen wir folgende Befehle aus:&lt;br /&gt;
 psql -U postgres -f C:\Programme\PostgreSQL\8.2\share\contrib\routing.sql routingdb&lt;br /&gt;
sowie anschließend:&lt;br /&gt;
 psql -U postgres -f C:\Programme\PostgreSQL\8.2\share\contrib\routing_postgis.sql routingdb&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 7: Routingfunktionen werden in Datenbank gebracht'''&lt;br /&gt;
&lt;br /&gt;
[[Image:routing_postgis_eingelesen.png|Routingfunktionen werden in Datenbank gebracht]]&lt;br /&gt;
&lt;br /&gt;
Ok, die Datenbank ist für Routing im Grunde präpariert. Das bedeutet aber noch lange&lt;br /&gt;
nicht, dass sie nun auch diesbezüglich funktioniert.&lt;br /&gt;
Für verschiedene Funktionen von pgRouting muss eine bestimmte Tabellenstruktur&lt;br /&gt;
vorliegen.&lt;br /&gt;
Neben der gid und der Geometrie (the_geom) müssen auch die Anfangskoordinaten (x1,&lt;br /&gt;
y1 jeweils als eigene Spalte (Datentyp numerisch)) bzw Endkoordinaten (x2,y2 ebenso&lt;br /&gt;
jeweils als eigene Spalte) vorliegen.&lt;br /&gt;
Zudem muss die Tabellenspalte „length“ (numeric) sowie source und target (bigint)&lt;br /&gt;
vorliegen (siehe Abbildung 8).&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 8: Tabellenstruktur für verschiedene Funktionen von pgRouting'''&lt;br /&gt;
&lt;br /&gt;
[[Image:tabellen_ueberischt.png|Tabellenstruktur für verschiedene Funktionen von pgRouting]]&lt;br /&gt;
&lt;br /&gt;
== Daten mittels PHP-Skript einlesen ==&lt;br /&gt;
&lt;br /&gt;
Nachdem diese Spalten angelegt worden sind geht es darum automatisiert die Werte von&lt;br /&gt;
x1,y1,x2,y2 einzulesen.&lt;br /&gt;
Dafür wurde folgendes PHP-Skript geschrieben:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 $host = &amp;quot;localhost&amp;quot;;&lt;br /&gt;
 $port = &amp;quot;5432&amp;quot;;&lt;br /&gt;
 $dbname = &amp;quot;routingdb&amp;quot;;&lt;br /&gt;
 $user = &amp;quot;postgres&amp;quot;;&lt;br /&gt;
 $password = &amp;quot;postgres&amp;quot;;&lt;br /&gt;
 $con_string = &amp;quot;host=$host port=$port dbname=$dbname user=$user password=$password&amp;quot;;&lt;br /&gt;
 $con = pg_connect ($con_string);&lt;br /&gt;
 //Hier der Code für das Ermitteln von x1 und y1&lt;br /&gt;
 $id_check = &amp;quot;SELECT max(gid)as gid from roads&amp;quot;;&lt;br /&gt;
 $res_id_check = pg_query($con,$id_check);&lt;br /&gt;
 $count = pg_result($res_id_check,&amp;quot;gid&amp;quot;);&lt;br /&gt;
 echo &amp;quot;Anzahl der Eintraegege in der DB: &amp;quot;.$count;&lt;br /&gt;
 echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
 for ($x=1;$x&amp;lt;=$count;$x++)&lt;br /&gt;
 {&lt;br /&gt;
 $start = &amp;quot;SELECT astext(StartPoint(the_geom))as startpoint from roads where gid='$x'&amp;quot;;&lt;br /&gt;
 $res_start= pg_query($con,$start);&lt;br /&gt;
 $start_ergebnis = pg_result($res_start,&amp;quot;startpoint&amp;quot;);&lt;br /&gt;
 echo &amp;quot;&amp;lt;b&amp;gt;Geometrie $x&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;quot;;&lt;br /&gt;
 echo &amp;quot;Anfangspunkte (x1,y1): &amp;quot;.$start_ergebnis;&lt;br /&gt;
 echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
 $array_01=array(&amp;quot;POINT(&amp;quot;,&amp;quot;)&amp;quot;);&lt;br /&gt;
 $array_02=array(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
   for($r=0;$r&amp;lt;sizeof($array_01);$r++)&lt;br /&gt;
  {&lt;br /&gt;
   $start_ergebnis=str_replace($array_01[$r],$array_02[$r],$start_ergebnis);&lt;br /&gt;
   }&lt;br /&gt;
 $explode=explode(&amp;quot; &amp;quot;,$start_ergebnis);&lt;br /&gt;
 $x1=$explode[0];&lt;br /&gt;
 $y1=$explode[1];&lt;br /&gt;
 echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
 //Hier der Code für das Ermitteln von x2 und y2&lt;br /&gt;
  $end = &amp;quot;SELECT astext(EndPoint(the_geom))as endpoint from roads where gid='$x'&amp;quot;;&lt;br /&gt;
  $res_end= pg_query($con,$end);&lt;br /&gt;
  $end_ergebnis = pg_result($res_end,&amp;quot;endpoint&amp;quot;);&lt;br /&gt;
  echo &amp;quot;Endpunkte (x2,y2): &amp;quot;.$end_ergebnis;&lt;br /&gt;
  echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
  echo &amp;quot;--------------&amp;quot;;&lt;br /&gt;
  echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $array_01=array(&amp;quot;POINT(&amp;quot;,&amp;quot;)&amp;quot;);&lt;br /&gt;
  $array_02=array(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
   for($r=0;$r&amp;lt;sizeof($array_01);$r++)&lt;br /&gt;
   {&lt;br /&gt;
    $end_ergebnis=str_replace($array_01[$r],$array_02[$r],$end_ergebnis);&lt;br /&gt;
    }&lt;br /&gt;
 $explode=explode(&amp;quot; &amp;quot;,$end_ergebnis);&lt;br /&gt;
 $x2=$explode[0];&lt;br /&gt;
 $y2=$explode[1];&lt;br /&gt;
  //Hier werden dann die Werte in die Spalten geschrieben&lt;br /&gt;
  $werte_in_tabelle_schreiben=&amp;quot;UPDATE roads SET x1='$x1',y1='$y1',x2='$x2',y2='$y2' where&lt;br /&gt;
 gid='$x'&amp;quot;;&lt;br /&gt;
 $res = pg_query($werte_in_tabelle_schreiben);&lt;br /&gt;
  }&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
Das Skript funktioniert eigentlich ganz einfach.&lt;br /&gt;
Es stellt eine Verbindung zur PostgreSQL/PostGIS-Datenbank her.&lt;br /&gt;
Dann wird ermittelt wie viele Geometrie-Einträge insgesamt vorliegen und in einer Schleife&lt;br /&gt;
werden Rechtswerte und Hochwerte der Vertices in die Tabelle gelesen.&lt;br /&gt;
Das Skript dann einfach über einen Webserver (z.B. innerhalb des ms4w-Paketes)&lt;br /&gt;
abschicken.&lt;br /&gt;
 Wichtig: Es kann eine Weile dauern, bis alle Einträge in die Datenbenk geschrieben&lt;br /&gt;
 sind.&lt;br /&gt;
 Falls Sie mit dem ms4w-Paket arbeiten sollten Sie unbedingt die Werte in der&lt;br /&gt;
 PHP-Konfigurationsdatei php.ini (C:\ms4w\Apache\cgi-bin) ändern.&lt;br /&gt;
 In Zeile 255 sollte die execution-time hochgesetzt werden, z.B.:&lt;br /&gt;
 max_execution_time=300;&lt;br /&gt;
 .........damit auch die kompletten Datensätze eingelesen werden.&lt;br /&gt;
&lt;br /&gt;
Als Bestätigung erscheint beim Aufruf des Skriptes etwa folgendes Fenster (Abb. 9), in&lt;br /&gt;
welchem in diesem Falle alle 12323 Einträge bestätigt werden.&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 9: Start- und Endpunkte der Strassengeometrien erstellen'''&lt;br /&gt;
&lt;br /&gt;
[[Image:startpunkt.PNG|Start- und Endpunkte der Strassengeometrien erstellen]]&lt;br /&gt;
&lt;br /&gt;
Neben der oben beschrieben Möglichkeit die Daten mit PHP einzulesen, befüllt auch das folgende SQL-Kommando die Tabelle:&lt;br /&gt;
 update roads set x1=X(StartPoint(the_geom)), y1=Y(StartPoint(the_geom)), x2=X(EndPoint(the_geom)), y2=Y(EndPoint(the_geom)), length=length(the_geom);&lt;br /&gt;
&lt;br /&gt;
 Wichtig: In neuen Versionen von PostGIS (ab 1.3.x) muss allen Funktionen ein 'ST_' vorangestellt werden.&lt;br /&gt;
&lt;br /&gt;
== Weitere Routingspezifische Werte berechnen ==&lt;br /&gt;
Anschließend sollen die length-Werte berechnet werden.&lt;br /&gt;
Das geht ganz einfach mit folgendem SQL-Befehl in der routingdb-Datenbank (Abbildung&lt;br /&gt;
10):&lt;br /&gt;
 UPDATE fridastreets set length=length(the_geom);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 10: length-Berechnung'''&lt;br /&gt;
&lt;br /&gt;
[[Image:length.PNG|Start- und Endpunkte der Strassengeometrien erstellen]]&lt;br /&gt;
&lt;br /&gt;
Jetzt fehlt aber noch etwas.......&lt;br /&gt;
Um die Werte für source und target zu errechnen benutzen wir eine vorgefertige Funktion:&lt;br /&gt;
 SELECT assign_vertex_id('fridastreets', 5);&lt;br /&gt;
Die Zahl ist letztlich variabel. Die Zahl 5 steht für einen Distanzraum, in welchem Knoten&lt;br /&gt;
die selbe Vertexid erhalten.&lt;br /&gt;
Die Funktion erwartet allerdings, dass die Spaltennamen nicht source bzw. target sondern&lt;br /&gt;
source_id &amp;amp; target_id heissen. Natürlich könnten wir die Funktion jetzt modifizieren.&lt;br /&gt;
Schneller geht’s aber, wenn wir die Spalten mal eben umbenennen, anschließend dann&lt;br /&gt;
die Funktion absenden.&lt;br /&gt;
Das ganze dauert dann ein Weilchen, irgendwann sind die Einträge dann aber getätigt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 11: Source/target-Werte berechnen'''&lt;br /&gt;
&lt;br /&gt;
[[Image:Assign_vertex_routing.PNG|Source/target-Werte berechnen]]&lt;br /&gt;
&lt;br /&gt;
== Routingvisualisierung ==&lt;br /&gt;
Anschließend ändern Sie source_id zu „source“ und „target_id“ zu „target“.&lt;br /&gt;
Ok, dann brauchen wir noch ein PHP/Mapscript-Skript sowie ein passendes Mapfile.&lt;br /&gt;
Unter http://files.orkney.jp/pgrouting/sample/pgRouting-sampleapp.tar.bz kann man sich&lt;br /&gt;
diesbezügliche Dateien herunterladen.&lt;br /&gt;
Diese Dateien wurden etwas verändert und können [http://www.selbstverwaltung-bundesweit.de/mapserver/routinganleitung.zip hier] als routing.map bzw. phtmls/routing_os_frida.phtml heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
Die Datei routing.map ist eigentlich ganz einfach.&lt;br /&gt;
Defaultmäßig werden die Frida-Daten über folgenden Eintrag visualisiert:&lt;br /&gt;
 LAYER&lt;br /&gt;
  NAME &amp;quot;roads&amp;quot;&lt;br /&gt;
  TYPE LINE&lt;br /&gt;
  CONNECTION &amp;quot;user=postgres password=postgres dbname=routingdb host=localhost port=5432&amp;quot;&lt;br /&gt;
  CONNECTIONTYPE postgis&lt;br /&gt;
  DATA &amp;quot;the_geom from fridastreets&amp;quot;&lt;br /&gt;
  STATUS DEFAULT&lt;br /&gt;
 #LABELITEM 'strname'&lt;br /&gt;
 CLASSITEM 'strtypid'&lt;br /&gt;
    CLASS&lt;br /&gt;
         EXPRESSION '1'&lt;br /&gt;
         STYLE&lt;br /&gt;
       COLOR       255 0 0&lt;br /&gt;
       END&lt;br /&gt;
    END&lt;br /&gt;
  CLASS&lt;br /&gt;
         EXPRESSION '3'&lt;br /&gt;
         STYLE&lt;br /&gt;
               COLOR       255 255 0&lt;br /&gt;
         END&lt;br /&gt;
  END&lt;br /&gt;
  CLASS&lt;br /&gt;
         EXPRESSION /./&lt;br /&gt;
         STYLE&lt;br /&gt;
               COLOR       200 200 200&lt;br /&gt;
         END&lt;br /&gt;
  END&lt;br /&gt;
 END&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 12: Darstellung der Frida-Geometrien im UMN MapServer'''&lt;br /&gt;
&lt;br /&gt;
[[Image:Frida_strassen.PNG|Source/Darstellung der Frida-Geometrien]]&lt;br /&gt;
&lt;br /&gt;
Der Layer über welchen letztlich die Ausgabe der Route dargestellt wird nennt sich „path“.&lt;br /&gt;
&lt;br /&gt;
 LAYER&lt;br /&gt;
   NAME &amp;quot;path&amp;quot;&lt;br /&gt;
   CONNECTION &amp;quot;user=postgres password=postgres dbname=frida host=localhost port=5432&amp;quot;&lt;br /&gt;
   CONNECTIONTYPE postgis&lt;br /&gt;
  STATUS ON&lt;br /&gt;
   TYPE LINE&lt;br /&gt;
   CLASS&lt;br /&gt;
    NAME &amp;quot;path&amp;quot;&lt;br /&gt;
       STYLE&lt;br /&gt;
       SYMBOL 'circle'&lt;br /&gt;
 COLOR 255 0 0&lt;br /&gt;
 SIZE 8&lt;br /&gt;
       END&lt;br /&gt;
   END&lt;br /&gt;
 END&lt;br /&gt;
&lt;br /&gt;
Dieser wird dann über PHP/Mapscript aktiviert.&lt;br /&gt;
Schauen Sich sich mal den Quellcode von routing_os_frida.phtml mal an.&lt;br /&gt;
Mittels dieses Codes wird die Angabe zum Map-Objekt getätigt und ein statischer Extent&lt;br /&gt;
definiert, dieser kann über die Variable $delta leicht verändert werden:&lt;br /&gt;
&lt;br /&gt;
 $delta=0;&lt;br /&gt;
 $map_file=MAPFILE;&lt;br /&gt;
 $map=ms_newMapObj($map_file);&lt;br /&gt;
 $l=$map-&amp;gt;getLayerByName(&amp;quot;path&amp;quot;);&lt;br /&gt;
 if($l) {&lt;br /&gt;
  if($l &amp;amp;&amp;amp; $start!=0 &amp;amp;&amp;amp; $end!=0) {&lt;br /&gt;
  $cx1=3429000;&lt;br /&gt;
  $cy1=5787000;&lt;br /&gt;
  $cx2=3444000;&lt;br /&gt;
  $cy2=5800000;&lt;br /&gt;
    if($cx1!=0 &amp;amp;&amp;amp; $cy1!=0 &amp;amp;&amp;amp; $cx2!=0 &amp;amp;&amp;amp; $cy2!=0 &amp;amp;&amp;amp;&lt;br /&gt;
       $cx1!=$cx2 &amp;amp;&amp;amp; $cy1!=$cy2) {&lt;br /&gt;
      $minx = min($cx1,$cx2)-$delta;&lt;br /&gt;
      $miny = min($cy1,$cy2)-$delta;&lt;br /&gt;
      $maxx = max($cx1,$cx2)+$delta;&lt;br /&gt;
      $maxy = max($cy1,$cy2)+$delta;&lt;br /&gt;
      $map-&amp;gt;setextent($minx,$miny,$maxx,$maxy);&lt;br /&gt;
&lt;br /&gt;
Entscheidend ist der Aufruf der Funktion „shortest_path_astar2_as_geometry_internal_id“&lt;br /&gt;
(welcher nur dann gelingt, wenn die Tabelle die entsprechend angelegte Struktur besitzt).&lt;br /&gt;
&lt;br /&gt;
 $ll_x = $rectobj-&amp;gt;minx;&lt;br /&gt;
    $ll_y = $rectobj-&amp;gt;miny;&lt;br /&gt;
    $ur_x = $rectobj-&amp;gt;maxx;&lt;br /&gt;
    $ur_y = $rectobj-&amp;gt;maxy;&lt;br /&gt;
    $sql=&amp;quot;the_geom from (select gid, the_geom from &amp;quot;.&lt;br /&gt;
        &amp;quot;shortest_path_astar2_as_geometry_internal_id('fridastreets', &amp;quot;.&lt;br /&gt;
        $start.&amp;quot;, &amp;quot;.$end.&amp;quot;, &amp;quot;.$ll_x.&amp;quot;, &amp;quot;.$ll_y.&amp;quot;, &amp;quot;.$ur_x.&amp;quot;, &amp;quot;.&lt;br /&gt;
        $ur_y.&amp;quot;)) as g using unique gid using SRID=-1&amp;quot;;&lt;br /&gt;
    $l-&amp;gt;set('data', $sql);&lt;br /&gt;
    $l-&amp;gt;set('status', MS_ON);&lt;br /&gt;
&lt;br /&gt;
Die Funktion selber ist definiert in der Datei routing_postgis.sql und wurde ja von uns in&lt;br /&gt;
die Datenbank eingelesen.&lt;br /&gt;
Wichtig ist dann auch noch das Definieren der Start- bzw. Endpunkte.&lt;br /&gt;
Dieses geht über numerische Werte in einem Formular:&lt;br /&gt;
 &amp;lt;select name=start&amp;gt;&lt;br /&gt;
 &amp;lt;option value=0 &amp;gt;W&amp;amp;auml;hle....&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;option value=7649 &amp;gt;Dom&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;option value=291 &amp;gt;Im Hone&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;option value=7750 &amp;gt;Kolpingstrasse&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;option value=7313 &amp;gt;Martinistr.&amp;lt;/option&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Die Zahlen stehen aber nicht für die gid in der Tabelle sondern für den Wert der&lt;br /&gt;
source- oder aber target-spalte (siehe Werte der Kolpingstr. in Abb. 13).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 13: Source/target-Werte der Kolpingstr.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:datenmodell.PNG|Source/target-Werte der Kolpingstr.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend in der Anwendung dann einfach mal 2 Punkte auswählen. Über die Funktion&lt;br /&gt;
shortest_path_astar2_as_geometry_internal_id wird dann „on_the_fly“ die entsprechende&lt;br /&gt;
Route erstellt und über den Layer „path“ im Mapfile ausgegeben (Abb. 14).&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 14: Route mit pgRouting erstellt'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:endbild.PNG|Route mit pgRouting erstellt]]&lt;br /&gt;
&lt;br /&gt;
Fragen zu dieser Thematik bitte an die Mailinglist von&lt;br /&gt;
http://www.umn-mapserver.de,&lt;br /&gt;
oder in die Foren auf:&lt;br /&gt;
http://www.umn-mapserver-community.de&lt;br /&gt;
bzw. http://pgrouting.postlbs.org&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde von [[User:Kai Behncke | Kai Behncke]] und [[User:Peter_panther | Florian Thürkow]] erstellt. Ergänzung von [[User:nhermann] | Nicol Hermann]]&lt;/div&gt;</summary>
		<author><name>Wiki-Nhermann</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Anleitung_f%C3%BCr_Routing_(Pgrouting)_und_UMN_MapServer_mit_den_Freien_Geodaten_aus_Osnabr%C3%BCck_(Frida)&amp;diff=20667</id>
		<title>Anleitung für Routing (Pgrouting) und UMN MapServer mit den Freien Geodaten aus Osnabrück (Frida)</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Anleitung_f%C3%BCr_Routing_(Pgrouting)_und_UMN_MapServer_mit_den_Freien_Geodaten_aus_Osnabr%C3%BCck_(Frida)&amp;diff=20667"/>
		<updated>2007-11-12T16:58:49Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Nhermann: /* Daten mittels PHP-Skript einlesen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung ==&lt;br /&gt;
&lt;br /&gt;
Mittels dieser Anleitung soll Ihnen etwas Hilfestellung beim Thema pgRouting und UMN&lt;br /&gt;
MapServer gegeben werden. Die Anleitung basiert im Wesentlichen auf Know-how, welches auf der Homepage&lt;br /&gt;
http://pgrouting.postlbs.org vermittelt wird.&lt;br /&gt;
&lt;br /&gt;
Weitere hilfreiche Quellen:&lt;br /&gt;
&lt;br /&gt;
[http://freegis.org/pipermail/mapserver-de/2006-August/002433.html Mailinglist von umn-mapserver.de] (mit 14 Antworten)&lt;br /&gt;
&lt;br /&gt;
[http://lists.umn.edu/cgi-bin/wa?A2=ind0612&amp;amp;L=mapserver-users&amp;amp;T=0&amp;amp;F=&amp;amp;S=&amp;amp;P=30653 Englischsprachige Mailinglist des UMN MapServers] (mit 8 Antworten)&lt;br /&gt;
&lt;br /&gt;
[http://www.selbstverwaltungbundesweit.de/mapserver/modules.php?name=Forums&amp;amp;file=viewtopic&amp;amp;t=331 Forum auf umn-mapserver-community.de] (mit 25 Antworten)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung ist für Windows XP geschrieben, funktioniert (mit den entsprechenden&lt;br /&gt;
Änderungen) natürlich auch auf Linux-Systemen.&lt;br /&gt;
Für diese Anwendung sollten Sie Grundkenntnisse im Umgang mit dem UMN MapServer,&lt;br /&gt;
PostgreSQL/PostGIS sowie PHP/Mapscript besitzen.&lt;br /&gt;
&lt;br /&gt;
Folgende Umgebung wurde installiert:&lt;br /&gt;
&lt;br /&gt;
* Das ms4w-Paket (2.2.3)&lt;br /&gt;
* PostgreSQL 8.2.4 mit PostGIS-Aufsatz 1.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wie gehen wir nun vor? &lt;br /&gt;
Zunächst einmal laden Sie von der Seite http://pgrouting.postlbs.org den pgRouting&lt;br /&gt;
1.0.0a-win32-installer herunter. Anschließen ein Doppelklick auf das Paket. Die Installation&lt;br /&gt;
läuft quasi von alleine.&lt;br /&gt;
&lt;br /&gt;
Installieren Sie pgrouting am Besten in das Verzeichnis C:\Programme\PostgreSQL\8.2&lt;br /&gt;
(siehe Abbildung 1).&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 1: Installation von PgRouting''' &lt;br /&gt;
&lt;br /&gt;
[[Image:Pgrouting_installation.png|Installationsroutine von pgRouting]]&lt;br /&gt;
&lt;br /&gt;
== Daten ==&lt;br /&gt;
Anschließend brauchen wir natürlich Geodaten.&lt;br /&gt;
Wir verwenden dafür die Freien Geodaten aus dem von der Intevation GmbH initiierten&lt;br /&gt;
Projekt „Frida“ (http://frida.intevation.org/) (siehe Abbildung 2).&lt;br /&gt;
&lt;br /&gt;
''' Abbildung 2: Homepage der Frida-Daten'''&lt;br /&gt;
&lt;br /&gt;
[[Image:frida.png|Homepage der Frida-Daten]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Laden Sie sich hier folgende Daten herunter: frida-1.0.1-shp-joined.tar.gz&lt;br /&gt;
und entpacken Sie diese.&lt;br /&gt;
Im ersten Schritt brauchen wir die „strassen-joined.shp“-Daten.&lt;br /&gt;
Diese Daten benötigen wir allerdings im SQL-Format um diese in die anzulegende&lt;br /&gt;
PostgreSQL/PostGIS-Datenbank zu lesen.&lt;br /&gt;
Also geben wir auf der Kommandozeile z.B. folgendes ein (siehe auch Abbildung 3):&lt;br /&gt;
 Shp2pgsql D:\frida\strassen-joined.shp fridastreets routingdb &amp;gt; D:\frida\strassen-joined.sql&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 3: Shape in SQL-Format umwandeln'''&lt;br /&gt;
&lt;br /&gt;
[[Image:frida_umwandlung.png|Shape in SQL-Format umwandeln]]&lt;br /&gt;
&lt;br /&gt;
== Datenbank anlegen ==&lt;br /&gt;
Anschließend legen wir eine Datenbank mit PostGIS-Unterstützung an (z.B. mit dem Tool&lt;br /&gt;
pgAdmin III).&lt;br /&gt;
Diese Datenbank nennen wir hier mal „routingdb“ (Abbildung 4).&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 4: Anlegen einer Datenbank mit PgAdminIII'''&lt;br /&gt;
&lt;br /&gt;
[[Image:newdb.png|Anlegen einer Datenbank mit PgAdminIII]]&lt;br /&gt;
&lt;br /&gt;
Anschließend dann muss die Datei strassen-joined.sql in die Datenbank eingelesen&lt;br /&gt;
werden.&lt;br /&gt;
Gegen Sie also auf Kommandozeile folgendes ein:&lt;br /&gt;
 psql -U postgres -f D:/frida/strassen-joined.sql routingdb&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 5: Befehl zum Einlesen der SQL-Datei in die Datenbank'''&lt;br /&gt;
&lt;br /&gt;
[[Image:routingeinlesen.png|Befehl zum Einlesen der SQL-Datei in die Datenbank]]&lt;br /&gt;
&lt;br /&gt;
Die Daten der Tabelle „fridastreets“ haben folgende Struktur (siehe Abbildung 6):&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 6: Ursprüngliche Struktur der Frida-Daten'''&lt;br /&gt;
&lt;br /&gt;
[[Image:struktur.png|Ursprüngliche Struktur der Frida-Daten]]&lt;br /&gt;
&lt;br /&gt;
Die Datenbank ist zu diesem Zeitpunkt allerdings noch nicht in der Lage Routen zu&lt;br /&gt;
berechnen. Das wollen wir ändern.&lt;br /&gt;
Dafür führen wir folgende Befehle aus:&lt;br /&gt;
 psql -U postgres -f C:\Programme\PostgreSQL\8.2\share\contrib\routing.sql routingdb&lt;br /&gt;
sowie anschließend:&lt;br /&gt;
 psql -U postgres -f C:\Programme\PostgreSQL\8.2\share\contrib\routing_postgis.sql routingdb&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 7: Routingfunktionen werden in Datenbank gebracht'''&lt;br /&gt;
&lt;br /&gt;
[[Image:routing_postgis_eingelesen.png|Routingfunktionen werden in Datenbank gebracht]]&lt;br /&gt;
&lt;br /&gt;
Ok, die Datenbank ist für Routing im Grunde präpariert. Das bedeutet aber noch lange&lt;br /&gt;
nicht, dass sie nun auch diesbezüglich funktioniert.&lt;br /&gt;
Für verschiedene Funktionen von pgRouting muss eine bestimmte Tabellenstruktur&lt;br /&gt;
vorliegen.&lt;br /&gt;
Neben der gid und der Geometrie (the_geom) müssen auch die Anfangskoordinaten (x1,&lt;br /&gt;
y1 jeweils als eigene Spalte (Datentyp numerisch)) bzw Endkoordinaten (x2,y2 ebenso&lt;br /&gt;
jeweils als eigene Spalte) vorliegen.&lt;br /&gt;
Zudem muss die Tabellenspalte „length“ (numeric) sowie source und target (bigint)&lt;br /&gt;
vorliegen (siehe Abbildung 8).&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 8: Tabellenstruktur für verschiedene Funktionen von pgRouting'''&lt;br /&gt;
&lt;br /&gt;
[[Image:tabellen_ueberischt.png|Tabellenstruktur für verschiedene Funktionen von pgRouting]]&lt;br /&gt;
&lt;br /&gt;
== Daten mittels PHP-Skript einlesen ==&lt;br /&gt;
&lt;br /&gt;
Nachdem diese Spalten angelegt worden sind geht es darum automatisiert die Werte von&lt;br /&gt;
x1,y1,x2,y2 einzulesen.&lt;br /&gt;
Dafür wurde folgendes PHP-Skript geschrieben:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 $host = &amp;quot;localhost&amp;quot;;&lt;br /&gt;
 $port = &amp;quot;5432&amp;quot;;&lt;br /&gt;
 $dbname = &amp;quot;routingdb&amp;quot;;&lt;br /&gt;
 $user = &amp;quot;postgres&amp;quot;;&lt;br /&gt;
 $password = &amp;quot;postgres&amp;quot;;&lt;br /&gt;
 $con_string = &amp;quot;host=$host port=$port dbname=$dbname user=$user password=$password&amp;quot;;&lt;br /&gt;
 $con = pg_connect ($con_string);&lt;br /&gt;
 //Hier der Code für das Ermitteln von x1 und y1&lt;br /&gt;
 $id_check = &amp;quot;SELECT max(gid)as gid from roads&amp;quot;;&lt;br /&gt;
 $res_id_check = pg_query($con,$id_check);&lt;br /&gt;
 $count = pg_result($res_id_check,&amp;quot;gid&amp;quot;);&lt;br /&gt;
 echo &amp;quot;Anzahl der Eintraegege in der DB: &amp;quot;.$count;&lt;br /&gt;
 echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
 for ($x=1;$x&amp;lt;=$count;$x++)&lt;br /&gt;
 {&lt;br /&gt;
 $start = &amp;quot;SELECT astext(StartPoint(the_geom))as startpoint from roads where gid='$x'&amp;quot;;&lt;br /&gt;
 $res_start= pg_query($con,$start);&lt;br /&gt;
 $start_ergebnis = pg_result($res_start,&amp;quot;startpoint&amp;quot;);&lt;br /&gt;
 echo &amp;quot;&amp;lt;b&amp;gt;Geometrie $x&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;quot;;&lt;br /&gt;
 echo &amp;quot;Anfangspunkte (x1,y1): &amp;quot;.$start_ergebnis;&lt;br /&gt;
 echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
 $array_01=array(&amp;quot;POINT(&amp;quot;,&amp;quot;)&amp;quot;);&lt;br /&gt;
 $array_02=array(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
   for($r=0;$r&amp;lt;sizeof($array_01);$r++)&lt;br /&gt;
  {&lt;br /&gt;
   $start_ergebnis=str_replace($array_01[$r],$array_02[$r],$start_ergebnis);&lt;br /&gt;
   }&lt;br /&gt;
 $explode=explode(&amp;quot; &amp;quot;,$start_ergebnis);&lt;br /&gt;
 $x1=$explode[0];&lt;br /&gt;
 $y1=$explode[1];&lt;br /&gt;
 echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
 //Hier der Code für das Ermitteln von x2 und y2&lt;br /&gt;
  $end = &amp;quot;SELECT astext(EndPoint(the_geom))as endpoint from roads where gid='$x'&amp;quot;;&lt;br /&gt;
  $res_end= pg_query($con,$end);&lt;br /&gt;
  $end_ergebnis = pg_result($res_end,&amp;quot;endpoint&amp;quot;);&lt;br /&gt;
  echo &amp;quot;Endpunkte (x2,y2): &amp;quot;.$end_ergebnis;&lt;br /&gt;
  echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
  echo &amp;quot;--------------&amp;quot;;&lt;br /&gt;
  echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $array_01=array(&amp;quot;POINT(&amp;quot;,&amp;quot;)&amp;quot;);&lt;br /&gt;
  $array_02=array(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
   for($r=0;$r&amp;lt;sizeof($array_01);$r++)&lt;br /&gt;
   {&lt;br /&gt;
    $end_ergebnis=str_replace($array_01[$r],$array_02[$r],$end_ergebnis);&lt;br /&gt;
    }&lt;br /&gt;
 $explode=explode(&amp;quot; &amp;quot;,$end_ergebnis);&lt;br /&gt;
 $x2=$explode[0];&lt;br /&gt;
 $y2=$explode[1];&lt;br /&gt;
  //Hier werden dann die Werte in die Spalten geschrieben&lt;br /&gt;
  $werte_in_tabelle_schreiben=&amp;quot;UPDATE roads SET x1='$x1',y1='$y1',x2='$x2',y2='$y2' where&lt;br /&gt;
 gid='$x'&amp;quot;;&lt;br /&gt;
 $res = pg_query($werte_in_tabelle_schreiben);&lt;br /&gt;
  }&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
Das Skript funktioniert eigentlich ganz einfach.&lt;br /&gt;
Es stellt eine Verbindung zur PostgreSQL/PostGIS-Datenbank her.&lt;br /&gt;
Dann wird ermittelt wie viele Geometrie-Einträge insgesamt vorliegen und in einer Schleife&lt;br /&gt;
werden Rechtswerte und Hochwerte der Vertices in die Tabelle gelesen.&lt;br /&gt;
Das Skript dann einfach über einen Webserver (z.B. innerhalb des ms4w-Paketes)&lt;br /&gt;
abschicken.&lt;br /&gt;
 Wichtig: Es kann eine Weile dauern, bis alle Einträge in die Datenbenk geschrieben&lt;br /&gt;
 sind.&lt;br /&gt;
 Falls Sie mit dem ms4w-Paket arbeiten sollten Sie unbedingt die Werte in der&lt;br /&gt;
 PHP-Konfigurationsdatei php.ini (C:\ms4w\Apache\cgi-bin) ändern.&lt;br /&gt;
 In Zeile 255 sollte die execution-time hochgesetzt werden, z.B.:&lt;br /&gt;
 max_execution_time=300;&lt;br /&gt;
 .........damit auch die kompletten Datensätze eingelesen werden.&lt;br /&gt;
&lt;br /&gt;
Als Bestätigung erscheint beim Aufruf des Skriptes etwa folgendes Fenster (Abb. 9), in&lt;br /&gt;
welchem in diesem Falle alle 12323 Einträge bestätigt werden.&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 9: Start- und Endpunkte der Strassengeometrien erstellen'''&lt;br /&gt;
&lt;br /&gt;
[[Image:startpunkt.PNG|Start- und Endpunkte der Strassengeometrien erstellen]]&lt;br /&gt;
&lt;br /&gt;
Neben der oben beschrieben Möglichkeit die Daten mit PHP einzulesen, befüllt auch das folgende SQL-Kommando die Tabelle:&lt;br /&gt;
 update roads set x1=X(StartPoint(the_geom)), y1=Y(StartPoint(the_geom)), x2=X(EndPoint(the_geom)), y2=Y(EndPoint(the_geom)), length=length(the_geom);&lt;br /&gt;
&lt;br /&gt;
 Wichtig: In neuen Versionen von PostGIS (ab 1.3.x) muss allen Funktionen ein 'ST_' vorangestellt werden.&lt;br /&gt;
&lt;br /&gt;
== Weitere Routingspezifische Werte berechnen ==&lt;br /&gt;
Anschließend sollen die length-Werte berechnet werden.&lt;br /&gt;
Das geht ganz einfach mit folgendem SQL-Befehl in der routingdb-Datenbank (Abbildung&lt;br /&gt;
10):&lt;br /&gt;
 UPDATE fridastreets set length=length(the_geom);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 10: length-Berechnung'''&lt;br /&gt;
&lt;br /&gt;
[[Image:length.PNG|Start- und Endpunkte der Strassengeometrien erstellen]]&lt;br /&gt;
&lt;br /&gt;
Jetzt fehlt aber noch etwas.......&lt;br /&gt;
Um die Werte für source und target zu errechnen benutzen wir eine vorgefertige Funktion:&lt;br /&gt;
 SELECT assign_vertex_id('fridastreets', 5);&lt;br /&gt;
Die Zahl ist letztlich variabel. Die Zahl 5 steht für einen Distanzraum, in welchem Knoten&lt;br /&gt;
die selbe Vertexid erhalten.&lt;br /&gt;
Die Funktion erwartet allerdings, dass die Spaltennamen nicht source bzw. target sondern&lt;br /&gt;
source_id &amp;amp; target_id heissen. Natürlich könnten wir die Funktion jetzt modifizieren.&lt;br /&gt;
Schneller geht’s aber, wenn wir die Spalten mal eben umbenennen, anschließend dann&lt;br /&gt;
die Funktion absenden.&lt;br /&gt;
Das ganze dauert dann ein Weilchen, irgendwann sind die Einträge dann aber getätigt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 11: Source/target-Werte berechnen'''&lt;br /&gt;
&lt;br /&gt;
[[Image:Assign_vertex_routing.PNG|Source/target-Werte berechnen]]&lt;br /&gt;
&lt;br /&gt;
== Routingvisualisierung ==&lt;br /&gt;
Anschließend ändern Sie source_id zu „source“ und „target_id“ zu „target“.&lt;br /&gt;
Ok, dann brauchen wir noch ein PHP/Mapscript-Skript sowie ein passendes Mapfile.&lt;br /&gt;
Unter http://files.orkney.jp/pgrouting/sample/pgRouting-sampleapp.tar.bz kann man sich&lt;br /&gt;
diesbezügliche Dateien herunterladen.&lt;br /&gt;
Diese Dateien wurden etwas verändert und können [http://www.selbstverwaltung-bundesweit.de/mapserver/routinganleitung.zip hier] als routing.map bzw. phtmls/routing_os_frida.phtml heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
Die Datei routing.map ist eigentlich ganz einfach.&lt;br /&gt;
Defaultmäßig werden die Frida-Daten über folgenden Eintrag visualisiert:&lt;br /&gt;
 LAYER&lt;br /&gt;
  NAME &amp;quot;roads&amp;quot;&lt;br /&gt;
  TYPE LINE&lt;br /&gt;
  CONNECTION &amp;quot;user=postgres password=postgres dbname=routingdb host=localhost port=5432&amp;quot;&lt;br /&gt;
  CONNECTIONTYPE postgis&lt;br /&gt;
  DATA &amp;quot;the_geom from fridastreets&amp;quot;&lt;br /&gt;
  STATUS DEFAULT&lt;br /&gt;
 #LABELITEM 'strname'&lt;br /&gt;
 CLASSITEM 'strtypid'&lt;br /&gt;
    CLASS&lt;br /&gt;
         EXPRESSION '1'&lt;br /&gt;
         STYLE&lt;br /&gt;
       COLOR       255 0 0&lt;br /&gt;
       END&lt;br /&gt;
    END&lt;br /&gt;
  CLASS&lt;br /&gt;
         EXPRESSION '3'&lt;br /&gt;
         STYLE&lt;br /&gt;
               COLOR       255 255 0&lt;br /&gt;
         END&lt;br /&gt;
  END&lt;br /&gt;
  CLASS&lt;br /&gt;
         EXPRESSION /./&lt;br /&gt;
         STYLE&lt;br /&gt;
               COLOR       200 200 200&lt;br /&gt;
         END&lt;br /&gt;
  END&lt;br /&gt;
 END&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 12: Darstellung der Frida-Geometrien im UMN MapServer'''&lt;br /&gt;
&lt;br /&gt;
[[Image:Frida_strassen.PNG|Source/Darstellung der Frida-Geometrien]]&lt;br /&gt;
&lt;br /&gt;
Der Layer über welchen letztlich die Ausgabe der Route dargestellt wird nennt sich „path“.&lt;br /&gt;
&lt;br /&gt;
 LAYER&lt;br /&gt;
   NAME &amp;quot;path&amp;quot;&lt;br /&gt;
   CONNECTION &amp;quot;user=postgres password=postgres dbname=frida host=localhost port=5432&amp;quot;&lt;br /&gt;
   CONNECTIONTYPE postgis&lt;br /&gt;
  STATUS ON&lt;br /&gt;
   TYPE LINE&lt;br /&gt;
   CLASS&lt;br /&gt;
    NAME &amp;quot;path&amp;quot;&lt;br /&gt;
       STYLE&lt;br /&gt;
       SYMBOL 'circle'&lt;br /&gt;
 COLOR 255 0 0&lt;br /&gt;
 SIZE 8&lt;br /&gt;
       END&lt;br /&gt;
   END&lt;br /&gt;
 END&lt;br /&gt;
&lt;br /&gt;
Dieser wird dann über PHP/Mapscript aktiviert.&lt;br /&gt;
Schauen Sich sich mal den Quellcode von routing_os_frida.phtml mal an.&lt;br /&gt;
Mittels dieses Codes wird die Angabe zum Map-Objekt getätigt und ein statischer Extent&lt;br /&gt;
definiert, dieser kann über die Variable $delta leicht verändert werden:&lt;br /&gt;
&lt;br /&gt;
 $delta=0;&lt;br /&gt;
 $map_file=MAPFILE;&lt;br /&gt;
 $map=ms_newMapObj($map_file);&lt;br /&gt;
 $l=$map-&amp;gt;getLayerByName(&amp;quot;path&amp;quot;);&lt;br /&gt;
 if($l) {&lt;br /&gt;
  if($l &amp;amp;&amp;amp; $start!=0 &amp;amp;&amp;amp; $end!=0) {&lt;br /&gt;
  $cx1=3429000;&lt;br /&gt;
  $cy1=5787000;&lt;br /&gt;
  $cx2=3444000;&lt;br /&gt;
  $cy2=5800000;&lt;br /&gt;
    if($cx1!=0 &amp;amp;&amp;amp; $cy1!=0 &amp;amp;&amp;amp; $cx2!=0 &amp;amp;&amp;amp; $cy2!=0 &amp;amp;&amp;amp;&lt;br /&gt;
       $cx1!=$cx2 &amp;amp;&amp;amp; $cy1!=$cy2) {&lt;br /&gt;
      $minx = min($cx1,$cx2)-$delta;&lt;br /&gt;
      $miny = min($cy1,$cy2)-$delta;&lt;br /&gt;
      $maxx = max($cx1,$cx2)+$delta;&lt;br /&gt;
      $maxy = max($cy1,$cy2)+$delta;&lt;br /&gt;
      $map-&amp;gt;setextent($minx,$miny,$maxx,$maxy);&lt;br /&gt;
&lt;br /&gt;
Entscheidend ist der Aufruf der Funktion „shortest_path_astar2_as_geometry_internal_id“&lt;br /&gt;
(welcher nur dann gelingt, wenn die Tabelle die entsprechend angelegte Struktur besitzt).&lt;br /&gt;
&lt;br /&gt;
 $ll_x = $rectobj-&amp;gt;minx;&lt;br /&gt;
    $ll_y = $rectobj-&amp;gt;miny;&lt;br /&gt;
    $ur_x = $rectobj-&amp;gt;maxx;&lt;br /&gt;
    $ur_y = $rectobj-&amp;gt;maxy;&lt;br /&gt;
    $sql=&amp;quot;the_geom from (select gid, the_geom from &amp;quot;.&lt;br /&gt;
        &amp;quot;shortest_path_astar2_as_geometry_internal_id('fridastreets', &amp;quot;.&lt;br /&gt;
        $start.&amp;quot;, &amp;quot;.$end.&amp;quot;, &amp;quot;.$ll_x.&amp;quot;, &amp;quot;.$ll_y.&amp;quot;, &amp;quot;.$ur_x.&amp;quot;, &amp;quot;.&lt;br /&gt;
        $ur_y.&amp;quot;)) as g using unique gid using SRID=-1&amp;quot;;&lt;br /&gt;
    $l-&amp;gt;set('data', $sql);&lt;br /&gt;
    $l-&amp;gt;set('status', MS_ON);&lt;br /&gt;
&lt;br /&gt;
Die Funktion selber ist definiert in der Datei routing_postgis.sql und wurde ja von uns in&lt;br /&gt;
die Datenbank eingelesen.&lt;br /&gt;
Wichtig ist dann auch noch das Definieren der Start- bzw. Endpunkte.&lt;br /&gt;
Dieses geht über numerische Werte in einem Formular:&lt;br /&gt;
 &amp;lt;select name=start&amp;gt;&lt;br /&gt;
 &amp;lt;option value=0 &amp;gt;W&amp;amp;auml;hle....&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;option value=7649 &amp;gt;Dom&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;option value=291 &amp;gt;Im Hone&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;option value=7750 &amp;gt;Kolpingstrasse&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;option value=7313 &amp;gt;Martinistr.&amp;lt;/option&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Die Zahlen stehen aber nicht für die gid in der Tabelle sondern für den Wert der&lt;br /&gt;
source- oder aber target-spalte (siehe Werte der Kolpingstr. in Abb. 13).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 13: Source/target-Werte der Kolpingstr.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:datenmodell.PNG|Source/target-Werte der Kolpingstr.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend in der Anwendung dann einfach mal 2 Punkte auswählen. Über die Funktion&lt;br /&gt;
shortest_path_astar2_as_geometry_internal_id wird dann „on_the_fly“ die entsprechende&lt;br /&gt;
Route erstellt und über den Layer „path“ im Mapfile ausgegeben (Abb. 14).&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 14: Route mit pgRouting erstellt'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:endbild.PNG|Route mit pgRouting erstellt]]&lt;br /&gt;
&lt;br /&gt;
Fragen zu dieser Thematik bitte an die Mailinglist von&lt;br /&gt;
http://www.umn-mapserver.de,&lt;br /&gt;
oder in die Foren auf:&lt;br /&gt;
http://www.umn-mapserver-community.de&lt;br /&gt;
bzw. http://pgrouting.postlbs.org&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde von [[User:Kai Behncke | Kai Behncke]] und [[User:Peter_panther | Florian Thürkow]] erstellt.&lt;/div&gt;</summary>
		<author><name>Wiki-Nhermann</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Anleitung_f%C3%BCr_Routing_(Pgrouting)_und_UMN_MapServer_mit_den_Freien_Geodaten_aus_Osnabr%C3%BCck_(Frida)&amp;diff=20666</id>
		<title>Anleitung für Routing (Pgrouting) und UMN MapServer mit den Freien Geodaten aus Osnabrück (Frida)</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Anleitung_f%C3%BCr_Routing_(Pgrouting)_und_UMN_MapServer_mit_den_Freien_Geodaten_aus_Osnabr%C3%BCck_(Frida)&amp;diff=20666"/>
		<updated>2007-11-12T16:56:33Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Nhermann: /* Daten mittels PHP-Skript einlesen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung ==&lt;br /&gt;
&lt;br /&gt;
Mittels dieser Anleitung soll Ihnen etwas Hilfestellung beim Thema pgRouting und UMN&lt;br /&gt;
MapServer gegeben werden. Die Anleitung basiert im Wesentlichen auf Know-how, welches auf der Homepage&lt;br /&gt;
http://pgrouting.postlbs.org vermittelt wird.&lt;br /&gt;
&lt;br /&gt;
Weitere hilfreiche Quellen:&lt;br /&gt;
&lt;br /&gt;
[http://freegis.org/pipermail/mapserver-de/2006-August/002433.html Mailinglist von umn-mapserver.de] (mit 14 Antworten)&lt;br /&gt;
&lt;br /&gt;
[http://lists.umn.edu/cgi-bin/wa?A2=ind0612&amp;amp;L=mapserver-users&amp;amp;T=0&amp;amp;F=&amp;amp;S=&amp;amp;P=30653 Englischsprachige Mailinglist des UMN MapServers] (mit 8 Antworten)&lt;br /&gt;
&lt;br /&gt;
[http://www.selbstverwaltungbundesweit.de/mapserver/modules.php?name=Forums&amp;amp;file=viewtopic&amp;amp;t=331 Forum auf umn-mapserver-community.de] (mit 25 Antworten)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung ist für Windows XP geschrieben, funktioniert (mit den entsprechenden&lt;br /&gt;
Änderungen) natürlich auch auf Linux-Systemen.&lt;br /&gt;
Für diese Anwendung sollten Sie Grundkenntnisse im Umgang mit dem UMN MapServer,&lt;br /&gt;
PostgreSQL/PostGIS sowie PHP/Mapscript besitzen.&lt;br /&gt;
&lt;br /&gt;
Folgende Umgebung wurde installiert:&lt;br /&gt;
&lt;br /&gt;
* Das ms4w-Paket (2.2.3)&lt;br /&gt;
* PostgreSQL 8.2.4 mit PostGIS-Aufsatz 1.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wie gehen wir nun vor? &lt;br /&gt;
Zunächst einmal laden Sie von der Seite http://pgrouting.postlbs.org den pgRouting&lt;br /&gt;
1.0.0a-win32-installer herunter. Anschließen ein Doppelklick auf das Paket. Die Installation&lt;br /&gt;
läuft quasi von alleine.&lt;br /&gt;
&lt;br /&gt;
Installieren Sie pgrouting am Besten in das Verzeichnis C:\Programme\PostgreSQL\8.2&lt;br /&gt;
(siehe Abbildung 1).&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 1: Installation von PgRouting''' &lt;br /&gt;
&lt;br /&gt;
[[Image:Pgrouting_installation.png|Installationsroutine von pgRouting]]&lt;br /&gt;
&lt;br /&gt;
== Daten ==&lt;br /&gt;
Anschließend brauchen wir natürlich Geodaten.&lt;br /&gt;
Wir verwenden dafür die Freien Geodaten aus dem von der Intevation GmbH initiierten&lt;br /&gt;
Projekt „Frida“ (http://frida.intevation.org/) (siehe Abbildung 2).&lt;br /&gt;
&lt;br /&gt;
''' Abbildung 2: Homepage der Frida-Daten'''&lt;br /&gt;
&lt;br /&gt;
[[Image:frida.png|Homepage der Frida-Daten]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Laden Sie sich hier folgende Daten herunter: frida-1.0.1-shp-joined.tar.gz&lt;br /&gt;
und entpacken Sie diese.&lt;br /&gt;
Im ersten Schritt brauchen wir die „strassen-joined.shp“-Daten.&lt;br /&gt;
Diese Daten benötigen wir allerdings im SQL-Format um diese in die anzulegende&lt;br /&gt;
PostgreSQL/PostGIS-Datenbank zu lesen.&lt;br /&gt;
Also geben wir auf der Kommandozeile z.B. folgendes ein (siehe auch Abbildung 3):&lt;br /&gt;
 Shp2pgsql D:\frida\strassen-joined.shp fridastreets routingdb &amp;gt; D:\frida\strassen-joined.sql&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 3: Shape in SQL-Format umwandeln'''&lt;br /&gt;
&lt;br /&gt;
[[Image:frida_umwandlung.png|Shape in SQL-Format umwandeln]]&lt;br /&gt;
&lt;br /&gt;
== Datenbank anlegen ==&lt;br /&gt;
Anschließend legen wir eine Datenbank mit PostGIS-Unterstützung an (z.B. mit dem Tool&lt;br /&gt;
pgAdmin III).&lt;br /&gt;
Diese Datenbank nennen wir hier mal „routingdb“ (Abbildung 4).&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 4: Anlegen einer Datenbank mit PgAdminIII'''&lt;br /&gt;
&lt;br /&gt;
[[Image:newdb.png|Anlegen einer Datenbank mit PgAdminIII]]&lt;br /&gt;
&lt;br /&gt;
Anschließend dann muss die Datei strassen-joined.sql in die Datenbank eingelesen&lt;br /&gt;
werden.&lt;br /&gt;
Gegen Sie also auf Kommandozeile folgendes ein:&lt;br /&gt;
 psql -U postgres -f D:/frida/strassen-joined.sql routingdb&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 5: Befehl zum Einlesen der SQL-Datei in die Datenbank'''&lt;br /&gt;
&lt;br /&gt;
[[Image:routingeinlesen.png|Befehl zum Einlesen der SQL-Datei in die Datenbank]]&lt;br /&gt;
&lt;br /&gt;
Die Daten der Tabelle „fridastreets“ haben folgende Struktur (siehe Abbildung 6):&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 6: Ursprüngliche Struktur der Frida-Daten'''&lt;br /&gt;
&lt;br /&gt;
[[Image:struktur.png|Ursprüngliche Struktur der Frida-Daten]]&lt;br /&gt;
&lt;br /&gt;
Die Datenbank ist zu diesem Zeitpunkt allerdings noch nicht in der Lage Routen zu&lt;br /&gt;
berechnen. Das wollen wir ändern.&lt;br /&gt;
Dafür führen wir folgende Befehle aus:&lt;br /&gt;
 psql -U postgres -f C:\Programme\PostgreSQL\8.2\share\contrib\routing.sql routingdb&lt;br /&gt;
sowie anschließend:&lt;br /&gt;
 psql -U postgres -f C:\Programme\PostgreSQL\8.2\share\contrib\routing_postgis.sql routingdb&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 7: Routingfunktionen werden in Datenbank gebracht'''&lt;br /&gt;
&lt;br /&gt;
[[Image:routing_postgis_eingelesen.png|Routingfunktionen werden in Datenbank gebracht]]&lt;br /&gt;
&lt;br /&gt;
Ok, die Datenbank ist für Routing im Grunde präpariert. Das bedeutet aber noch lange&lt;br /&gt;
nicht, dass sie nun auch diesbezüglich funktioniert.&lt;br /&gt;
Für verschiedene Funktionen von pgRouting muss eine bestimmte Tabellenstruktur&lt;br /&gt;
vorliegen.&lt;br /&gt;
Neben der gid und der Geometrie (the_geom) müssen auch die Anfangskoordinaten (x1,&lt;br /&gt;
y1 jeweils als eigene Spalte (Datentyp numerisch)) bzw Endkoordinaten (x2,y2 ebenso&lt;br /&gt;
jeweils als eigene Spalte) vorliegen.&lt;br /&gt;
Zudem muss die Tabellenspalte „length“ (numeric) sowie source und target (bigint)&lt;br /&gt;
vorliegen (siehe Abbildung 8).&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 8: Tabellenstruktur für verschiedene Funktionen von pgRouting'''&lt;br /&gt;
&lt;br /&gt;
[[Image:tabellen_ueberischt.png|Tabellenstruktur für verschiedene Funktionen von pgRouting]]&lt;br /&gt;
&lt;br /&gt;
== Daten mittels PHP-Skript einlesen ==&lt;br /&gt;
&lt;br /&gt;
Nachdem diese Spalten angelegt worden sind geht es darum automatisiert die Werte von&lt;br /&gt;
x1,y1,x2,y2 einzulesen.&lt;br /&gt;
Dafür wurde folgendes PHP-Skript geschrieben:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 $host = &amp;quot;localhost&amp;quot;;&lt;br /&gt;
 $port = &amp;quot;5432&amp;quot;;&lt;br /&gt;
 $dbname = &amp;quot;routingdb&amp;quot;;&lt;br /&gt;
 $user = &amp;quot;postgres&amp;quot;;&lt;br /&gt;
 $password = &amp;quot;postgres&amp;quot;;&lt;br /&gt;
 $con_string = &amp;quot;host=$host port=$port dbname=$dbname user=$user password=$password&amp;quot;;&lt;br /&gt;
 $con = pg_connect ($con_string);&lt;br /&gt;
 //Hier der Code für das Ermitteln von x1 und y1&lt;br /&gt;
 $id_check = &amp;quot;SELECT max(gid)as gid from roads&amp;quot;;&lt;br /&gt;
 $res_id_check = pg_query($con,$id_check);&lt;br /&gt;
 $count = pg_result($res_id_check,&amp;quot;gid&amp;quot;);&lt;br /&gt;
 echo &amp;quot;Anzahl der Eintraegege in der DB: &amp;quot;.$count;&lt;br /&gt;
 echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
 for ($x=1;$x&amp;lt;=$count;$x++)&lt;br /&gt;
 {&lt;br /&gt;
 $start = &amp;quot;SELECT astext(StartPoint(the_geom))as startpoint from roads where gid='$x'&amp;quot;;&lt;br /&gt;
 $res_start= pg_query($con,$start);&lt;br /&gt;
 $start_ergebnis = pg_result($res_start,&amp;quot;startpoint&amp;quot;);&lt;br /&gt;
 echo &amp;quot;&amp;lt;b&amp;gt;Geometrie $x&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;quot;;&lt;br /&gt;
 echo &amp;quot;Anfangspunkte (x1,y1): &amp;quot;.$start_ergebnis;&lt;br /&gt;
 echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
 $array_01=array(&amp;quot;POINT(&amp;quot;,&amp;quot;)&amp;quot;);&lt;br /&gt;
 $array_02=array(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
   for($r=0;$r&amp;lt;sizeof($array_01);$r++)&lt;br /&gt;
  {&lt;br /&gt;
   $start_ergebnis=str_replace($array_01[$r],$array_02[$r],$start_ergebnis);&lt;br /&gt;
   }&lt;br /&gt;
 $explode=explode(&amp;quot; &amp;quot;,$start_ergebnis);&lt;br /&gt;
 $x1=$explode[0];&lt;br /&gt;
 $y1=$explode[1];&lt;br /&gt;
 echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
 //Hier der Code für das Ermitteln von x2 und y2&lt;br /&gt;
  $end = &amp;quot;SELECT astext(EndPoint(the_geom))as endpoint from roads where gid='$x'&amp;quot;;&lt;br /&gt;
  $res_end= pg_query($con,$end);&lt;br /&gt;
  $end_ergebnis = pg_result($res_end,&amp;quot;endpoint&amp;quot;);&lt;br /&gt;
  echo &amp;quot;Endpunkte (x2,y2): &amp;quot;.$end_ergebnis;&lt;br /&gt;
  echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
  echo &amp;quot;--------------&amp;quot;;&lt;br /&gt;
  echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $array_01=array(&amp;quot;POINT(&amp;quot;,&amp;quot;)&amp;quot;);&lt;br /&gt;
  $array_02=array(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
   for($r=0;$r&amp;lt;sizeof($array_01);$r++)&lt;br /&gt;
   {&lt;br /&gt;
    $end_ergebnis=str_replace($array_01[$r],$array_02[$r],$end_ergebnis);&lt;br /&gt;
    }&lt;br /&gt;
 $explode=explode(&amp;quot; &amp;quot;,$end_ergebnis);&lt;br /&gt;
 $x2=$explode[0];&lt;br /&gt;
 $y2=$explode[1];&lt;br /&gt;
  //Hier werden dann die Werte in die Spalten geschrieben&lt;br /&gt;
  $werte_in_tabelle_schreiben=&amp;quot;UPDATE roads SET x1='$x1',y1='$y1',x2='$x2',y2='$y2' where&lt;br /&gt;
 gid='$x'&amp;quot;;&lt;br /&gt;
 $res = pg_query($werte_in_tabelle_schreiben);&lt;br /&gt;
  }&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
Das Skript funktioniert eigentlich ganz einfach.&lt;br /&gt;
Es stellt eine Verbindung zur PostgreSQL/PostGIS-Datenbank her.&lt;br /&gt;
Dann wird ermittelt wie viele Geometrie-Einträge insgesamt vorliegen und in einer Schleife&lt;br /&gt;
werden Rechtswerte und Hochwerte der Vertices in die Tabelle gelesen.&lt;br /&gt;
Das Skript dann einfach über einen Webserver (z.B. innerhalb des ms4w-Paketes)&lt;br /&gt;
abschicken.&lt;br /&gt;
 Wichtig: Es kann eine Weile dauern, bis alle Einträge in die Datenbenk geschrieben&lt;br /&gt;
 sind.&lt;br /&gt;
 Falls Sie mit dem ms4w-Paket arbeiten sollten Sie unbedingt die Werte in der&lt;br /&gt;
 PHP-Konfigurationsdatei php.ini (C:\ms4w\Apache\cgi-bin) ändern.&lt;br /&gt;
 In Zeile 255 sollte die execution-time hochgesetzt werden, z.B.:&lt;br /&gt;
 max_execution_time=300;&lt;br /&gt;
 .........damit auch die kompletten Datensätze eingelesen werden.&lt;br /&gt;
&lt;br /&gt;
Als Bestätigung erscheint beim Aufruf des Skriptes etwa folgendes Fenster (Abb. 9), in&lt;br /&gt;
welchem in diesem Falle alle 12323 Einträge bestätigt werden.&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 9: Start- und Endpunkte der Strassengeometrien erstellen'''&lt;br /&gt;
&lt;br /&gt;
[[Image:startpunkt.PNG|Start- und Endpunkte der Strassengeometrien erstellen]]&lt;br /&gt;
&lt;br /&gt;
Neben der oben beschrieben Möglichkeit die Daten mit PHP einzulesen, befüllt auch das folgende SQL-Kommando die Tabelle:&lt;br /&gt;
update roads set x1=X(StartPoint(the_geom)), y1=Y(StartPoint(the_geom)), x2=X(EndPoint(the_geom)), y2=Y(EndPoint(the_geom)), length=length(the_geom);&lt;br /&gt;
Wichtig: In neuen Versionen von PostGIS (ab 1.3.x) muss allen Funktionen ein 'ST_' vorangestellt werden.&lt;br /&gt;
&lt;br /&gt;
== Weitere Routingspezifische Werte berechnen ==&lt;br /&gt;
Anschließend sollen die length-Werte berechnet werden.&lt;br /&gt;
Das geht ganz einfach mit folgendem SQL-Befehl in der routingdb-Datenbank (Abbildung&lt;br /&gt;
10):&lt;br /&gt;
 UPDATE fridastreets set length=length(the_geom);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 10: length-Berechnung'''&lt;br /&gt;
&lt;br /&gt;
[[Image:length.PNG|Start- und Endpunkte der Strassengeometrien erstellen]]&lt;br /&gt;
&lt;br /&gt;
Jetzt fehlt aber noch etwas.......&lt;br /&gt;
Um die Werte für source und target zu errechnen benutzen wir eine vorgefertige Funktion:&lt;br /&gt;
 SELECT assign_vertex_id('fridastreets', 5);&lt;br /&gt;
Die Zahl ist letztlich variabel. Die Zahl 5 steht für einen Distanzraum, in welchem Knoten&lt;br /&gt;
die selbe Vertexid erhalten.&lt;br /&gt;
Die Funktion erwartet allerdings, dass die Spaltennamen nicht source bzw. target sondern&lt;br /&gt;
source_id &amp;amp; target_id heissen. Natürlich könnten wir die Funktion jetzt modifizieren.&lt;br /&gt;
Schneller geht’s aber, wenn wir die Spalten mal eben umbenennen, anschließend dann&lt;br /&gt;
die Funktion absenden.&lt;br /&gt;
Das ganze dauert dann ein Weilchen, irgendwann sind die Einträge dann aber getätigt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 11: Source/target-Werte berechnen'''&lt;br /&gt;
&lt;br /&gt;
[[Image:Assign_vertex_routing.PNG|Source/target-Werte berechnen]]&lt;br /&gt;
&lt;br /&gt;
== Routingvisualisierung ==&lt;br /&gt;
Anschließend ändern Sie source_id zu „source“ und „target_id“ zu „target“.&lt;br /&gt;
Ok, dann brauchen wir noch ein PHP/Mapscript-Skript sowie ein passendes Mapfile.&lt;br /&gt;
Unter http://files.orkney.jp/pgrouting/sample/pgRouting-sampleapp.tar.bz kann man sich&lt;br /&gt;
diesbezügliche Dateien herunterladen.&lt;br /&gt;
Diese Dateien wurden etwas verändert und können [http://www.selbstverwaltung-bundesweit.de/mapserver/routinganleitung.zip hier] als routing.map bzw. phtmls/routing_os_frida.phtml heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
Die Datei routing.map ist eigentlich ganz einfach.&lt;br /&gt;
Defaultmäßig werden die Frida-Daten über folgenden Eintrag visualisiert:&lt;br /&gt;
 LAYER&lt;br /&gt;
  NAME &amp;quot;roads&amp;quot;&lt;br /&gt;
  TYPE LINE&lt;br /&gt;
  CONNECTION &amp;quot;user=postgres password=postgres dbname=routingdb host=localhost port=5432&amp;quot;&lt;br /&gt;
  CONNECTIONTYPE postgis&lt;br /&gt;
  DATA &amp;quot;the_geom from fridastreets&amp;quot;&lt;br /&gt;
  STATUS DEFAULT&lt;br /&gt;
 #LABELITEM 'strname'&lt;br /&gt;
 CLASSITEM 'strtypid'&lt;br /&gt;
    CLASS&lt;br /&gt;
         EXPRESSION '1'&lt;br /&gt;
         STYLE&lt;br /&gt;
       COLOR       255 0 0&lt;br /&gt;
       END&lt;br /&gt;
    END&lt;br /&gt;
  CLASS&lt;br /&gt;
         EXPRESSION '3'&lt;br /&gt;
         STYLE&lt;br /&gt;
               COLOR       255 255 0&lt;br /&gt;
         END&lt;br /&gt;
  END&lt;br /&gt;
  CLASS&lt;br /&gt;
         EXPRESSION /./&lt;br /&gt;
         STYLE&lt;br /&gt;
               COLOR       200 200 200&lt;br /&gt;
         END&lt;br /&gt;
  END&lt;br /&gt;
 END&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 12: Darstellung der Frida-Geometrien im UMN MapServer'''&lt;br /&gt;
&lt;br /&gt;
[[Image:Frida_strassen.PNG|Source/Darstellung der Frida-Geometrien]]&lt;br /&gt;
&lt;br /&gt;
Der Layer über welchen letztlich die Ausgabe der Route dargestellt wird nennt sich „path“.&lt;br /&gt;
&lt;br /&gt;
 LAYER&lt;br /&gt;
   NAME &amp;quot;path&amp;quot;&lt;br /&gt;
   CONNECTION &amp;quot;user=postgres password=postgres dbname=frida host=localhost port=5432&amp;quot;&lt;br /&gt;
   CONNECTIONTYPE postgis&lt;br /&gt;
  STATUS ON&lt;br /&gt;
   TYPE LINE&lt;br /&gt;
   CLASS&lt;br /&gt;
    NAME &amp;quot;path&amp;quot;&lt;br /&gt;
       STYLE&lt;br /&gt;
       SYMBOL 'circle'&lt;br /&gt;
 COLOR 255 0 0&lt;br /&gt;
 SIZE 8&lt;br /&gt;
       END&lt;br /&gt;
   END&lt;br /&gt;
 END&lt;br /&gt;
&lt;br /&gt;
Dieser wird dann über PHP/Mapscript aktiviert.&lt;br /&gt;
Schauen Sich sich mal den Quellcode von routing_os_frida.phtml mal an.&lt;br /&gt;
Mittels dieses Codes wird die Angabe zum Map-Objekt getätigt und ein statischer Extent&lt;br /&gt;
definiert, dieser kann über die Variable $delta leicht verändert werden:&lt;br /&gt;
&lt;br /&gt;
 $delta=0;&lt;br /&gt;
 $map_file=MAPFILE;&lt;br /&gt;
 $map=ms_newMapObj($map_file);&lt;br /&gt;
 $l=$map-&amp;gt;getLayerByName(&amp;quot;path&amp;quot;);&lt;br /&gt;
 if($l) {&lt;br /&gt;
  if($l &amp;amp;&amp;amp; $start!=0 &amp;amp;&amp;amp; $end!=0) {&lt;br /&gt;
  $cx1=3429000;&lt;br /&gt;
  $cy1=5787000;&lt;br /&gt;
  $cx2=3444000;&lt;br /&gt;
  $cy2=5800000;&lt;br /&gt;
    if($cx1!=0 &amp;amp;&amp;amp; $cy1!=0 &amp;amp;&amp;amp; $cx2!=0 &amp;amp;&amp;amp; $cy2!=0 &amp;amp;&amp;amp;&lt;br /&gt;
       $cx1!=$cx2 &amp;amp;&amp;amp; $cy1!=$cy2) {&lt;br /&gt;
      $minx = min($cx1,$cx2)-$delta;&lt;br /&gt;
      $miny = min($cy1,$cy2)-$delta;&lt;br /&gt;
      $maxx = max($cx1,$cx2)+$delta;&lt;br /&gt;
      $maxy = max($cy1,$cy2)+$delta;&lt;br /&gt;
      $map-&amp;gt;setextent($minx,$miny,$maxx,$maxy);&lt;br /&gt;
&lt;br /&gt;
Entscheidend ist der Aufruf der Funktion „shortest_path_astar2_as_geometry_internal_id“&lt;br /&gt;
(welcher nur dann gelingt, wenn die Tabelle die entsprechend angelegte Struktur besitzt).&lt;br /&gt;
&lt;br /&gt;
 $ll_x = $rectobj-&amp;gt;minx;&lt;br /&gt;
    $ll_y = $rectobj-&amp;gt;miny;&lt;br /&gt;
    $ur_x = $rectobj-&amp;gt;maxx;&lt;br /&gt;
    $ur_y = $rectobj-&amp;gt;maxy;&lt;br /&gt;
    $sql=&amp;quot;the_geom from (select gid, the_geom from &amp;quot;.&lt;br /&gt;
        &amp;quot;shortest_path_astar2_as_geometry_internal_id('fridastreets', &amp;quot;.&lt;br /&gt;
        $start.&amp;quot;, &amp;quot;.$end.&amp;quot;, &amp;quot;.$ll_x.&amp;quot;, &amp;quot;.$ll_y.&amp;quot;, &amp;quot;.$ur_x.&amp;quot;, &amp;quot;.&lt;br /&gt;
        $ur_y.&amp;quot;)) as g using unique gid using SRID=-1&amp;quot;;&lt;br /&gt;
    $l-&amp;gt;set('data', $sql);&lt;br /&gt;
    $l-&amp;gt;set('status', MS_ON);&lt;br /&gt;
&lt;br /&gt;
Die Funktion selber ist definiert in der Datei routing_postgis.sql und wurde ja von uns in&lt;br /&gt;
die Datenbank eingelesen.&lt;br /&gt;
Wichtig ist dann auch noch das Definieren der Start- bzw. Endpunkte.&lt;br /&gt;
Dieses geht über numerische Werte in einem Formular:&lt;br /&gt;
 &amp;lt;select name=start&amp;gt;&lt;br /&gt;
 &amp;lt;option value=0 &amp;gt;W&amp;amp;auml;hle....&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;option value=7649 &amp;gt;Dom&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;option value=291 &amp;gt;Im Hone&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;option value=7750 &amp;gt;Kolpingstrasse&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;option value=7313 &amp;gt;Martinistr.&amp;lt;/option&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Die Zahlen stehen aber nicht für die gid in der Tabelle sondern für den Wert der&lt;br /&gt;
source- oder aber target-spalte (siehe Werte der Kolpingstr. in Abb. 13).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 13: Source/target-Werte der Kolpingstr.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:datenmodell.PNG|Source/target-Werte der Kolpingstr.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend in der Anwendung dann einfach mal 2 Punkte auswählen. Über die Funktion&lt;br /&gt;
shortest_path_astar2_as_geometry_internal_id wird dann „on_the_fly“ die entsprechende&lt;br /&gt;
Route erstellt und über den Layer „path“ im Mapfile ausgegeben (Abb. 14).&lt;br /&gt;
&lt;br /&gt;
'''Abbildung 14: Route mit pgRouting erstellt'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:endbild.PNG|Route mit pgRouting erstellt]]&lt;br /&gt;
&lt;br /&gt;
Fragen zu dieser Thematik bitte an die Mailinglist von&lt;br /&gt;
http://www.umn-mapserver.de,&lt;br /&gt;
oder in die Foren auf:&lt;br /&gt;
http://www.umn-mapserver-community.de&lt;br /&gt;
bzw. http://pgrouting.postlbs.org&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde von [[User:Kai Behncke | Kai Behncke]] und [[User:Peter_panther | Florian Thürkow]] erstellt.&lt;/div&gt;</summary>
		<author><name>Wiki-Nhermann</name></author>
	</entry>
</feed>