Sonntag, 17. August 2008

OpenStreetMap-FOI und Oracle Maps Mashup mit externem Custom Map Tile Layer (5)

In dem Blog "OpenLayers mit Google Maps, Yahoo! Maps und OpenStreetMap" hatte ich bereits eine OpenStreetMap (OSM) gerenderte Karte vorgestellt.

OpenStreetMap - Daten sind nach der CC-BY-SA - Lizenz frei verfügbar. Es kann bei der Datenerfassung jeder mitmachen und innerhalb weniger Stunden wird eine neu erfasste Strasse, ein Fahrradweg oder eine gute Kanustrecke in der Karte dargestellt.

OpenStreetMap-Gründer Steve Coast hierzu:

"Jeder kann die Daten benutzen, die in OpenStreetMap gesammelt werden", erklärt er. "Vereine, Firmen, Kartographen, Programmierer - alle können unsere Daten benutzen, wie sie wollen, ohne dafür zu zahlen."

Die freie Verfügbarkeit der Daten setzt ein enormes, kreatives Potenzial frei: Es wird die Entwicklung neuer Software vorangetrieben und es werden Geodaten erfasst, die von Vermessungsautos nicht befahren werden können!

Empfehlen kann ich hierfür das Buch "OpenStreetMap - Die freie Weltkarte nutzen und mitgestalten" der Authoren Frederik Ramm und Jochen Topf, das dankenderweise beim Lehmanns Media Fachbuchverlag erschienen ist.

In dem nun hier vorgestelltem Mashup habe ich zunächst die OpenStreetMap Strassen-Daten von Berlin in Oracle Spatial 11g, SRID 8307, geladen.

Möchte man diese Daten in der fertig gerenderten Karte des Oracle Demos (Teil 1-4 dieser Serie) darstellen, so muß berücksichtigen werden, dass diese externe Karte im World Mercator 54004 vorliegt: Also brauchen wir die OSM- Daten auch in der 54004 Projektion. Voraussetzung ist natürlich die Definition der 54004 Projektion in Oracle Spatial!

Wir bilden also einen FOI-Layer aus den in 54004 transformierten OSM - Daten und legen diesen auf die von Oracle/NAVTEQ gerenderte, externe Base Map. Hierfür habe ich im Demo einen Theme-Filter auf nur einige wenige Strassen definiert.



Unser Mashup aus der Oracle/NAVTEQ StreetMap und den OSM- Berlin Strassen - Daten sieht nun so aus:


Dargestellt in einer anderen Zoomstufe:


Wir können somit topologische Abfrageergebnisse aus Oracle Spatial OSM-Daten als FOI - Layer auf der externen Base Map in Oracle Maps darstellen.

Viel Spaß dabei,
Friedhold

Samstag, 16. August 2008

Google Maps Street View und Oracle Maps Mashup mit externem Custom Map Tile Layer (4)

Auf Basis der Client seitigen Transformation der Koordinaten vom World Mercator 54004 in WGS84 (SRID 8307) sind wir nun in der Lage, ein Mashup mit Google Maps zu erstellen. Die Mouseclick - Koordinaten werden in Oracle Maps in WGS84 umgerechnet und als POI's an Google Maps übergeben:


Recht eindrucksvoll läßt sich dies anhand der Street Views von Google Maps demonstrieren:


Und natürlich ein Street View von Oracles Headquarter:


Fassen wir zusammen:
Unsere Oracle Maps Mashup Applikation besteht aus der Base Map, die aus den Tiles des externen Oracle GeoCoding Demos gebildet wird, und den im InfoWindow eingefügten Google Maps Street Views,
aktiviert mit der rechten Mouseclick-Position.

Abschliessend noch ein Street View am Google Standort:


Viel Spaß,
Friedhold

Freitag, 15. August 2008

Mercator 54004 Transformation und Oracle Maps Mashup mit externem Custom Map Tile Layer (3)

Oracle Maps liefert in der aktuellen Version natürlich auch Möglichkeiten zur Interaktion mit den externen Custom Map Tile Layern. Im Moment fehlt jedoch noch die Google Maps/Virtual Earth Tansformation auf der Client Seite (von OpenLayers praktiziert) bzw. in der Oracle Datenbank auf Basis einer SRID - Definition.

Oracle Maps enthält aber implizit die World Mercator 54004 Transformation. Damit lassen sich die Tiles von Google Maps oder OpenLayers leider nicht so einfach ansprechen, wie ich in einem kleinen Vergleich zeigen möchte:

