Google Maps ushered in a new era in web mapping: pre-rendered map tiles. Traditionally, web mapping followed a 4-tiered approach for generating map images:

The benefits in this scenario are obvious. Maps at any scale can be produced and layers of information (e.g. roads, lakes, etc.) can be turned on or off with each map request. Map colors, shapes, and symbols can even be changed between requests. The unlimited possibilities come a cost though of slower rendering because each request requires the raw data to be accessed, combined with other layers, and the returned as a single image.
Read the rest of this entry »
Continuing with our program that combines Mapserver (via the Mapscript API) and XNA, we next added functionality to the update method our of XNA program. We check for a mouse click to initiate a map pan and also for key presses to zoom in, out and return to full extent. At the end, if any map event has occurred, the map will be updated. It is in the updating that a new Mapserver image is generated and prepared for displaying on-screen.
protected override void Update(GameTime gameTime)
{
// check if a mouse click has occured
mouse.Update();
if (mouse.LeftButton == ButtonState.Pressed)
{
mapserver.ZoomMap(1, mouse.X, mouse.Y);
}
// check if a key has been pressed
KeyboardState keyState = Keyboard.GetState();
if (keyState.IsKeyDown(Keys.F))
{
graphics.ToggleFullScreen();
}
else if (keyState.IsKeyDown(Keys.Z))
{
mapserver.ZoomMap(2, mapserver.MapPixelCenter.X,
mapserver.MapPixelCenter.Y);
}
else if (keyState.IsKeyDown(Keys.X))
{
mapserver.ZoomMap(-2, mapserver.MapPixelCenter.X,
mapserver.MapPixelCenter.Y);
}
else if (keyState.IsKeyDown(Keys.C))
{
mapserver.ZoomMapFullExtent();
}
else if (keyState.IsKeyDown(Keys.Escape))
this.Exit();
// check if a new mapserver image needs to be generated
if (mapserver.RefreshMap)
{
mapserver.UpdateMap(graphics.GraphicsDevice);
}
base.Update(gameTime);
}
Read the rest of this entry »
In order to use Mapserver in XNA, we need to create a class that primarily serves as an interface between XNA and Mapscript (Mapserver’s API). Our last post discussed in general how to accomplish this but now let’s add some code.
MapserverXNA Class
We named the class MapserverXNA and the properties and methods look like this:

Read the rest of this entry »
We’ve demonstrated a number of smaller projects over the past couple of months showcasing some simple mapping and XNA applications. Now things are starting to get more interesting as we build upon what we’ve learned in an effort to create more interesting products. This next series of posts combines aspects from several of our projects, including World Mapper, Using Mapserver, Mapscript Demo, and the Image Swapping example. Basically, we now have the opportunity to incorporate Mapserver-generated images into an XNA program.
Read the rest of this entry »
We’ve already discussed in general how XNA could be used as our graphics engine for building a mapping application. Today we will demonstrate a specific example of XNA in action as it relates to map images.
Let’s assume that we have a map image already generated by a mapping engine (Mapserver/Mapscript for example).

Read the rest of this entry »

The final portion of this project involves adding some map functionality to our program. As a quick review, we first setup Mapserver on our computer and then created a simple desktop application (part 1, part 2) that used the Mapscript API.
Read the rest of this entry »
Continuing with our exploring into Mapscript, our desktop mapping application needs some more setup. Our last post added a map file constant and now we will add two more variables to our form:
const string MAP_FILE = @"C:\ms4w\apps\gmap\htdocs\gmap75.map";
mapObj m_map;
rectObj m_fullExtent;
Both are Mapscript objects. The first (m_map) is our map object that will be the primary class used in this project. The second will simply remember the extent of the map upon startup, which is usually also the full extent of the map.
In the form’s constructor method, we setup our map to match our picture box size and the define the full extent:
m_map = new mapObj(MAP_FILE);
m_map.width = picMap.Width;
m_map.height = picMap.Height;
m_fullExtent = new rectObj(m_map.extent.minx, m_map.extent.miny,
m_map.extent.maxx, m_map.extent.maxy, 0);
Read the rest of this entry »
In our last post, we setup MapServer using the MS4W package. That tutorial enabled us to have a working web mapping environment on a desktop machine without much hassle. If you haven’t read that post, I encourage you to read it before continuing.
Today’s project will build off that setup by creating a small desktop application that uses MapServer’s ability to generate map images. Since MapServer is just a program (mapserv.exe) and some required DLLs, it is possible to create stand-alone applications that don’t have a web component.
Introducing Mapscript
In their own words…
MapScript provides a scripting interface for MapServer for the construction of Web and stand-alone applications. MapScript is used independently of CGI MapServer, it is a loadable module that adds MapServer capability to your favorite scripting language. MapScript currently exists in Php, Perl, Python, Ruby, Tcl, Java, and C# flavors.
Read the rest of this entry »
UPDATE: This post was originally posted in May 2007 but since has been updated to cover the more recent release of Mapserver version 5.0.0.
Most of our recent posts have focused on topics relating more to the components of a mapping application then on the maps and data. This post begins the first of several posts discussing free and open source mapping software applications. After introducing each software, we will explore various ways to create applications around them.
Introduction to MapServer
One of the most popular open source GIS applications is MapServer. Initially developed by the University of Minnesota, MapServer has evolved into a fast and easy-to-use internet map server.
“MapServer is an Open Source development environment for building spatially-enabled internet applications. MapServer is not a full-featured GIS system, nor does it aspire to be. Instead, MapServer excels at rendering spatial data (maps, images, and vector data) for the web.” – http://mapserver.gis.umn.edu/
Read the rest of this entry »
This project demonstrates how to use the new font support in XNA by building a basic console type application. Eventually it could be combined into a more robust program but for now we just want to focus on text input. For an introduction to the new XNA font support, see our last post.
Our definition of a console consists of two parts. First is the command prompt line where the user can enter text, press enter, and something occurs if the user enters a valid command. Below that line are past lines of text that the user has typed or it could be used to display information about the program.

Read the rest of this entry »