|
|
This is a slippy map for the iPhone written by Joseph Gentle.
|
|
|
|
|
|
It has been made as part of the CatchMe project.
|
|
|
|
|
|
We released it for you under the BSD license.
|
|
|
|
|
|
---------
|
|
|
For Users
|
|
|
---------
|
|
|
Once this application has more functionality than google maps, I'll throw it on the itunes store for free.
|
|
|
|
|
|
--------------
|
|
|
For developers
|
|
|
--------------
|
|
|
|
|
|
- Don't be frightened by so many source code files! Most of them (144 of the ~160 source code files) are from the Proj4 library. Proj4 is available here:
|
|
|
http://trac.osgeo.org/proj/
|
|
|
The only thing proj4 is used for here is converting Longitude / lattitude coordinates into Mercator coordinates (and back again).
|
|
|
|
|
|
|
|
|
Coordinate Systems
|
|
|
------------------
|
|
|
|
|
|
- This project uses 4 different coordinate systems! The code won't make any sense unless you understand them:
|
|
|
|
|
|
Longitude / Lattitude
|
|
|
- Points around the spherical earth measured in Degrees.
|
|
|
- Using the types provided by CoreLocation - CLLocationCoordinate2D { double lat, long; }
|
|
|
|
|
|
Mercator coordinates
|
|
|
- These are points on a flat square. The units are metres; though they're only accurate near the equator.
|
|
|
- Using types in Mercator.h - MercatorPoint { double x, y; } and MercatorRect.
|
|
|
http://en.wikipedia.org/wiki/Mercator_projection
|
|
|
|
|
|
Tile coordinates
|
|
|
- Each zoom level (z) has a grid of 2^z x 2^z tiles. Using OpenStreetMaps each of these tiles is 256 pixels per side.
|
|
|
- Each tile is indexed by the Tile struct - { int x, y, zoom; }. There are also TilePoint and TileRect structs for discussing regions of tiles complete with offsets into the tiles.
|
|
|
|
|
|
Screen Coordinates
|
|
|
- These are measured in pixels within the bounds of the MapView.
|
|
|
- Using builtin CGPoint, CGSize and CGRect
|
|
|
|
|
|
You can convert:
|
|
|
lat/long <-> Mercator using: [Mercator toLatLong: (MercatorPoint) coordinate] and [Mercator toMercator: (CLLocationCoordinate2D) coordinate]
|
|
|
Mercator <-> Tile using FractalTileProjection
|
|
|
Tile <-> Screen coordinates using ScreenProjection
|
|
|
|
|
|
Always be aware of what coordinate system you're working in / with and the code is all pretty easy.
|
|
|
|
|
|
|
|
|
Desired Features
|
|
|
----------------
|
|
|
|
|
|
Search
|
|
|
Overlays (Of course, these can just be done with cocoa at the moment)
|
|
|
Remember last location
|
|
|
Disk cache
|
|
|
A Geo tracing facility would be nice... though I'm not too sure how the user can get the geotraces back off the device. |
|
|
\ No newline at end of file |
...
|
...
|
|