Mittwoch, 30. Juli 2008

Oracle Maps Mashup mit externem Custom Map Tile Layer (2)

Mit der neuen Möglichkeit, in Oracle Maps externe Layers fremder Web Tile Renderer Server zu integrieren, können Mashups aus diesen Basis - Layern und eigenen Anwendungs - Daten (Features of Interest Layer) erstellt werden. Hier ein Beispiel einer Google TileMapUrl.
Sowohl Google Maps, OpenLayers als auch Virtual Earth bieten recht transparent die Möglichkeit, selbst erstellte Map Tiles gerenderter Karten darzustellen. Als Map Projektion hat sich hierfür die Sperical Mercator Projektion von Google Maps und Virtual Earth, auch Web Mercator Projektion genannt, durchgesetzt, d.h. es erfolgen in den Map Clients die sogenannten Forward und Inverse Transformations . Schliesslich ist auch diese Sperical Mercator Projektion von der OSGEO wie folgt aufgenommen worden:

Proj4js.defs["EPSG:900913"] = "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs";

Proj4js.defs["GOOGLE"]="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs";

Im Oracle Spatial Forum wurde nun auch auf die Notwendigkeit dieser Projektion reagiert, wobei der Vorschlag, diesen Mercator Web Mercator : EPSG:3785 zu benennen, aufgenommen wurde und im Release 11.2 bzw. in diversen Patches breitgestellt wird.

Derzeit können wir nur den ESRI World Mercator 54004 anwenden, der auch im nachfolgenden Demo auf der Basis der Map Tiles des Oracle Online GeoCoding Demos, eingesetzt wird:



Die Definition der Map Projektion und der Scale Ranges sehen wie folgt aus:



Wichtig ist noch die getMapTileUrl - Function:
 
function getMapTileURL(minx, miny, width, height, level)
{
var x = (minx-mapConfig.coordSys.minX)/mapConfig.zoomLevels[level].tileWidth ;
var y = (miny-mapConfig.coordSys.minY)/mapConfig.zoomLevels[level].tileHeight ;
return baseURL+"mcserver?request=gettile&format=" + mapConfig.format + "&zoomlevel="+level+"&mapcache=ELOCATION_MERCATOR.WORLD_MAP&mx=" + Math.round(x) + "&my=" + Math.round(y) ;
}

Hier noch ein Beipiel einer MapTileUrl obigen Oracle Maps Demos.

Grüße,
Friedhold

Donnerstag, 24. Juli 2008

Einführung in Oracle Maps Mashup mit externem Custom Map Tile Layer (1)

Google Maps und OpenLayers beispielswiese erlauben die Integration der Tiles Layer externer Web Tile Server, so dass auf fertig gerenderten Tiles die Darstellung der dynamischen Anwenderdaten erfolgen kann.

Im neuen Oracle Maps (ich verwende Oracle Maps 11g Preview 2) muss nun analog zu obigen Map Clients der Oracle Map - Instanz ein Map Tile Layer zugewiesen werden:


var baseURL = "http://"+document.location.host+"/mapviewer";

// Create a MVMapView instance
var mapview = new MVMapView(document.getElementById("map"), baseURL);

// Add a map tile layer
mapview.addMapTileLayer(new MVMapTileLayer("mvdemo.demo_map"));
..

Die neue MVMapTileLayer Class wurde ausserdem folgerichtig um die MVCustomMapTileLayer Class zur Bildung eines Custom Map Tile Layers erweitert.

D.h., es werden die auf einem externen Map Tile Server erstellten Map Image Tiles per HTTP GET Map Tile Requests direkt angefordert und in der MapViewer Instanz als Base Map Layer dargestellt. Die hierfür benötigte MapTile-URL wird in der JavaScript Function getMapTileURL mit dem Return der Map Tile Image - URL gebildet.

Als Input-Parameter benötigt die Function getMapTileURL 5 Parameter, geliefert vom JavaScript Map Client:
  • X coordinate of the left-lower corner of the tile in map coordinate system

  • Y coordinate of the left-lower corner of the tile in map coordinate system

  • Tile width in map coordinate system

  • Tile height in map coordinate system

  • Map zoom level :



Hierzu gibt es ein Demo in Oracle Maps, in dem der Zugriff auf lokale Demo Tiles mit der Funktion MVCustomMapTileLayer präsentiert wird.

Wenn man jedoch von externen Web Tile Servern die Tile Layers beziehen möchte, muss man die externe Map Projektion und die entsprechenden Scale Ranges in Oracle Maps vorgeben.

Im Teil 2 zu Oracle Maps Mashups werde ich die gerenderten Tiles des Online verfügbaren Oracle Geocoding Demos verwenden.

Friedhold