- Oracle Maps 54004 Tile
- Google Maps 900913 Tile

Deutlicher wird dies am Google Maps Ausschnitt mit InfoWindow:



Es unterscheiden sich bei identischen X-Tile-Koordinaten deutlich die Y-Tile-Koordinaten !

Mit einer kleinen Erweiterung des im Teil (2) beschriebenen Demo möchten wir nun in einem InfoWindow die Koordinaten ausgeben bzw. Informationen loggen:



D.h. zunächst liefert die Mouseclick - Position die Koordinaten der 54004 Map Projektion des Oracle Demos. Anschliessend werden diese 54004 Map Koordinaten in SRID 8307 Koordinaten transformiert:



Auf Basis der SRID 8307 Koordinaten lassen sich nun Mashups mit Google Maps aufbauen, in einem weiteren Teil dieser Serie möchte ich darauf eingehen.

Friedhold

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

Sonntag, 1. Juni 2008

OpenLayers mit Google Maps, Yahoo! Maps und OpenStreetMap

OpenLayers ist eine Open Source JavaScript-Bibliothek mit der sich Karten verschiedener Hersteller darstellen lassen -
vergleichbare Demos habe ich hier einfach angepasst:

Hierbei wird auf die vorgefertigten Karten-Kacheln dieser Hersteller, den Tiles Renderer Servern, zugegriffen.

In OpenLayers werden diese Base-Map Layer mit folgenden JavaScript-Instanzen gebildet:


var gmap = new OpenLayers.Layer.Google
..
var yahooLayer = new OpenLayers.Layer.Yahoo
..
var mapnik_layer = new OpenLayers.Layer.OSM.Mapnik
..

Grüße,
Friedhold

Alternative Bestimmung der MBR's in Oracle Spatial

Zur vollständigen Qualifizierung der Metadaten in Oracle Spatial benötigt man das Minimal Bounding Rectangle, MBR, dessen Seiten parallel zu den Achsen des Koordinatensystems verlaufen. Hiefür gibt es die speziellen Funktionen sdo_min_mbr_ordinate u. sdo_max_mbr_ordinate in Oracle Spatial.

Unlängst bin ich beim Versuch der Bestimmung des MBR's in folgenden Fehler gelaufen (11g DB):


SQL> select MIN(sdo_geom.sdo_min_mbr_ordinate(geometry, 1)) minX,
2 MAX(sdo_geom.sdo_max_mbr_ordinate(geometry, 1)) maxX,
3 MIN(sdo_geom.sdo_min_mbr_ordinate(geometry, 2)) minY,
4 MAX(sdo_geom.sdo_max_mbr_ordinate(geometry, 2)) maxY
5 from ROADS;
MAX(sdo_geom.sdo_max_mbr_ordinate(geometry, 2)) maxY
*
FEHLER in Zeile 4:
ORA-06533: Index oberhalb der Grenze
ORA-06512: in "MDSYS.SDO_GEOM", Zeile 2095
ORA-06512: in "MDSYS.SDO_GEOM", Zeile 2113
.

In diesem Fall sollte man eine alternative MBR-Bestimmung anwenden:

SQL> select min(t.x),max(t.x),
2 min(t.y),max(t.y)
3 from roads g, table(sdo_util.getvertices(g.geometry)) t;

MIN(T.X) MAX(T.X) MIN(T.Y) MAX(T.Y)
---------- ---------- ---------- ----------
11,5615495 14,756139 51,3734974 53,4149581
.

Friedhold

Donnerstag, 1. Mai 2008

Alles neu macht der Mai : Die 11g' s !

Nach der Installation der 11g Datenbank stellte ich fest, dass u.a. folgende Schemen hinzugekommen sind:

- APEX : APEX_PUBLIC_USER, FLOWS_FILES u. FLOWS_030000

- Oracle Spatial: MDDATA, SPATIAL_CSW_ADMIN_USR, SPATIAL_WFS_ADMIN_USR .

Hier hat sich so Einiges getan und wir dürfen auf die weitere Entwicklung ruhig gespannt sein !

