| 1 |
/** |
|---|
| 2 |
* MapProvider for Open Street Map data. |
|---|
| 3 |
* |
|---|
| 4 |
* @author migurski |
|---|
| 5 |
* $Id$ |
|---|
| 6 |
*/ |
|---|
| 7 |
|
|---|
| 8 |
import org.casaframework.event.DispatchableInterface; |
|---|
| 9 |
|
|---|
| 10 |
import com.modestmaps.core.Coordinate; |
|---|
| 11 |
import com.modestmaps.geo.MercatorProjection; |
|---|
| 12 |
import com.modestmaps.geo.Transformation; |
|---|
| 13 |
import com.modestmaps.mapproviders.AbstractImageBasedMapProvider; |
|---|
| 14 |
import com.modestmaps.mapproviders.IMapProvider; |
|---|
| 15 |
|
|---|
| 16 |
class com.modestmaps.mapproviders.OpenStreetMapProvider |
|---|
| 17 |
extends AbstractImageBasedMapProvider |
|---|
| 18 |
implements IMapProvider, DispatchableInterface |
|---|
| 19 |
{ |
|---|
| 20 |
public function OpenStreetMapProvider() |
|---|
| 21 |
{ |
|---|
| 22 |
super(); |
|---|
| 23 |
|
|---|
| 24 |
// see: http://modestmaps.mapstraction.com/trac/wiki/TileCoordinateComparisons#TileGeolocations |
|---|
| 25 |
var t:Transformation = new Transformation(1.068070779e7, 0, 3.355443185e7, |
|---|
| 26 |
0, -1.068070890e7, 3.355443057e7); |
|---|
| 27 |
|
|---|
| 28 |
__projection = new MercatorProjection(26, t); |
|---|
| 29 |
|
|---|
| 30 |
__topLeftOutLimit = new Coordinate(0, Number.NEGATIVE_INFINITY, 0); |
|---|
| 31 |
__bottomRightInLimit = (new Coordinate(1, Number.POSITIVE_INFINITY, 0)).zoomTo(17); |
|---|
| 32 |
} |
|---|
| 33 |
|
|---|
| 34 |
public function toString() : String |
|---|
| 35 |
{ |
|---|
| 36 |
return "OPEN_STREET_MAP"; |
|---|
| 37 |
} |
|---|
| 38 |
|
|---|
| 39 |
private function getTileUrl(coord:Coordinate):String |
|---|
| 40 |
{ |
|---|
| 41 |
var sourceCoord:Coordinate = sourceCoordinate(coord); |
|---|
| 42 |
return 'http://tile.openstreetmap.org/'+(sourceCoord.zoom)+'/'+(sourceCoord.column)+'/'+(sourceCoord.row)+'.png'; |
|---|
| 43 |
} |
|---|
| 44 |
|
|---|
| 45 |
public function sourceCoordinate(coord:Coordinate):Coordinate |
|---|
| 46 |
{ |
|---|
| 47 |
var wrappedColumn:Number = coord.column % Math.pow(2, coord.zoom); |
|---|
| 48 |
|
|---|
| 49 |
while(wrappedColumn < 0) |
|---|
| 50 |
wrappedColumn += Math.pow(2, coord.zoom); |
|---|
| 51 |
|
|---|
| 52 |
return new Coordinate(coord.row, wrappedColumn, coord.zoom); |
|---|
| 53 |
} |
|---|
| 54 |
} |
|---|