Friday, 23. april 2010 5 23 /04 /Apr. /2010 19:42

Die Express-Edition des Microsoft SQL Server 2008 R2 RTM wurde bereits vor ein paar Tagen veröffentlicht und kann bekanntlich kostenfrei genutzt werden.

Nun gibt es auch die Enterprise Evaluation Edition der RTM zum Download für 32 und 64-Bit Systeme, mit der man 90 Tage lang die große Edition mit allen Features testen kann.

von Olaf Helper - veröffentlicht in: Download MSSQL - Community: Microsoft SQL Server
Kommentar hinzufügen - Kommentare (0)ansehen
Wednesday, 21. april 2010 3 21 /04 /Apr. /2010 20:07

Heute auf dem Microsoft SQL Server 2008 R2 Launch Event in Neuss / swissotel (wo ich gerade bin) hat Donald Farmer verkündet, das der Microsoft SQL Server 2008 R2 von CTP in den Status RTM gewechselt hat.

 

Im Download Center findet man jetzt bereits die Express Edition in den verschiedenen Varianten zum Download und das sogar als deutsch-sprachige Version:

 

Microsoft SQL Server 2008 R2 RTM - Express - Deutsch

Microsoft SQL Server 2008 R2 RTM - Express with Management Tools - Deutsch

Microsoft SQL Server 2008 R2 RTM - Express with Advanced Services - Deutsch

 

Alle drei Varianten gibt es als x86 und x64 Version.

 

von Olaf Helper - veröffentlicht in: Download MSSQL - Community: Microsoft SQL Server
Kommentar hinzufügen - Kommentare (0)ansehen
Friday, 16. april 2010 5 16 /04 /Apr. /2010 10:19

Ja, bin ich hier in C#?

 

Wem es noch nicht aufgefallen ist, die Methoden von CLR Datentypen wie Geometry oder Xml sind Case Sensitive und das unabhängig von der Collation des Microsoft SQL Server oder der aktuellen Datenbank. Man muss also die Groß-/Kleinschreibung beachten, sonst gibt es Laufzeitfehler.

 

-- Diesesmal nicht AdventureWorks, den die
-- ist CaseSensitive (CS); diesmal die TempDB (CI)
USE [tempdb]
GO
 
-- So funktioniert es: Richtige Groß-/Kleinschreiubng
DECLARE @geo geometry;
SET @geo = geometry::STGeomFromText('POINT(1 1)', 0);
SELECT @geo.ToString() AS Result;
GO
 
-- Alles klein geschrieben: IntelliSense erkennt es nicht
-- und es gibt einen Laufzeit-Fehler. 
-- Geometry darf hingegen groß geschrieben werden
DECLARE @geo geometry;
SET @geo = Geometry::STGeomFromText('POINT(1 1)', 0);
SELECT @geo.tostring() AS Result;
GO
 
-- Bei XML gilt das gleiche, wobei IntelliSense bei "value"
-- weder Klein- (was hier korrekt ist) noch Großschreibung
-- anerkennt
DECLARE @xml XML;
SET @xml = '<test attr="Hallo" />';
SELECT x.value('@attr', 'varchar(5)') AS Result
FROM @xml.nodes('test') as s(x)
GO
 
Result
-------------------
POINT (1 1)
 
(1 row(s) affected)
 
Msg 6506, Level 16, State 10, Line 7
Die 'tostring'-Methode für den 'Microsoft.SqlServer.Types.SqlGeometry'-Typ wurde in der 'Microsoft.SqlServer.Types'-Assembly nicht gefunden.
 
Result
------
Hallo
 
(1 row(s) affected)

  

 

 

 

 
ClrDatenTypenCS.jpg
von Olaf Helper - veröffentlicht in: .NET - Community: Microsoft SQL Server
Kommentar hinzufügen - Kommentare (0)ansehen
Wednesday, 14. april 2010 3 14 /04 /Apr. /2010 19:50

Abgrenzung manuell als Polygone zu definieren, wie ich es in Teil 3 - Polygone gemacht habe, ist in der Praxis zu aufwendig. Nur wie kommt an zumindest an Standard-Daten, wie Ländergrenze und ähnliches?

 

