Geography-Problem

26/03/2009 - 12:44 von Thomas Griepentrog | Report spam
Hallo NG,

ich wollte mal den Geography-Typ in SQL 2008 testen.

Dazu habe ich mir den Blog-Eintrag von Steffen Krause als Ausgangspunkt
genommen.
(http://blogs.technet.com/steffenk/a...daten.aspx)

Habe die Mondial-Datenbank angelegt und importiert und habe mir die
Postleitzahlen-Datei geholt.

Doch nun habe ich ein Problem beim Importieren dieser Datei.

Das Management-Studio bringt mir immer folgenden Fehler:
Msg 6522, Level 16, State 1, Line 1
.NET Framework-Fehler beim Ausführen der benutzerdefinierten Routine oder
des benutzerdefinierten Aggregats 'geography':
System.ArgumentException: 24200: The specified input does not represent a
valid geography instance.
System.ArgumentException:
at
Microsoft.SqlServer.Types.SqlGeography.ConstructGeographyFromUserInput(GeoData
g, Int32 srid)
at Microsoft.SqlServer.Types.SqlGeography.GeographyFromText(OpenGisType
type, SqlChars taggedText, Int32 srid)
at Microsoft.SqlServer.Types.SqlGeography.Parse(SqlString s)

Hier der Datensatz, den ich Importieren will:
INSERT INTO post_code_areas VALUES (0, '01067', 1067, 'Dresden',
'MULTIPOLYGON(((
13.7189358 51.07600017,13.72121532 51.07498173,13.72244724
51.07323078,13.7243034 51.07141494,
13.72696308 51.06893157,13.727583 51.06863403,13.72820184
51.06833649,13.72943988 51.06772611,
13.73232744 51.06452562,13.734207 51.06212235,13.735017
51.06047436,13.73702796 51.05793384,
13.74013044 51.05562588,13.74254496 51.05455776,13.7458782
51.05422593,13.74720372 51.0541992,
13.7485332 51.05418399,13.74983892 51.05443194,13.74999336
51.05278782,13.749156 51.05128095,
13.74727536 51.04925919,13.74523056 51.04711917,13.74415668
51.04710774,13.74180228 51.04713825,
13.74138936 51.04733274,13.74040116 51.04750059,13.73867604
51.04737477,13.73614596 51.04700847,
13.73446188 51.04652022,13.7320452 51.0457878,13.7287674
51.04431531,13.72675608 51.04329678,
13.72481424 51.04403685,13.7236212 51.04520037,13.72306356
51.04571535,13.72291452 51.04584504,
13.72249044 51.04622646,13.72220604 51.04804608,13.72205052
51.04877472,13.72213944 51.05075076,
13.72145472 51.05113218,13.72060692 51.05215458,13.71866148
51.05284497,13.71706884 51.05348208,
13.70457252 51.0561333,13.69833084 51.05745693,13.6967706
51.05778885,13.695984 51.0579567,
13.69715976 51.06051252,13.69621764 51.06446073,13.69720476
51.06465531,13.6991664 51.06504438,
13.70181096 51.06680676,13.70330424 51.06938175,13.70382516
51.0714378,13.70634264 51.0742836,
13.70990268 51.07570263,13.71315852 51.0761871,13.716117
51.07649616,13.7189358 51.07600017)))');

Kann mir einer sagen, woran das liegt?

Umgebung: SQL Server 2008 Standard 10.0.1787

Thomas
 

Lesen sie die antworten

#1 Elmar Boye
29/03/2009 - 18:32 | Warnen spam
Hallo Thomas,

Thomas Griepentrog schrieb:
ich wollte mal den Geography-Typ in SQL 2008 testen.




na den habe ich jetzt auch mal getestet, war stressiger als gedacht,
sieht aber am Ende ganz hübsch aus ;-)

(Wobei der Stress eher aus dem Mangel an Informationen resultierte.)