Wenn sich nun die Oracle 11g DB so munter neben der 10g DB tummelt, liegt es doch nahe, auch den neuesten Oracle MapViewer 11g Preview 2 zu installieren. Dieser läuft auf dem OC4J 11g Preview, hierfür gibt es noch keinen EM, d.h. das mapviewer.ear muss mit dem admin_client deployed werden.
Vorsichtshalber habe ich den OC4J 11g auf den Port 9998 gelegt, da der OC4J 10g auf dem Port 9999 läuft.

Die Installation des MapViewer verlief problemlos, einschliesslich der Neuinstallation des MVDEMO's :



Die Anzahl der Oracle Maps Demos ist auf 58 erweitert worden:



Sehr erfreulich ist auch die Erneuerung des Tiles-Managements, hier gibt es eine eigene Administrationsseite mit Vorschau der Tiled Maps:



Nun fehlt nur noch Forms 11g !

Grüße,
Friedhold

GDV stellt neuen Spatial Commander vor

Die GDV Gesellschaft für geografische Datenverarbeitung mbH wird am 13./14. Mai eine neue Version des bewährten Spatial Commanders vorstellen. Dies ist ein JAVA- Rich Client zum Visualisieren, Analysieren und Editieren, natürlich auch direkt in Oracle Spatial. Mir gefallen an diesem Spatial-Tool vor allem:

- übersichtlich angeordnete Toolbars und Menüs
- wichtigste Editierfunktionen sind vorhanden
- Datenladen aus Dateien in Oracle Spatial
- Darstellung der Sachdaten auf 'Clickable Elements'
- Interaktion zwischen Sachdaten und Geometrien .

Und dies alles zum Nulltarif: Zum Kennenlernen akzeptabel, in einer Industrieanwendung ist der Support des Produktes notwendig und wird von der GDV angeboten.

Wenn man eine gute Datendrehscheibe zum Down- u. Upload der CAD- oder GIS-Formate (Konverter- oder GIS- basiert) hat, könnten die Daten mit dem Spatial Editor sehr einfach und übersichtlich bearbeitet werden.

Die GDV hat für die neue Version u.a. folgende Features angekündigt:

- neuer Updatemechanismus
- überarbeitete Benutzeroberfläche
- erweiterter Assistent zur Geoverarbeitung
- Geschwindigkeits- optimierte Verschneidungsfunktion
- zusätzliche Möglichkeiten von WMS- Diensten nutzbar
- Bildung von Pufferzonen.

Editoren direkt für Oracle Spatial und unabhängig von den großen GIS- Herstellern sind nunmal sehr rar !

Ich bin sehr gespannt auf die neue Version des Spatial Commanders !

Friedhold

Sonntag, 27. April 2008

PL/SQL und JavaScript als Sprachbasis für RIA's in den Deutschen Oracle Communities

Rich Internet Applications (RIA) Funktionalität wird mit JavaScript und AJAX erreicht; ob nun serverbasiert mit PHP, Ruby, Forms oder JSF.

Da liegt es doch nahe, dass man als Oracle Entwickler Altbewährtes anwendet: PL/SQL, JavaScript und XHTML.

Dank also an die drei Deutschen Oracle Communities Oracle Forms, Oracle APEX und Oracle Spatial/Maps : Die gemeinsame Sprachbasis ist PL/SQL und JavaScript ;-) !

Mit APEX und Oracle Maps wurde bereits die Interaktion in eindrucksvollen Demos praktiziert, mit der in Forms 11g enthaltenen JavaScript Unterstützung sollten dann auch Interaktionen von Forms mit Oracle Maps und APEX möglich sein.

Grüße,
Friedhold

Freitag, 25. April 2008

Oracle Application Express für Oracle Forms Entwickler

Eigentlich wollte ich an dieser Stelle zusammenfassend über die Deutschen Oracle Communities berichten, dies muss ich aus aktuellem Anlass auf einen späteren Blog verschieben.

Als Teilnehmer des Oracle APEX Roundtables, im September vorigen Jahres von Bernhard Fischer-Wasels in Hamburg organisiert, stellte ich Mike Hitchwa die Frage nach eventuellen Migrationsmöglichkeiten von Oracle Forms nach APEX. Hier nun die Antwort von David Peake, Product Manager for Oracle Application Express:
A peek over the Application Express horizont :

'.. we are also working on Forms Migration. .. Using Oracle Form's XML conversion program we are looking to interpret the XML produced and derive the underlying design model to be able to generate Application Express components. As with the Access migration we don't expect to achieve 100% conversion but hopefully provide a valuable first-cut.'