Die einfachste Lösung ist zugleich die teuerste. Es gibt diverse kommerzielle Anbieter von geografischen Daten, bei denen man umfangreiches Kartenmaterial in den verschiedensten Formaten beziehen kann.

 

Kostenlose Alternativen gibt es auch, die muss man aber erst einmal suchen & finden und sie sinnvoll zusammen zu tragen, das ist wiederum ein nicht gerade geringer manueller Aufwand.

Im Bereich GIS (Geographic Information Systems) hat sich mittlerweile das Shape-File (.shp) Format der Firma ESRI als de facto Standard durch gesetzt.

Im Internet findet man einige frei zugängliche Shape-Files unterschiedlichen Inhaltes. Für den amerikanischen Raum gibt es die sehr bekannten TIGER Lines (Topologically Integrated Geographic Encoding and Referencing system) von Cenus. In USA ist man auf dem Standpunkt, das Daten, die mit Steuergelder erhoben wurden, auch dem Steuerzahler frei zur Verfügung gestellt werden (sofern nicht geheim). Deshalb gibt es auch reichlich Shape-Files für die USA. Bei „uns“ ist man nicht dieser Meinung, wir bekommen nichts für lau. Entsprechend gibt es den deutschen (und auch europäischen) Raum nur wenige Shapes. Aber es gibt sie, man muss eben suchen.

Eine gute Quelle ist z.B. DIVA-GIS, hier gibt es z.B. die „administrative Lines“ von Deutschland. Im Download-File „DEU_adm.zip“ sind 4 Shape-Files, mit der Landesgrenze (Admin00.shp), den Bundesländern (Admin01.shp), den Kommunen und den Gemeinden.

 

Zum Import dieser Shape-Files gibt es wiederum das kleine, feine Tool namens Shape2Sql von SharpGIS, den Download Link findet etwas versteckt hier, unten auf der Seite. Es ist eine .NET Applikation mit WPF, installieren muss man nicht, wenn .NET 3.5 vorhanden ist, läuft es auch. Das Tool ist sehr simple, man gibt eine Connection zu einen Microsoft SQL Server mit Version >= 2008 an, wählt das Shape-File aus, kann dann noch Tabellennamen und die aus dem Shp zu übernehmen Felder festlegen und schon kann man die Daten importieren lasse; optional kann man auch gleich einen Geo-Index anlegen lassen.

von Olaf Helper - veröffentlicht in: Geo / GIS - Community: Microsoft SQL Server
Kommentar hinzufügen - Kommentare (0)ansehen
Tuesday, 13. april 2010 2 13 /04 /Apr. /2010 19:54

Geo-Daten zu erfassen, wie ich es mit den Polygonen für 2 Bundesländer gemacht habe, ich mühselig, aufwendig und zeitintensiv; großen Spaß macht es auch nicht.

Da ist es bequemer, sich Daten liefern zu lassen. Aber diese Daten müssen dann in der Regel auch erst einmal in den Datentypen Geography konvertiert werden.

 

Ein häufiges Datenformat bei Geo-Daten ist XML, da fällt es im Microsoft SQL Server mit der XML Unterstützung recht einfach. Per OPENROWSET mit der BULK Option lädt man die Daten und fragt die Daten per XQuery ab, das Ergebnis konvertiert man dann.

 

Im zweiten Beispiel verwende ich das Ergebnis der CTE Query aus Teil 4, um die Bounding Box als Polygon zu erstellen.

 

Zum eigentlichen Konvertieren kann man das klassische CONVERT verwenden, das funktioniert wie bei jedem anderen Datentypen auch. Zudem gibt es noch die statische Methode geography::STGeomFromText(), um Werte in den Datentypen Geography zu konvertieren. Diese Methode bietet den Vorteil, dass man die SRID angeben kann, für den Fall, dass sie vom Standard abweicht.

 

Alles Weitere kann man dem folgenden Script entnehmen:

 

-- In Teil 1 angelegte Datenbank verwenden
USE [GeoTest];
GO
 