Dazu habe ich mir den Blog-Eintrag von Steffen Krause als Ausgangspunkt
genommen.
(http://blogs.technet.com/steffenk/a...daten.aspx)

Habe die Mondial-Datenbank angelegt und importiert und habe mir die
Postleitzahlen-Datei geholt.

Doch nun habe ich ein Problem beim Importieren dieser Datei.

Das Management-Studio bringt mir immer folgenden Fehler:
Msg 6522, Level 16, State 1, Line 1
..NET Framework-Fehler beim Ausführen der benutzerdefinierten Routine
oder des benutzerdefinierten Aggregats 'geography':
System.ArgumentException: 24200: The specified input does not represent
a valid geography instance.



Da hat sich seit dem Artikel noch einiges geàndert.

Zunàchst hatte Microsoft ein Einsehen und hat die Anordnung
von Làngen-/Breitengraden geàndert:
<URL:http://blogs.msdn.com/isaac/archive...q.aspx>

resultierend aus einem Thread:
<URL:http://social.msdn.microsoft.com/fo...a383f/>

Wodurch Steffens Konvertierung bei der RTM Version entfallen kann.

Solange man einen "geometry" Typ verwendet, ginge der Import
mit etwas SQL alleine - es muß nur das einleitende "SRIDC26;"
entfernt werden.

Allerdings ist der Geography Datentyp strenger, was die
zulàssigen Daten angeht und wirft mit Fehlern um sich.

Eine Lösung dazu findet sich hier:
<URL:http://blogs.msdn.com/edkatibah/arc...b.aspx>

weitere Erlàuterungen findet man unter:
<URL:http://conceptdev.blogspot.com/2007...y.html>

In der Summe ist unten stehendes Skript herausgekommen.
Der INSERT Teil aus der "PLZ.SQL" muß dort noch eingefügt werden.

Das Endergebnis kann man sich direkt im Management Studio
unter "Ràumliche Ergebnisse" anschauen.

Gruß Elmar

USE tempdb;
go
DROP TABLE post_code_areas
go

/**
TEIL 1: Importieren der DAten aus plz.sql
**/

CREATE TABLE post_code_areas (
gid int not null,
plz99 varchar(5) not null,
plz99_n int not null,
plzort99 nvarchar(60) not null,
the_geom varchar(max) not null
);
GO

SET NOCOUNT ON;
BEGIN TRAN;
COMMIT;
GO

/*
* TEIL 2: Übertragen der eingelesenen Daten
*/

IF OBJECT_ID(N'dbo.PlzKarten', 'U') IS NOT NULL
DROP TABLE dbo.PlzKarten;
GO


CREATE TABLE dbo.PlzKarten
(
Id int not null,
Plz varchar(5) not null,
Ort nvarchar(60) not null,
Karte geography null,

CONSTRAINT PK_PlzKarten PRIMARY KEY (Id),
CONSTRAINT UK_PlzKarten UNIQUE (Plz)

);
GO

WITH GeoCTE
AS
(
SELECT
pca.gid AS Id,
pca.plz99 AS Plz,
pca.plzort99 AS Ort,
geometry::STGeomFromText(RIGHT(
pca.the_geom,
DATALENGTH(pca.the_geom) - CHARINDEX(';', pca.the_geom)), 4326) AS geom
FROM dbo.post_code_areas AS pca
)
INSERT INTO dbo.PlzKarten (Id, Plz, Ort, Karte)
SELECT Id, Plz, Ort,
geography::STGeomFromWKB(geom.MakeValid()
.STUnion(geom.STStartPoint())
.STAsBinary()
, 4326)
FROM GeoCTE;
GO

CREATE SPATIAL INDEX SX_PlzKarten ON dbo.PlzKarten(Karte)
USING GEOGRAPHY_GRID;
GO

SELECT * FROM dbo.PlzKarten
GO

Ähnliche fragen