Folgendes Problem: Es gibt eine Anwendung, die Gebäude verwaltet. Der Benutzer gibt eine Adresse ein und soll nun Gebäude angezeigt bekommen, die in der Nähe liegen.
Hier sind nun klar Geodaten erforderlich, diese können für Hamburg z.B. vom Landesbetrieb Geoinformation und Vermessung (LGV) kommen. Aber unabhängig davon: wie verwalten wir diese Daten, wie greifen wir darauf zu? Der Microsoft SQL Server bietet hier seit Version 2008 den Datentyp geography, in unserem Beispiel können wir hier die Koordinaten einer Adresse speichern.
CREATE TABLE dbo.T_GeoData
(
StreetName nvarchar(255) NOT NULL,
StreetNumber nvarchar(20) NOT NULL,
Coordinates geography NOT NULL
) ON [PRIMARY]
Diese Tabelle ist natürlich stark vereinfacht, aber genügt für unser Beispiel. Um die zu Beginn beschriebene Abfrage durchzuführen, kann folgende Stored Procedure genutzt werden:
CREATE PROCEDURE SP_GetAddressesByDistance
@StreetName nvarchar(255),
@StreetNumber nvarchar(20)
AS
BEGIN
DECLARE @location geographySELECT TOP 1 @location = Coordinates
FROM T_GeoData
WHERE StreetName = @StreetName AND StreetNumber = @StreetNumberSELECT TOP 50 StreetName, StreetNumber, Coordinates.STDistance(@location) as Distance
FROM T_Geodata
WHERE Coordinates.STDistance(@location) < 1000
ORDER BY Coordinates.STDistance(@location) ASC
END
STDistance berechnet die Entfernung zwischen zwei Koordinaten in Metern. Diese Stored Procedure gibt also die 50 nächstliegenden Adressen mit maximal 1000 Meter Entfernung aus. Zusammen mit Straße und Hausnummer wird die Entfernung in Metern zurückgegeben.