Great News ! Diese APEX PL/SQL Components mit entsprechenden AJAX - Bibliotheken zu Rich Components angereichert und man erhält robuste und performante Web 2.0 - 2 Tier - Datenbankapplikationen !

Den Hinweis habe ich übrigens auf der Deutschen APEX Community - Seite gefunden und einen sehr gelungenen Forms und APEX - Vergleich findet man hier: Oracle Application Express for Oracle Forms Developers .

Friedhold

Samstag, 5. April 2008

Mashup Oracle Maps und Google Maps (3)

Nachdem wir im Teil (2) der Mashup Serie dynamische POI's aus dem mvdemo - Schema aktiviert haben, möchte ich nun den Aufruf von Google Maps aus Oracle Maps erklären. Hierbei wird, wie bereits im Beitrag zu Detail Maps .. gezeigt, in Oracle Maps ein InfoWindow mit IFRAME und der URL zu der Google Maps Applikation aufgerufen:


Dabei werden die Koordinaten des Mausklick und die Zoomstufe übermittelt und
in Google Maps in der setCenterMap Function gesetzt:


Die POI Infos sehen wir in Oracle Maps :



und natürlich auch in Google Maps:



Viel Spaß mit den Mashups!
Friedhold

Sonntag, 23. März 2008

Google Maps Mashup mit AJAX - PL/SQL- DAD (2)

Nachdem wir im Teil 1 die Funktionsweise des Google Maps Clients anhand der XML-Datei nachgewiesen haben, ersetzen wir im Teil 2 die XML-Datei durch den bewährten PL/SQL-DAD Zugriff.

Im mvdemo - Schema implementieren wir folgende Procedure zur serverseitigen Bereitstellung der AJAX-Daten:



Diese Procedure testen wir mit der URL: http://localhost:7777/pls/mvdemo/PLSQLAJAX_GENXML_CA

und erhalten die bereits mit der XML-Datei aus Teil 1 simulierten Daten, nun jedoch im dynamischen PL/SQL - Zugriff:



Im Teil 1 erfolgte der Funktionsnachweis der AJAX-Clientseite und jetzt können wir die dynamischen XML-Daten aus der Datenbank visuell verifizieren.
So brauchen wir nur noch die Datenquelle in der GDownloadUrl - Funktion auswechseln:

GDownloadUrl("http://localhost:7777/pls/mvdemo/plsqlajax_genxml_ca", function(data) { .. }
//GDownloadUrl("http://localhost:7777/plsqlajax_genxml2.xml", function(data) { .. }

und wir erhalten:



Einfacher geht es eigentlich nicht, zumal mit dem PL/SQL-DAD Zugriff die performanteste Technologie angewendet wird.

Friedhold

Google Maps POI's mit AJAX - XML-Datei (1)

Die Möglichkeit zur Integration von Oracle Maps und Google Maps, sogenanntes Mashup, möchte ich mit der Darstellung von "Points of Interest" (POI) in Google Maps auf Basis des Oracle-DB - Zugriffes beginnen.
Der serverseitige Datenzugriff für AJAX-Clients wird häufig mit Java Servlets, PHP oder neuerdings mit Ruby on Rails realisiert.

Oracle stellt mit dem PL/SQL Toolkit, sozusagen im Database Core, umfangreiche HTTP-Funktionen bereit, mit denen sich AJAX und PL/SQL Datenzugriffe recht elegant verbinden lassen. Letztendlich werden diese Funktionen u.a. in APEX angewendet. Die APEX Community hat zum Thema APEX und AJAX eine sehr gut nachvollziehbare TODO-Folge veröffentlicht.

Mit der AJAX-Technologie können Datenschnittstellen abgefragt werden, die sinnvollerweise Daten in einem für Javascript gut verarbeitbarem Format, z.B. in XML oder JSON, liefern.
Zur Entwicklung des AJAX-Clients habe ich die Daten der POI's im XML- Format bereitgestellt:



Diese Datei (plsql_genxml.xml) legt man unter:%ORACLE_HTTP_SERVER%\Apache\Apache\htdocs ab, die URL zu dieser Adresse lautet: http://localhost:7777/plsql_genxml.xml .

Nun kann man mit der Google Maps - Function :

GDownloadUrl("http://localhost:7777/plsqlajax_genxml2.xml", function(data) { .. }

die XML-Daten lesen:



Die Google Maps Seite wird unter : %ORACLE_HTTP_SERVER%\Apache\Apache\htdocs abgelegt und der Start erfolgt mit der URL: http://localhost:7777/plsqlajax_gmap.html

Der Javascript - Code ist sehr kompakt, übersichtlich und gut lesbar:


function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"));
//map.addControl(new GSmallMapControl());
//map.addControl(new GMapTypeControl());
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
map.addControl(new GScaleControl()) ;
map.addControl(new GOverviewMapControl()) ;

// Logging
var sTemp = self.location.href
GLog.write(sTemp);

map.setCenter(new GLatLng(37.7725, -122.39607), 13);

map.enableScrollWheelZoom();

//GDownloadUrl("http://localhost:7777/pls/mvdemo/plsqlajax_genxml_ca", function(data) {
GDownloadUrl("http://localhost:7777/plsqlajax_genxml2.xml", function(data) {
var xml = GXml.parse(data);
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var name = markers[i].getAttribute("name");
var address = markers[i].getAttribute("address");
var type = markers[i].getAttribute("type");
var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lng")));
var marker = createMarker(point, name, address, type);
// Logging
GLog.write(point+ " / " + address + " / " + type );
map.addOverlay(marker);
}
});

}
}