-- Geo-Daten konvertieren
-- Einfaches XML in Geography - Point wandeln.
DECLARE @g AS XML;
SET @g = '
<params>
    <param lat="52.4728736" lng="9.7196064" 
     vv="2009-01-06T08:02:50Z+01:00&lt;br&gt;Speed: 96.13 km/hr&lt;br&gt;
         Altitude: 52 m&lt;br&gt;Course: 175 deg.&lt;br&gt;"/>
        <param lat="52.4704672" lng="9.7201096" 
        vv="2009-01-06T08:03:00Z+01:00&lt;br&gt;Speed: 97.95 km/hr&lt;br&gt;
            Altitude: 54 m&lt;br&gt;Course: 172 deg.&lt;br&gt;"/>
        <param lat="52.4692768" lng="9.7204344" 
        vv="2009-01-06T08:03:05Z+01:00&lt;br&gt;Speed: 96.55 km/hr&lt;br&gt;
            Altitude: 52 m&lt;br&gt;Course: 171 deg.&lt;br&gt;"/>
</params>';
 
-- Konvertierung, Anzeige des Ergebnisses mit .ToString()
SELECT SUB.*
      ,CONVERT(geography
              ,'POINT(' + SUB.Longitude + ' ' 
                        + SUB.Latitude + ')').ToString() AS Pos1
     ,geography::STGeomFromText(
               'POINT(' + SUB.Longitude + ' ' 
                        + SUB.Latitude + ')'
               ,4326).ToString() AS Pos2
FROM (SELECT res.value('@lat', 'varchar(20)') as Latitude
            ,res.value('@lng', 'varchar(20)') as Longitude
      FROM @g.nodes('params/param') AS qry(res)
     ) AS SUB;
GO
 
-- Ergebnis der Bounding Box Selektion
-- in Polygon wandeln.
-- Basis ist dabei die CTE aus Teil 5
WITH areaCte (areaId, PointNum)
 AS (SELECT [ID] AS areaId, 1 as PointNum
     FROM dbo.Area AS A
     UNION ALL
     SELECT [ID] AS areaId, PointNum + 1
     FROM dbo.Area AS A
          INNER JOIN areaCte AS C
              ON A.ID = C.areaId
     WHERE PointNum < A.Area.STNumPoints())
SELECT AreaName
      ,CONVERT(geography
              ,'POLYGON((' + MaxLong + ' ' + MaxLat + ', '
                           + MinLong + ' ' + MaxLat + ', '
                           + MinLong + ' ' + MinLat + ', '
                           + MaxLong + ' ' + MinLat + ', '
                           + MaxLong + ' ' + MaxLat 
                    + '))'
              ) AS BoundingBox
FROM ( SELECT A.ID
              ,A.AreaName
              ,CONVERT(varchar
                      ,MIN(A.Area.STPointN(C.PointNum).Long)) AS MinLong
              ,CONVERT(varchar
                      ,MIN(A.Area.STPointN(C.PointNum).Lat))  AS MinLat
              ,CONVERT(varchar
                      ,MAX(A.Area.STPointN(C.PointNum).Long)) AS MaxLong
              ,CONVERT(varchar
                      ,MAX(A.Area.STPointN(C.PointNum).Lat))  AS MaxLat
        FROM areaCte AS C
             INNER JOIN
             dbo.Area AS A
                 ON C.areaId = A.ID
        GROUP BY A.ID
                ,A.AreaName
     ) AS SUB
-- Zur Gegenüberstellung die Areas
UNION ALL
SELECT A.AreaName
      ,A.Area
FROM Area AS A;

 

Über „Spatial Result“ kann man kontrollieren, ob die Bounding Box Berechnung stimmt; und es sieht passend aus.

Spatial_Result_BoundingBox.jpg

von Olaf Helper - veröffentlicht in: Geo / GIS - Community: SQL Scripter
Kommentar hinzufügen - Kommentare (0)ansehen

Über diesen Blog

Kategorien

Kalender

February 2012
M T W T F S S
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29        
<< < > >>

Syndication (RSS)

  • RSS-Feed der Artikel

Suchen

Blog erstellen

Erstellen Sie einen Blog auf OverBlog - Kontakt - Nutzungsbedingungen - Werbung - Missbrauch melden - Impressum - Artikel mit den meisten Kommentaren