Quantcast
Channel: Entwicklung – HanseVision Blog
Viewing all articles
Browse latest Browse all 46

Aus der Praxis – Geodaten in SQL Server

$
0
0

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 geography

    SELECT TOP 1 @location = Coordinates
        FROM T_GeoData
        WHERE StreetName = @StreetName AND StreetNumber = @StreetNumber

    SELECT 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.


Viewing all articles
Browse latest Browse all 46