function createMarker(point, name, address, type) {
var marker = new GMarker(point, {title: name, icon: customIcons[type]} );
var html = name + " / " + address;
GEvent.addListener(marker, 'click', function() {
marker.openInfoWindowHtml(html);
});
return marker;
}
..


Das Ergebnis sieht dann in Firefox und Firebug so aus:



Die gelieferten Daten können im Google Logger und in der Response - Ausgabe des Firebug betrachtet werden.

Friedhold

Samstag, 22. März 2008

Javascript Logging mit dem Firefox-Plugin Firebug

Zum Programmieren mit Javascript ist Firefox mit dem Plugin Firebug zum schnellen Auffinden von z.B. Definitions-Fehlern ein sehr nützliches Entwicklungswerkzeug. Es zeichnet sich besonders durch das Binding von Grafik- und Codedarstellung und die intuitiven Bedienung aus.

Sehr wichtig sind für eine gute Laufzeitumgebung, neben einem effizienten Deployment, auch die jeweiligen Logging - Mechanismen: Hierfür gibt es die ausgefeilten und weitestgehend symmetrisch anwendbaren Log4 {J / JS / NET / PLSQL ..}, d.h. mit Log4JS besteht auch diese Möglichkeit für Javascript.

Bei der Erstellung von Google Maps Anwendungen habe ich aber den Google Logger schätzen gelernt. Hierbei wird nur :


..
GLog.write(point+ " / " + address + " / " + type );
..

aufgerufen - einfach und gut (übrigens ohne Initialisierung!):



Nun gibt es aber speziell für den Firebug recht ausgefeilte Möglichkeiten zum Logging, nachfolgendes Beispiel zeigt einen Leistungsausschnitt:
  
..
function foo(s) {
bar(s + ' jkl;');
}
function bar(s) {
baz('qwerty ' + s);
}
function baz(s) {
// print stack trace
console.trace();
}
function fib(n) {
// count # of times called
console.count('Number of times fib() called');
if(n == 0 || n == 1) {
return 1;
} else {
return fib(n - 1) + fib(n - 2);
}
}
..
// 5 logging methods
console.log ('Using console.log()');
console.info ('Using console.info()');
console.debug('Using console.debug()');
console.warn ('Using console.warn()');
console.error('Using console.error()');

// printf style formatting
console.log('The value of %s is %d', 'foo', 516);

// can print complex structures
var array = [1, 1, 2, 3, 5, 8];
var object = {'foo': true, 'bar': 3.14, 'baz': [1, 2, 3]};

console.log(array);
console.log(object);

// can even print DOM elements
console.log(document.getElementById('header'));

// stack trace output
foo('asdf');

fib(10);
..

Das Logging-Protokoll in der Firebug-Console (Aktivierung mit F12) sieht so aus:



Dank Firefox und Firebug gibt es für die Entwicklung komplexer Oracle Maps Applikationen und Web 2.0 Mashups recht gute Voraussetzungen.

Ein frohes Osterfest wünscht
Friedhold

Donnerstag, 3. Januar 2008

Detail Maps im Userdefined InfoWindow von Oracle Maps (2)

Im Teil 2 über Userdefined InfoWindows möchte ich meinen Lösungsvorschlag zu Detail Maps, auch Nested Maps genannt, vorstellen (Demo-Video) :



