MapServer TEMPLATE: Difference between revisions

From Wildsong
Jump to navigationJump to search
Brian Wilson (talk | contribs)
Brian Wilson (talk | contribs)
mNo edit summary
 
(10 intermediate revisions by the same user not shown)
Line 1: Line 1:
"Templates" is the simplest way to create an interactive mapserver site.
"Templates" is the simplest way to create an interactive [[MapServer]] site.
(You can create non-interactive ones without templates but what's the fun of that?)
(You can create non-interactive ones without templates but what's the fun of that?)


==The non-interacttive example==
Would it not be great if the examples actually worked? I have moved my mapserver around 2 or 3 times now. Not to mention the one running on my destkop machine behind the firewall and only accessible as 'localhost'... that's life.


Without using a template, I (the masterful Web GIS progreammer) can create a .map file and put the appropriate URL onto a Web page, for example,
I bet some illustrations embedded in this page would be useful.
 
==The non-interactive example==
 
Without using a template, I (the masterful Web GIS programmer) can create a map file and put the appropriate URL onto a Web page, for example,


http://mapserver.wildsong.biz/cgi-bin/mapserv?map=../mapserver/html/demo/hello.map&layer=credits&mode=map
http://mapserver.wildsong.biz/cgi-bin/mapserv?map=../mapserver/html/demo/hello.map&layer=credits&mode=map
Line 14: Line 18:
back to your browser ("mode=map").
back to your browser ("mode=map").


I am keeping my files for this project in the html directory tree so that you can
I am keeping my files for this project in the html directory tree so that you can download them if you want to look at them. For security normally I would keep them OUTSIDE the tree.
download them if you want to look at them. For security normally I would keep them
OUTSIDE the tree... just because...  


So for example, you can grab the map file with this URL:
So for example, you can grab the map file with this URL:
Line 23: Line 25:
==The first template==
==The first template==


I walked through the [http://mapserver.gis.umn.edu/doc/template-reference.html MapServer template reference] and created a template file that has many of the template tags in it. You can look at it; click here and do view source:
I walked through the [http://mapserver.gis.umn.edu/doc/template-reference.html Mapserver template reference] and created a template file that has many of the template tags in it. You can look at it; click here and do view source:
http://mapserver.wildsong.biz/demo/hello.template.html
http://mapserver.wildsong.biz/demo/hello.template.html


To tell MapServer to use my template file, I can change mode to browse and add
To tell Mapserver to use my template file, I can change mode to 'browse' and add
a template specifier:
a template specifier:


http://mapserver.wildsong.biz/cgi-bin/mapserv?map=../mapserver/html/demo/hello.map&mode=browse&map_web_template=../mapserver/html/demo/hello.template.html
http://mapserver.wildsong.biz/cgi-bin/mapserv?map=../mapserver/html/demo/hello.map&mode=browse&map_web_template=../mapserver/html/demo/hello.template.html


I have to specify a layer; that example just shows you a blue box;
I have to specify a layer; that example just shows you an empty blue box;


http://mapserver.wildsong.biz/cgi-bin/mapserv?map=../mapserver/html/demo/hello.map&mode=browse&map_web_template=../mapserver/html/demo/hello.template.html&layer=credits
http://mapserver.wildsong.biz/cgi-bin/mapserv?map=../mapserver/html/demo/hello.map&mode=browse&map_web_template=../mapserver/html/demo/hello.template.html&layer=credits


An aside: If you click reload on the above page several times you will notice the name
An aside: If you click reload on the above page several times you will notice the name of the img file changing. Each click causes a new PNG file to be generated. I have to set up a separate program to delete the darned things so that my server does not fill up and keel over.
of the img file changing. Each click causes a new PNG file to be generated. I have to
set up a separate program to delete the darned things so that my server does not
fill up and keel over.


The template has lots of mapserver template tags in it, which are a word enclosed by square brackets. They look like wiki tags, come to think of it.
The template has lots of mapserver template tags in it, which are a word enclosed by square brackets. They look like wiki tags, come to think of it.


The '''clever idea''' is that the template can have an HTML form in it, so you can
The '''clever idea''' is that the template can have an HTML form in it, so you can put buttons and whatnot into the form, and ''voila!'' interactivity! Each time you click submit, the request is processed by mapserv, pushed through the template, and you get the updated results.
put buttons and whatnot into the form, and ''voila!'' interactivity! Each time you
click submit, the request is processed by mapserv, pushed through the template, and
you get the updated results.


== Query templates ==
== Query templates ==


But wait, there's more! I started down this path of exploration to debug a problem
But wait, there's more! I started down this path of exploration to debug a problem with queries. I have a Mapserver site that has a broken search feature. So next I need to learn how MapServer handles non-spatial queries.  
with queries. I have a MapServer site that has a broken search feature. So next I
need to learn how MapServer handles non-spatial queries.  


First I have to create a demo that uses a ShapeFile, not just a bit of text. The
For this demo I will use shapefiles with real data in them, not just a bit of text. These shapefiles some spatial (vector) data, and also some attribute data that I can query.  
ShapeFile will have some spatial (vector) data in it, and also some attribute data
that I can query.  


Here is the map file for your perusal:  
Here is the map file for your perusal: http://mapserver.wildsong.biz/demo/shape.map
http://mapserver.wildsong.biz/demo/shape.map
and here is a simple link that will display the map:
http://mapserver.wildsong.biz/cgi-bin/mapserv?map=../mapserver/html/demo/shape.map&mode=map&layer=Streets&layer=Parks&layer=credits


Here is a link that will display the map:
These URLs are starting to get unwieldy so from now on I will embed them as links.
http://mapserver.wildsong.biz/cgi-bin/mapserv?map=../mapserver/html/demo/shape.map&mode=map&layer=Streets%20Benton&layer=Parks&layer=credits


Next, here is a link that will push the map through a [http://mapserver.wildsong.biz/demo/shape.template.html template].
Next, here is a link that will push the map through a [http://mapserver.wildsong.biz/demo/shape.template.html template].
(remember to use "view source" to look at the template.)
(remember to use "view source" to look at the template.) and here is the map
pushed through the template:
[http://mapserver.wildsong.biz/cgi-bin/mapserv?map=../mapserver/html/demo/shape.map&mode=map&layer=Streets&layer=Parks&layer=credits&map_web_template=../mapserver/html/demo/shape.template.html&mode=browse Parks map]
 
=== Examining the data in your shapefiles ===
 
Before designing a query to put in a map file you need to know more about your data. The Web Mapping book suggests using ogrinfo; I think it's modestly useful.
I'd say use a GIS program; ArcCatalog comes to mind.
 
With ogrinfo you can get listings of the names of datafields pretty easily; try this:
 
ogrinfo -so shapefilename.shp        will return a list of layers in the file
ogrinfo -so shapefilename.shp layer  will list info on a layer called layer


http://mapserver.wildsong.biz/cgi-bin/mapserv?map=../mapserver/html/demo/shape.map&mode=map&layer=Streets%20Benton&layer=Parks&layer=credits&map_web_template=../mapserver/html/demo/shape.template.html&mode=browse


You can see how the URL's are starting to get unwieldy! I am going to stop
Alas, TO BE CONTINUED. [mailto:brian@wildsong.biz?subject=Mapserver%20Templates Contact me] if you want me to write more here!
displaying the entire URL string and use links; for example this displays the
[http://mapserver.wildsong.biz/cgi-bin/mapserv?map=../mapserver/html/demo/shape.map&mode=map&layer=Streets%20Benton&layer=Parks&layer=credits&map_web_template=../mapserver/html/demo/shape.template.html&mode=browse same map]

Latest revision as of 23:15, 12 September 2005

"Templates" is the simplest way to create an interactive MapServer site. (You can create non-interactive ones without templates but what's the fun of that?)

Would it not be great if the examples actually worked? I have moved my mapserver around 2 or 3 times now. Not to mention the one running on my destkop machine behind the firewall and only accessible as 'localhost'... that's life.

I bet some illustrations embedded in this page would be useful.

The non-interactive example

Without using a template, I (the masterful Web GIS programmer) can create a map file and put the appropriate URL onto a Web page, for example,

http://mapserver.wildsong.biz/cgi-bin/mapserv?map=../mapserver/html/demo/hello.map&layer=credits&mode=map

Reading the URL from left to right. this goes to my mapserver(http://mapserver.wildsong.biz/), invokes the mapserv executable (/cgi-bin/mapserv), telling it read a map file (map=../mapserver/html/demo/hello.map), look for the 'credits' layer("layer=credits"), and finally to display the results by sending the image back to your browser ("mode=map").

I am keeping my files for this project in the html directory tree so that you can download them if you want to look at them. For security normally I would keep them OUTSIDE the tree.

So for example, you can grab the map file with this URL: http://mapserver.wildsong.biz/demo/hello.map

The first template

I walked through the Mapserver template reference and created a template file that has many of the template tags in it. You can look at it; click here and do view source: http://mapserver.wildsong.biz/demo/hello.template.html

To tell Mapserver to use my template file, I can change mode to 'browse' and add a template specifier:

http://mapserver.wildsong.biz/cgi-bin/mapserv?map=../mapserver/html/demo/hello.map&mode=browse&map_web_template=../mapserver/html/demo/hello.template.html

I have to specify a layer; that example just shows you an empty blue box;

http://mapserver.wildsong.biz/cgi-bin/mapserv?map=../mapserver/html/demo/hello.map&mode=browse&map_web_template=../mapserver/html/demo/hello.template.html&layer=credits

An aside: If you click reload on the above page several times you will notice the name of the img file changing. Each click causes a new PNG file to be generated. I have to set up a separate program to delete the darned things so that my server does not fill up and keel over.

The template has lots of mapserver template tags in it, which are a word enclosed by square brackets. They look like wiki tags, come to think of it.

The clever idea is that the template can have an HTML form in it, so you can put buttons and whatnot into the form, and voila! interactivity! Each time you click submit, the request is processed by mapserv, pushed through the template, and you get the updated results.

Query templates

But wait, there's more! I started down this path of exploration to debug a problem with queries. I have a Mapserver site that has a broken search feature. So next I need to learn how MapServer handles non-spatial queries.

For this demo I will use shapefiles with real data in them, not just a bit of text. These shapefiles some spatial (vector) data, and also some attribute data that I can query.

Here is the map file for your perusal: http://mapserver.wildsong.biz/demo/shape.map and here is a simple link that will display the map: http://mapserver.wildsong.biz/cgi-bin/mapserv?map=../mapserver/html/demo/shape.map&mode=map&layer=Streets&layer=Parks&layer=credits

These URLs are starting to get unwieldy so from now on I will embed them as links.

Next, here is a link that will push the map through a template. (remember to use "view source" to look at the template.) and here is the map pushed through the template: Parks map

Examining the data in your shapefiles

Before designing a query to put in a map file you need to know more about your data. The Web Mapping book suggests using ogrinfo; I think it's modestly useful. I'd say use a GIS program; ArcCatalog comes to mind.

With ogrinfo you can get listings of the names of datafields pretty easily; try this:

ogrinfo -so shapefilename.shp         will return a list of layers in the file
ogrinfo -so shapefilename.shp layer   will list info on a layer called layer


Alas, TO BE CONTINUED. Contact me if you want me to write more here!