IduIT.GeoLib.MsSql
Diese DLL ist ein CLR Wrapper für die Erstellung von MicrsoftSqlServer UDFs für den Umgang mit Geometriefunktionen, die nicht im Umfang der Spatial Funktionen des SQL Server sind (vor allem ST_Transform).
Der Zugriff und die Rückgabe der Geometrien erfolgt im SQL Server nativem binär Format. D.H. Übergabe der Geometrie muss immer in der Form
cast (geometry::STGeomFromText('POINT(12 52)',4326) as varbinary(max)
erfolgen. Der entsprechende Rückweg dann via
cast (resultFromFunction as geometry)
Installation
Die Methode kann ab SQLServer 2014 verwendet werden (nur 64-Bit Version). Ggf. müssen die aktuellen VCRedist auf dem Server installiert sein (derzeit Version 2022). Als .Net Framework wird Version 4.5.2 verwendet.
Erforderliche Dateien
Das .Net Assembly ist lediglich ein Wrapper um die eigentlichen Methoden, die in der IduIT.GeoLib.Net.dll vorhanden sind.
D.H. für die Installation ist IduIT.GeoLib.MsSql.dll und auch IduIT.GeoLib.Net.dll erforderlich.
Bei der Installation muss dabei sichergestellt werden, dass die IduIT.GeoLib.Net.dll im Suchpfad (64Bit) enthalten ist.
Transformation mit NAD Grid
Ebenso sollte das NTv-Grid für die Transformation vorhanden sein (siehe auch Methode IDUIT_RunProjectionTestReturnErrorIfFailed()).
Die NTv Datei (in cardo ist eine Datei "xeta.gsb" vorhanden, diese kann verwendet werden) wird per Default im gleichen Ordner wo die IduIT.GeoLib.Net.dll gespeichert ist gesucht. Alternativ wird die Umgebungsvariable IDU_UTM_NAD_GRID_FOLDER ausgewertet.
Damit Änderungen der NTv Grid Datei wirksam werden (z.B. erstmalige Bereitstellung der Datei) ist der Neustart des SQL Servers erforderlich.
--- DB-Init ---
-- Auf dem Server / der Datenbank die Ausführung von .Net Assembly zulassen
/*
sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO
*/
--- CleanUp ---
/*
drop function IDUIT_ST_AsEWKT
go
drop function IDUIT_ST_Transform
go
drop function IDUIT_GetCurrentNADGrid
go
drop function IDUIT_Version
go
drop function IDUIT_RunProjectionTestReturnErrorIfFailed
go
DROP ASSEMBLY IduITAsm
go
*/
--- Installation (Pfad anpassen!) ---
CREATE ASSEMBLY IduITAsm FROM 'd:\IduIT.GeoLib.MsSql.dll'
WITH PERMISSION_SET = UNSAFE
go
/*
EWKT Darstellung der Geometrie
*/
CREATE FUNCTION IDUIT_ST_AsEWKT(@geomBytes varbinary(max))
RETURNS
nvarchar(max) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME IduITAsm.[IduIT.GeoLib.MsSql.DLLWrapper].ST_AsEWKT
GO
/*
Transformiert die Geometrie und gibt das Transformationsergebnis zurück.
fromEpsg: wenn 0, dann die in der Geometrie gespeicherte.
*/
CREATE FUNCTION IDUIT_ST_Transform(@geomBytes varbinary(max),@fromEpsg int,@toEpsg int)
RETURNS
varbinary(max) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME IduITAsm.[IduIT.GeoLib.MsSql.DLLWrapper].ST_Transform
GO
/*
Dateiname des verwendeten NAD Grid, oder NULL
*/
CREATE FUNCTION IDUIT_GetCurrentNADGrid()
RETURNS
nvarchar(max) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME IduITAsm.[IduIT.GeoLib.MsSql.DLLWrapper].GetCurrentNADGrid
GO
/*
Version als String (z.B. 7.0.7.1)
*/
CREATE FUNCTION IDUIT_Version()
RETURNS
nvarchar(max) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME IduITAsm.[IduIT.GeoLib.MsSql.DLLWrapper].Version
GO
/*
Projektion mit einer Referenz-Koordinate.
NULL im Erfolgsfall, sonst der Fehlertext
*/
CREATE FUNCTION IDUIT_RunProjectionTestReturnErrorIfFailed()
RETURNS
nvarchar(max) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME IduITAsm.[IduIT.GeoLib.MsSql.DLLWrapper].RunProjectionTestReturnErrorIfFailed
GO
--- Test ---
/*
select dbo.IDUIT_Version()
go
select dbo.IDUIT_RunProjectionTestReturnErrorIfFailed();
go
select dbo.IDUIT_ST_AsEWKT(cast (geometry::STGeomFromText('POINT(12 52)',4326) as varbinary(max)))
go
select cast(dbo.IDUIT_ST_Transform(cast (geometry::STGeomFromText('POINT(12 52)',4326) as varbinary(max)),4326,31468) as geometry).STAsText()
go
*/
Fehlerbezogene Lösungen:
Meldung: "System.DllNotFoundException: Die DLL "IduIT.GeoLib.Net.dll": Das angegebene Modul wurde nicht gefunden"
Lösung: Die IduIT.GeoLib.Net.dll ist nicht im Suchpfad (PATH) zu finden, passen sie die Umgebungsvariable PATH an, oder kopieren Sie die Datei in einen entsprechenden Pfad (z.B. C:\Program Files\Microsoft SQL Server\130\Tools\Binn)
Lösung: Besteht das Problem immer noch (oder in ähnlicher Form), stellen Sie sicher das die aktuelle Redistributable Visual Studio 2015, 2017, 2019, and 2022 (Version x64) installiert ist
Lösung: Wenn das Assembly per DB Restore wieder hergestellt wurde, dann kann es sein das diese aktualisiert werden muss. Verwende in diesem Fall (Pfade ggf. anpassen):
ALTER ASSEMBLY IduITAsm FROM 'D:\MsSQLASM\IduIT.GeoLib.MsSql.dll' WITH PERMISSION_SET = UNSAFE go
Meldung: "CREATE ASSEMBLY for assembly 'IduIT.GeoLib.MsSql' failed because assembly 'IduIT.GeoLib.MsSql' is not authorized for PERMISSION_SET = UNSAFE. The..."
Lösung: TRUSTWORTHY für die entsprechende Datenbank aktivieren:
ALTER DATABASE {dbname} SET TRUSTWORTHY ON
Zuletzt geändert: 22.11.2024 16:09:48 (erstmals erstellt 01.02.2018) // Alias: "IduITGeoLibMsSql"