In der 'Master Map', wird wie im Teil 1 beschrieben, die Mouseclickposition in dem IFRAME - InfoWindow an die Detail Map übergeben:



In der Detail Map werden die Parameter aus der URL separiert und der übergebene Masterpoint als Home Marker gesetzt:



In der Detail Map kann in den speziellen FOI's navigiert werden: Natürlich läßt sich auch das Userdefined InfoWindow aus Teil 1 aufrufen ..



In diesem Demo wird ebenfalls der Zugriff auf die PL/SQL-DAD 'mvdemo' vorausgesetzt, die Programme stehen hier zum Download bereit.
Die kleine Serie soll zeigen, dass man mit geringem Aufwand (JavaScript und PL/SQL) Userdefined InfoWindows recht effektvoll mit IFRAMES einsetzen kann.

Viel Erfolg,
Friedhold

Mittwoch, 2. Januar 2008

Userdefined InfoWindows mit IFRAME in Oracle Maps (1)

In Oracle Maps können Info Windows entsprechender 'Features of Interest' - FOI's entweder mittels Mapbuilder statisch oder per XML-RPC im clientseitigen JavaScript dynamisch zugeordnet werden. Benötigt man bei mehrfach überdeckenden FOI-Layern jedoch Informationen, die sich z.B. auf die Basemap beziehen, kann der nachfolgend dargestellte Lösungsvorschlag (Demo-Video) weiterhelfen.

Voraussetzung zum Nachvollziehen sind die Oracle Maps Demos und der zuvor eingerichtete PL/SQL-DAD Zugriff auf das Schema 'mvdemo'.

Hierfür habe ich das unter:
%OC4J_HOME%\j2ee\home\applications\mapviewer\web\fsmc\tutorial\samples befindliche Demo: themeBasedFOIVisible.html in: themeBasedFOIVisibleIframe.html kopiert und folgende Änderungen eingefügt:

1.) Aktivierung des rechten Mouseclicks in der Hauptfunktion:


..
mapview.addEventListener("mouse_right_click", mouseclickright);
..

2.) Rechte Mouseclick-Function inkl. IFRAME - Aufbau:



In der JavaSript-Function wird die x/y-Location des rechten Mouseclicks an die PL/SQL-DAD Procedure mvdemo.show_info(p_x, p_y) übergeben.
Dort wird zunächst anhand der Punktkoordinaten die zugehörige Geometry gesucht -

Function: pkg_geo_mvdemo.fnc_get_fip:



Aus der Tabelle COUNTIES wird die Geometry-ID aus FIPSSTCO ermittelt und es werden in der Procedure show_county ausserdem falsche Punktkoordinaten erkannt.

- Ungültige Punktkoordinate - im Pazifik gibt es natürlich kein County :



- So sieht das Userdefined InfoWindow mit IFRAME letztendlich aus:



Die Programme stehen zum Download bereit.

Viel Spaß dabei,
Friedhold

Einrichtung eines PL/SQL - DAD für das Schema mvdemo

Seit der Einführung der Oracle HTMLDB u. APEX wird die Web-Konfigurationsseite zum Einrichten anwenderdefinierter PL/SQL-DAD's nicht mehr angeboten, so dass die hier beschriebene, manuelle Einrichtung notwendig ist. Als Datenbankschema verwenden wir das 'mvdemo', da wir uns in Folgebeiträgen hierauf beziehen werden.

Im Verzeichnis %APEX_HOME%\Apache\modplsql\conf wird die DAD-Definition in die dads.conf eingetragen:


Danach wird der Apache neu gestartet und ein kleine Test-Procedure im Schema 'mvdemo' gespeichert:


Entsprechend der 'Location' in der DAD-Definition ist der URL-Path vorgegeben und wir testen den PL/SQL-DAD Zugriff:



Der Konfigurationseintrag und das Testprogramm sind hier zu finden.

Friedhold

Donnerstag, 29. November 2007

Mein Vortrag zur 20. DOAG Tagung : "Oracle Maps in der Praxis"

Nach einer Pause möchte ich meine Beiträge in meinem Blog wieder forcieren: Eine Applikationsmigration und die Vorbereitung meines DOAG-Vortrages inkl. Life-Demos haben mich stark beschäftigt. Der Vortrag war dann auch am 22. Nov. sehr gut besucht.

