MeeshQuest

The idea of the MeeshQuest project is to emulate some of the functionality of map sites like MapQuest or Google Maps. We will need a database of cities, which are just named points in the plane. From this, we want to be able to draw pictures of a given region showing the cities contained in that region. We will get cities from the database and insert them into a spatial data structure that can be used to draw a picture. The basic spatial data structure we will use is a quadtree -- a sort of 2-dimensional binary search tree.

The project is divided into 4 parts:

(Remember: if you think this page could be better -- you can change it! Click the "edit" tab up top to get started.)

Data Structures

There are three main concepts for this project:

  1. Data Dictionary (TreeMaps and TreeSets for part 1, B-tree for parts 2 and 3)
  2. Spatial Map (PR Quadtree for part 1, PM3 Quadtree for part 2)
  3. Road Adjacency List

An important concept to remember is that the data dictionary is not the same as the spatial map. If you create a city, it is not automatically mapped in the spatial map.

Input

The input comes in the form of XML; a handy XmlUtility for parsing the input is provided. If you are not familiar with XML, w3schools has a great tutorial that can be found here. The spec also has a decent amount of information on how to parse the XML.

Output

Output is stored in a DOM object that represents an XML file. A DOM document consists of a root Element that has any number of child Elements, each of which can have any number of child Elements. The DOM document building is handled by org.wc3.dom.Document. When required to print XML for output, you can use the same handy XmlUtility. The spec has a decent amount of information on how to use the utility to write to the DOM object.

City Objects

You will want to create a City object to store basic information about cities; the spec recommends extending java.awt.geom.Point2D.Float.

Visualization

Since this is a visual project, it will help to be able to visualize your data structures. A nice graphics library called CanvasPlus [1] makes this visualization easy.