Posts mit dem Label sql werden angezeigt. Alle Posts anzeigen
Posts mit dem Label sql werden angezeigt. Alle Posts anzeigen

Montag, 28. September 2020

API für die Nachverfolgung von Kontakten in der Oracle DB

Wer regelmäßig die AskTom Office Hours verfolgt, sollte es schon gesehen haben: Das Oracle Spatial Development Team hat eine Contact Tracing API für die Oracle DB geschrieben, die hervorragend z.B. in APEX-Anwendungen zum Einsatz kommen kann.
Seit Mitte September stehen 2 Versionen dieser API bereit. 

  1. Swipe IN/OUT Contact Tracing
    Hierfür werden keine GPS Daten benötigt, sondern die zeitgleiche räumliche Nähe zu Sensoren. Die Analyse erfolgt dann auf der Basis der zeitlichen Überlappungen.


  2. GPS-based Contact Tracing
    Hierfür werden GPS-Daten als Serie von Punktkoordinaten mit zugeordneten Zeitstempeln vorausgesetzt.


Die APIs sind Bestandteil jeder Oracle Datenbank Lizenz. Detaillierte Informationen gibt es 

Ausprobieren ist ausdrücklich erwünscht. Dafür stehen nicht nur die Skripte sondern auch Testdaten bereit (Siehe Supplement Teil im vorher erwähnten Blog Post).


Montag, 8. September 2014

Hoch- und Rechtswert von Geometrien verschieben

Heute erhielt ich die Frage, wie man mittels SQL die Hochwerte von Geometrien z.B. um 100 Meter erhöhen kann.
Die Antwort darauf ist relativ einfach: z.B. mit einer Funktion.
Für die Funktion habe ich mit folgenden Prämissen gearbeitet:
  • Bei den Geometrietypen handelt sich um Linien oder Polygone.
  • Die Geometrien sind zweidimensional.
  • Die Masseinheit für die Verschiebung ist "m".
Der Funktion gebe ich 3 Parameter mit:
  1. Ausgangsgeometrie
  2. Offset für den Rechtswert
  3. Offset für den Hochwert
Der Default für die beiden Offset-Werte ist jeweils 0.
Damit sieht die Funktion dann wie folgt aus:
create or replace function geom_add_offset(
  p_geom sdo_geometry,
  p_offset_east number default 0,               -- Offset für den Rechtswert in Metern
  p_offset_north number default 0               -- Offset für den Hochwert in Metern
) return sdo_geometry deterministic is
  l_geom sdo_geometry := p_geom ;
begin
  for i in 1..p_geom.sdo_ordinates.count loop
    if mod(i,2) = 0 then
    -- Hochwert: 2. Wert in einem Koordinatenpaar
      l_geom.sdo_ordinates(i) := l_geom.sdo_ordinates(i) + p_offset_north;
   else
    -- Hochwert: 1. Wert in einem Koordinatenpaar
      l_geom.sdo_ordinates(i) := l_geom.sdo_ordinates(i) + p_offset_east;
    end if; 
  end loop;
  return l_geom;
end geom_add_offset;
/
Diese Funktion kann ich jetzt in jedes beliebige SQL-Statement einbauen.
Beispielhaft lege ich eine neue Tabelle, welche den Hochwert aller Geometrien um 100 erhöht.
create table geom_tab_with_offset as
select
  id,
  name,
  geom_add_offset(geometry, 0, 100) as geometry
from geom_tab;
Visuell dargestellt sieht das für ein Beispiel-Polygon dann ausschnittsweise so aus:
Mit recht wenig Aufwand lässt sich also die gewünschte Verschiebung direkt mittels SQL in der Datenbank vornehmen.

Donnerstag, 14. Oktober 2010

SQL Developer 3.0 ist draußen: Mit Spatial-Unterstützung!

Seit dem 13. Oktober ist das Early Adopter-Release des SQL Developer 3.0 draußen. Das besondere daran ist, dass nun eine Unterstützung für Spatial drin ist: out-of-the-box und ohne GeoRaptor. Hier ein Screenshot. Ihr sehr, dass es nun eine Map-Ansicht von Geodaten gibt und dass zu einer Tabelle (über den Eintrag Räumlich im Kontextmenü) Spatial-Bezogene Operationen angeboten werden.
Der SQL Developer wird mit Sicherheit nicht mit einem Spatial Commander oder einem ähnlichen GIS-Werkzeug konkurrieren können, aber die Basisoperationen (sprich: was ein SQL bzw. PLSQL-Entwickler braucht) sind nun out-of-the-box drin. Und das ist gut!