Letztendlich bin ich ganz zufrieden, da die Interaktions-, Analyse- und Präsentationsfähigkeit von Oracle Maps nachgewiesen werden konnte. Für die Interaktion mit den Sachdaten verwende ich eine Foms 6i Fachschalenapplikation, geschaffen zur Interaktion mit Bentley Microstation DGN - Files. Diese Fachschale ist eine 'On Top' - Applikation, d.h. sie liegt stets über der Kartenapplikation.

Folgende Interaktions-Funktionen wurden realisiert:

 - Lokalisieren von 1 .. n Flächen von der Fachschale zu Oracle Maps, markierte Darstellung inkl. Hervorhebung der aktiven Fläche
 - auswählen von Flächen in Oracle Maps (clickable Polygons) und Übernahme in die Fachschale durch Re-Query

Mit Oracle Maps konnte ich folgende Funktionen erfüllen:

 - User Defined Windows auf der Basis von displayInfoWindow und IFRAME für :
    o Informations-Klick (rechte Maustaste) durch dynamisches HTML erstellt in PL/SQL Webtool package
    o setzen von 'Points of Interest' und Informationserfassung
    o 'Nested Maps' zur Detaildarstellung der Klickposition der Mastermap

 - Darstellung von 'Points of Interrest' und 'Layers of Interest'

 - Geometrische Abfragen mit einem Rechteck, Kreis und Polygon und Sachdatenbestimmung
    o nach 'Points of Interest'
    o nach Flächen

 - Marquee - Zoom

Diese Funktionen wurden in der Oracle Maps Legende unter 4 Modi implementiert:


  • View mode

  • Select mode

  • Query mode

  • Zoom mode .


Die Funktionen wurden ausschliesslich mit PL/SQL und Javascript realisiert und die ca 170 Codezeilen sprechen ausserdem für einen sehr guten "Code-Wirkungsgrad".
Besten Dank nochmals an Bernhard Fischer-Wasels und Carsten Czarski von Oracle für die Unterstützung in der Vorbereitungsphase und bei der Durchführung des Vortrages.

Einfach prima, was man mit Oracle Maps realisieren kann.
In Folge möchte ich über einige Lösungsdetails berichten.

Friedhold

Gute Nachrichten für Forms auf der 20. DOAG - Tagung

Die 20. DOAG Tagung vom 21. - 22. November in Nürnberg stand dieses Jahr eindeutig im Zeichen der SOA - Technologien.

So konnte ich mir als passionierter Forms-Fan den Vortrag von Grant Ronald, Group Product Manager in Oracle's Tools Division, verantwortlich für Oracle Forms, JDeveloper and ADF, anhören und daraus mitnehmen, dass die Forms-Integration und Interaktion mit anderen Technolgien über die Middletier per SOA passieren soll. Dabei erfolgt die Interaktion durch Calling & Consuming von Forms heraus. Dass nun die Forms-Logik in Richtung Service-Orientierung refactored werden muss, liegt völlig nahe, zumal Oracle sich deutlich den serverbasierten (3-tier) Architekturen : APEX, J2EE, PHP und neuerdings Ruby on Rails stellt und unterstützt.

Die letztendlich als Webbrowser-Seiten dem Nutzer angebotenen Applikationen zeichnen sich durch gute Bedienbarkeit aus. Die oben genannten Middletier-Technologien wenden hierfür ausnahmslos XHTML, CSS & AJAX und Javascript an, so dass nun in Oracle Forms 11g für die Interaktion mit Javascript ein Javascript-Event-Trigger integriert ist.
Analog zur AJAX-Technologie, bei der man Informationsregionen in Webseiten per XHR asynchron auffrischen kann, ist es nun mit Oracle Forms 11g auch möglich, auf asynchrone Nachrichten an der AQ zu warten.
Das ganze Szenarion ist somit komplett: AJAX - getriebene XHTML - Applikationsseiten mit integrierten und interagierenden, stark transaktionalen Forms 11g -Modulen inkl. partieller asynchroner Events an AQ's .. Als PL/SQL-Programmierer kann man sich dies auch recht gut auf der Basis von APEX vorstellen.

Von Sun ist zu hören, dass an 'schlanken' JRE's gearbeitet wird (Java 7), auch in Hinblick auf Applets - sozusagen auch eine Renaissance der Applets bevorsteht.

Alles gute Nachrichten für uns Forms - Enthusiasten.

Friedhold