Recorder mit QGIS verbinden: Unterschied zwischen den Versionen

Aus Recorder-Wiki
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „'''Dieses Tutorial ist zur Zeit in Bearbeitung''' [http://de.wikipedia.org/wiki/Quantum_GIS QGis] oder [http://de.wikipedia.org/wiki/Quantum_GIS Quantum Gis] …“)
 
 
(52 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
'''Dieses Tutorial ist zur Zeit in Bearbeitung'''
 
'''Dieses Tutorial ist zur Zeit in Bearbeitung'''
  
[http://de.wikipedia.org/wiki/Quantum_GIS QGis] oder [http://de.wikipedia.org/wiki/Quantum_GIS Quantum Gis] ist ein benutzerfreundliches, frei verfügbares und quelloffenes Geoinformationssystem zum Betrachten, Bearbeiten und Erfassen von räumlichen Daten. Seit Erscheinen der Version Dufor 2.0 ist es besonders gut geeignet, Beobachtungsdaten der Recorder-Datenbank in einem GIS-System darzustellen.
+
[http://de.wikipedia.org/wiki/Quantum_GIS QGis] oder [http://de.wikipedia.org/wiki/Quantum_GIS Quantum Gis] ist ein benutzerfreundliches, frei verfügbares und quelloffenes [http://de.wikipedia.org/wiki/Geoinformationssystem Geoinformationssystem] zum Betrachten, Bearbeiten und Erfassen von räumlichen Daten. Seit Erscheinen der Version Dufor 2.0 ist es besonders gut geeignet, Beobachtungsdaten der Recorder-Datenbank in einem GIS-System darzustellen.
  
Vorausetzung dafür ist, dass die Recorder-Datenbank auf dem Microsoft SQL Server 2008 oder 2012 eingebunden ist. Diese kann Geometrie-Daten nutzen und verwalten.
+
Vorausetzung dafür ist, dass die Recorder-Datenbank auf dem Microsoft SQL Server 2008, 2012 oder 2014 eingebunden ist. Dieser kann Geometrie-Daten nutzen und verwalten. Um die Version Ihres SQL Servers zu erfahren, starten Sie Recorder, wählen Sie aus dem Hauptmenü '''Berichte → Ausführen''', im Dialog '''Gespeicherten Bericht öffnen''' den Bericht '''Datenbankchecks → Settings Check Exp'''. Die erste Zahl unter dem Eintrag '''SQL Server Version''' muss mindestens 10 sein (z.B. 10.50.1600.1).
  
Vorgehensweise.
+
===Vorbereitende Arbeiten===
 +
 
 +
====Schritt 1: QGIS installieren====
 
Installieren Sie QGIS von der [http://www.qgis.org/de/site offiziellen Website des Projektes].  
 
Installieren Sie QGIS von der [http://www.qgis.org/de/site offiziellen Website des Projektes].  
  
Unter Recorder müssen sei mindestens ein zusätzliches View erstellen:
+
====Schritt 2: Recorder Datenbank für QGIS optimieren====
Öffnen Sie dazu das SQL Server Management Studio und verbinden Sie sich mit der Datenbank-Instanz, auf der Ihre Recorder Datenbank liegt.
+
 
Wählen Sie die Recorder-Datenbank im Objekt-Explorer aus. Straten Sie eine neue Abfrage mit Datei>Neu>Abfrage mit aktueller Verbindung (Strg+N).
+
Um die Recorder-Datenbank effektiv unter QGIS einbinden zu können, müssen Sie mindestens ein zusätzliches View erstellen. Öffnen Sie dazu das SQL Server Management Studio und verbinden Sie sich mit der Datenbank-Instanz, auf der Ihre Recorder Datenbank liegt.
Kopieren Sie den folgenden Quellcode in das Abfragefenster:
+
 
 +
Wählen Sie die Recorder-Datenbank im Objekt-Explorer aus. Starten Sie eine neue Abfrage mit '''Datei Neu Abfrage mit aktueller Verbindung''' (Strg+N). Kopieren Sie den folgenden Quellcode in das Abfragefenster:
 +
 
 +
  <pre>  IF  EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[dbo].[bfn_sample_spatial_ref]') AND type in (N'V'))
 +
  DROP VIEW [dbo].[bfn_sample_spatial_ref]
 +
 
 +
  GO
 +
  SET ANSI_NULLS ON
 +
  GO
 +
  SET QUOTED_IDENTIFIER ON
 +
  GO
 +
 
 +
  DECLARE @SQL as varchar(8000)
 +
  SET @SQL ='SELECT s.SAMPLE_KEY,
 +
    case
 +
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 8 then lat + 0.00625
 +
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 7 then lat + 0.0125
 +
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 6 then lat + 0.025
 +
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 4 then lat + 0.05
 +
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 8 then lat + 0.00833333333333333
 +
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 6 then lat + 0.025
 +
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 4 then lat + 0.05
 +
      else lat
 +
    end
 +
    as lat_center,
 +
    case
 +
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 8 then long + 0.01041666666666666
 +
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 7 then long + 0.02083333333333333
 +
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 6 then long + 0.02083333333333333
 +
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 4 then long + 0.08333333333333333
 +
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 8 then long + 0.00833333333333333
 +
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 6 then long + 0.02083333333333333
 +
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 4 then long + 0.08333333333333333
 +
      else LONG
 +
    end
 +
    as long_center,
 +
    case
 +
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 8 then geography::Point(lat + 0.00625, long + 0.01041666666666666, 4326) --''qqq''
 +
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 7 then geography::Point(lat + 0.0125,  long + 0.02083333333333333, 4326)  --''qq''
 +
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 6 then geography::Point(lat + 0.025, long + 0.02083333333333333, 4326)  --''q''
 +
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 4 then geography::Point(lat + 0.05, long + 0.08333333333333333, 4326)  --''m''
 +
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 8 then geography::Point(lat + 0.00833333333333333, long + 0.00833333333333333, 4326)  --''qyx''
 +
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 6 then geography::Point(lat + 0.025, long + 0.02083333333333333, 4326)  --''q''
 +
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 4 then geography::Point(lat + 0.05, long + 0.08333333333333333, 4326)  --''m''
 +
      else geography::Point(lat, long, 4326)
 +
    end
 +
    as center_geom,
 +
    case
 +
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 8 and data is null then 1300 --''qqq''
 +
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 7 and data is null then 2600  --''qq''
 +
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 6 and data is null then 5200  --''q''
 +
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 4 and data is null then 10400  --''m''
 +
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 8 and data is null then 1000  --''qyx''
 +
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 6 and data is null then 5200  --''q''
 +
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 4 and data is null then 10400  --''m''
 +
      else dbo.ufn_BfNNumbersFromString(data)
 +
    end
 +
    as usr,
 +
    case
 +
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 8 then ''qqq''
 +
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 7 then ''qq''
 +
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 6 then ''q''
 +
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 4 then  ''m''
 +
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 8 then ''qyx''
 +
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 6 then ''q''
 +
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 4 then ''m''
 +
      else ''p''
 +
    end as [rtyp]
 +
    from SAMPLE s
 +
        LEFT JOIN
 +
    (SELECT MAX(data) as [data], SAMPLE_KEY
 +
    FROM SAMPLE_DATA
 +
    WHERE MEASUREMENT_UNIT_KEY = ''BFNSYS0000000032'' AND MEASUREMENT_QUALIFIER_KEY = ''BFNSYS0000000099''
 +
    GROUP BY SAMPLE_KEY) as sd
 +
    ON s.SAMPLE_KEY = sd.SAMPLE_KEY
 +
    WHERE s.LAT IS NOT NULL'
  
 +
  IF CAST( left(cast(SERVERPROPERTY('productversion') AS varchar),CHARINDEX('.',cast(SERVERPROPERTY('productversion') as varchar))-1)as integer) > 9
 +
  EXEC('CREATE VIEW [dbo].[bfn_sample_spatial_ref] AS ' + @SQL)
 +
  GO
 +
 
 
   IF  EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[dbo].[bfn_sample_spatial_ref]') AND type in (N'V'))
 
   IF  EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[dbo].[bfn_sample_spatial_ref]') AND type in (N'V'))
   DROP VIEW [dbo].[bfn_sample_spatial_ref]
+
  GRANT SELECT ON [dbo].[bfn_sample_spatial_ref] TO PUBLIC
 +
  GO</pre>
 +
 
 +
 
 +
Führen Sie das Script aus. Drücken Sie dazu den Ausführen-Knopf auf der SQL-Editor-Symbolleite, oder wählen Sie '''Abfrage → Ausführen'''.
 +
 
 +
Der ''Code'' erstellt ein neues ''View'' in Ihrer Recorder Datenbank. Dabei werden aus den Recorder Raumreferenzen der Aufnahmen Tabelle (''Sample'') Geometrien erzeugt und gleichzeitig Koordinaten von Rasterpunkten der deutschen Rastersysteme in das Zentrum des Rasters verlegt.
 +
 
 +
'''
 +
 
 +
====Schritt 3: View mit allen Beobachtungen erstellen.====
 +
 
 +
Erstellen Sie jetzt im SQL Server Management Studio ein View mit allen Beobachtungsdaten Ihrer Datenbank. Achten Sie darauf, dass die Datenbank noch als aktuelle Datenbank ausgewählt ist. Wählen Sie '''Datei → Neu → Abfrage mit aktueller Verbindung''' (Strg+N). Kopieren Sie den folgenden Quellcode in das Abfragefenster:
 +
 
 +
  <pre>IF  EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[dbo].[v_qgis_link]') AND type in (N'V'))
 +
   DROP VIEW [dbo].[v_qgis_link]
 
    
 
    
 
   GO
 
   GO
Zeile 23: Zeile 119:
 
    
 
    
 
    
 
    
  CREATE VIEW [dbo].[bfn_sample_spatial_ref]
+
    CREATE VIEW [dbo].[v_qgis_link] as
  AS
+
     SELECT bssr.center_geom, bssr.USR, bssr.RTYP, itn.ACTUAL_NAME,
  select sample_key,
+
          s.SAMPLE_REFERENCE, itn.SORT_ORDER,
  case
+
          dbo.ufn_BfNReturnVagueDateInteger(S.VAGUE_DATE_END) as DATE_END
     when Spatial_ref_system = 'QQQ' and len(spatial_ref) = 8 then lat + 0.00625 --'qqq'
+
     FROM bfn_sample_spatial_ref bssr
    when Spatial_ref_system = 'QQQ' and len(spatial_ref) = 7 then lat + 0.0125  --'qq'
+
     INNER JOIN SAMPLE s
    when Spatial_ref_system = 'QQQ' and len(spatial_ref) = 6 then lat + 0.025  --'q'
+
     ON bssr.sample_key = s.SAMPLE_KEY
    when Spatial_ref_system = 'QQQ' and len(spatial_ref) = 4 then lat + 0.05  --'m'
+
     JOIN taxon_occurrence toc ON toc.SAMPLE_KEY = s.SAMPLE_KEY
    when Spatial_ref_system = 'QYX' and len(spatial_ref) = 8 then lat + 0.00833333333333333  --'qyx'
+
     LEFT JOIN TAXON_DETERMINATION td ON td.TAXON_OCCURRENCE_KEY = toc.TAXON_OCCURRENCE_KEY
    when Spatial_ref_system = 'QYX' and len(spatial_ref) = 6 then lat + 0.025  --'q'
+
     JOIN INDEX_TAXON_NAME itn ON itn.TAXON_LIST_ITEM_KEY = td.TAXON_LIST_ITEM_KEY
    when Spatial_ref_system = 'QYX' and len(spatial_ref) = 4 then lat + 0.05  --'m'
+
     WHERE td.PREFERRED = 1
    else lat
 
  end
 
  as lat_center,
 
  case
 
    when Spatial_ref_system = 'QQQ' and len(spatial_ref) = 8 then long + 0.01041666666666666 --'qqq'
 
    when Spatial_ref_system = 'QQQ' and len(spatial_ref) = 7 then long + 0.02083333333333333  --'qq'
 
     when Spatial_ref_system = 'QQQ' and len(spatial_ref) = 6 then long + 0.02083333333333333  --'q'
 
     when Spatial_ref_system = 'QQQ' and len(spatial_ref) = 4 then long + 0.08333333333333333  --'m'
 
     when Spatial_ref_system = 'QYX' and len(spatial_ref) = 8 then long + 0.00833333333333333  --'qyx'
 
    when Spatial_ref_system = 'QYX' and len(spatial_ref) = 6 then long + 0.02083333333333333  --'q'
 
     when Spatial_ref_system = 'QYX' and len(spatial_ref) = 4 then long + 0.08333333333333333  --'m'
 
    else LONG
 
  end
 
  as long_center,
 
  case
 
    when Spatial_ref_system = 'QQQ' and len(spatial_ref) = 8 then geography::Point(lat + 0.00625, long + 0.01041666666666666, 4326) --'qqq'
 
     when Spatial_ref_system = 'QQQ' and len(spatial_ref) = 7 then geography::Point(lat + 0.0125,  long + 0.02083333333333333, 4326)  --'qq'
 
    when Spatial_ref_system = 'QQQ' and len(spatial_ref) = 6 then geography::Point(lat + 0.025, long + 0.02083333333333333, 4326)  --'q'
 
     when Spatial_ref_system = 'QQQ' and len(spatial_ref) = 4 then geography::Point(lat + 0.05, long + 0.08333333333333333, 4326)  --'m'
 
    when Spatial_ref_system = 'QYX' and len(spatial_ref) = 8 then geography::Point(lat + 0.00833333333333333, long + 0.00833333333333333, 4326)  --'qyx'
 
     when Spatial_ref_system = 'QYX' and len(spatial_ref) = 6 then geography::Point(lat + 0.025, long + 0.02083333333333333, 4326)  --'q'
 
    when Spatial_ref_system = 'QYX' and len(spatial_ref) = 4 then geography::Point(lat + 0.05, long + 0.08333333333333333, 4326)  --'m'
 
    else geography::Point(lat, long, 4326)
 
  end
 
  as center_geom
 
  from SAMPLE
 
  where LAT is not null
 
 
    
 
    
 
   GO
 
   GO
 
    
 
    
   GRANT SELECT ON [dbo].[bfn_sample_spatial_ref] TO PUBLIC
+
  IF  EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[dbo].[v_qgis_link]') AND type in (N'V'))
 +
   GRANT SELECT ON [dbo].[v_qgis_link] TO PUBLIC</pre>
 +
 
 +
In ihrer Datenbank wird jetzt ein View (eine Datensicht) erstellt, die Beobachtungen mit folgenden Informationen enthält:
 +
 
 +
* center_geom [Zentralkoordinate als Geometrieobjekt],
 +
* USR [Unschärferadius],
 +
* RTYP [Rastertyp].
 +
* ACTUAL_NAME [als gültig angenommener Name],
 +
* SAMPLE_REFERENCE [Raster, sofern bekannt],
 +
* SORT_ORDER [Sortierreihenfolge der Arten]
 +
* DATE_END [Aufnahmedatum bzw. -zeitraum, Ende]
 +
 
 +
==== Schritt 4: DSN erstellen ====
 +
 
 +
Um Quantum GIS mit dem SQL-Server verbinden zu können, müssen Sie zunächst eine DSN ([http://de.wikipedia.org/wiki/Data_Source_Name Data Source Name]) erstellen.
 +
 
 +
=====Windows 7=====
 +
Klicken Sie im Menü '''Start''' auf '''Systemsteuerung''', in der Systemsteuerung auf '''Verwaltung''' und dort auf '''Datenquellen (ODBC)'''; alternativ geben Sie im Startmenü '''Datenquellen''' ein und wählen den gefundenen Eintrag '''Datenquellen (ODBC)''' aus.
 +
 
 +
Wählen Sie den Reiter "Benutzer-DSN". Klicken Sie auf '''[Hinzufügen]'''. Wählen Sie den Treiber "''SQL Server''" aus der Treiberliste aus (es sind auch andere möglich, gegebenenfalls müssen Sie das austesten). Vergeben Sie einen '''Namen''' für die DSN (z.B. ''Recorder'') und geben Sie unter '''Server''' die SQL-Server Instanz Ihrer Recorder-Datenbank an. Diese setzt sich aus dem Computernamen und dem Instanznamen zusammen, also MeinPC/Instanz. Im Zweifelsfall nutzen Sie das kleine Tool '''RecorderInfo'''. Sie finden es in Ihrer Recorder Installation im Ordner '''Helferlein'''. Starten Sie das Programm mit Doppelklick, wählen Sie {{Taste|Recorder 6 Infos holen}}. Suchen Sie den Eintrag unter Server Name: und kopieren Sie den Inhalt.
 +
 
 +
Bestätigen Sie mit {{Taste|Fertigstellen}}. Die neu erstellte Datenbankverbindung kann jetzt genutzt werden.
 +
 
 +
 
 +
===Einbinden in QGIS===
 +
 
 +
====Schritt 5: Verbindung zu Recorder in QGIS erstellen.====
 +
 
 +
Wechseln Sie nach QGIS.
 +
 
 +
Wählen Sie aus dem Hauptmenü '''Layer → Räumlichen MSSQL Layer hinzufügen'''. Klicken Sie auf '''Neu''' und erstellen Sie eine neue Verbindung mit folgenden Daten:
 +
:'''Name:''' ''Recorder'' (frei wählbar!)
 +
:'''Lieferant/DSN:''' '''Recorder''' (Name der soeben erstellten DSN)
 +
:'''Host:''' (kein Eintrag!)
 +
:'''Datenbank:''' ''NBNData'' (abweichenden Datenbanknamen mit RecorderInfo erfragen)
 +
:'''Vertrauenswürdige Verbindung:''' ausgewählt
 +
:'''Benutzernamen speichern:''' nicht ausgewählt
 +
:'''Passwort speichern:''' nicht ausgewählt
 +
:'''Nur in Metadatentabelle gemetry_columns nachsehen:''' nicht ausgewählt
 +
:'''Auch geometrielose Tabellen anzeigen:''' ausgewählt
 +
:'''Geschätzte Tabellenparameter nutzen:''' nicht ausgewählt
 +
 
 +
Testen Sie die Verbindung ({{Taste|Testen}}) und speichern Sie sie mit {{Taste|OK}}
 +
 
 +
====Schritt 6: Einbinden des Views in QGIS.====
 +
 
 +
Die soeben erstellte Verbindung ist nun verfügbar. Klicken Sie auf {{Taste|Verbinden}}. Die Verbindung zur Datenbank wird hergestellt. QGis zeigt jetzt eine Tabelle aller verfügbaren Tabellen und Views der Recorder Datenbank an, sofern sie Geometrie-Spalten enthalten. Wählen Sie das View '''v_qgis_link''' aus und fügen Sie dieses mit {{Taste|Hinzufügen}} als Layer Ihrem Projekt hinzu.
  
Führen Sie das Script aus. Drücken Sie dazu den Ausführen-Knopf auf der SQL-Editor-Symbolleite, oder wählen Sie Abfrage>Ausführen.
+
====Schritt 7: Arbeiten mit dem Layer====
  
Der Code erstellt ein neues View in Ihrer Recorder Datenbank. Dabei werden aus den Recorder Raumreferenzen der Aufnahmen (Tabelle Sample) Geometrien erzeugt und gleichzeitig Koordinaten von Rasterpunkten der deutschen Rastersysteme in das Zentrum des Rasters verlegt.
+
Nach dem Einbinden in QGIS wird das Layer unter '''Layer''' mit der Bezeichnung '''v_qgis_link''' in QGIS angeführt. Im Kartenfenster sehen Sie jetzt sämtliche Artbeobachtungen Ihrer Recorder-Datenbank. Machen Sie sich mit den Werkzeugen und Optionen von QGIS vertraut, um optimale Ergebnisse für die von Ihnen gewünschte Kartendarstellung zu erhalten.
 +
Sie können beispielsweise nach den Artbeobachtungen zu Buche, ''Fagus sylvatica'' filtern:
 +
*Wählen Sie den Layer mit der Maus aus. Öffnen Sie mit der rechten Maustaste das Kontext Menü, wählen Sie dort '''Filter...'''.
 +
Im Abfragedialog holen Sie sich zunächst alle vorhandenen Sippennamen, indem Sie im Bereich '''Felder''' das Feld '''ACTUAL_NAME''' auswählen und sich danach im Bereich '''Werte''' mit {{Taste|Alle}} die vorhandenen Sippen anzeigen lassen.
  
Schritt 3: DNS erstellen
+
Wählen Sie dann (jeweils mit Doppelklick) unter
Um Qunatum Gis mit dem SQL-Server verbinden zu können, müssen Sie zunächst eine DNS erstellen. Jetzt müssen Sie
+
* Felder:&#160;&#160;&#160;&#160;&#160;&#160;&#160; ACTUAL_NAME
 +
* Operatoren: =
 +
* Werte:&#160;&#160;&#160;&#160;&#160;&#160;&#160; Fagus sylvatica
  
 +
QGIS erstellt den Abfrage- (Filter-)ausdruck für Sie:
 +
"ACTUAL_NAME" = 'Fagus sylvatica'.
 +
Bestätigen Sie Ihren Filterausdruck mit {{Taste|OK}}
  
Wechseln Sie zu Quantum GIS und
+
In der Kartendarstellung werden jetzt ausschließlich Beobachtungen von ''Fagus sylvatica'' angezeigt.

Aktuelle Version vom 2. Januar 2017, 18:14 Uhr

Dieses Tutorial ist zur Zeit in Bearbeitung

QGis oder Quantum Gis ist ein benutzerfreundliches, frei verfügbares und quelloffenes Geoinformationssystem zum Betrachten, Bearbeiten und Erfassen von räumlichen Daten. Seit Erscheinen der Version Dufor 2.0 ist es besonders gut geeignet, Beobachtungsdaten der Recorder-Datenbank in einem GIS-System darzustellen.

Vorausetzung dafür ist, dass die Recorder-Datenbank auf dem Microsoft SQL Server 2008, 2012 oder 2014 eingebunden ist. Dieser kann Geometrie-Daten nutzen und verwalten. Um die Version Ihres SQL Servers zu erfahren, starten Sie Recorder, wählen Sie aus dem Hauptmenü Berichte → Ausführen, im Dialog Gespeicherten Bericht öffnen den Bericht Datenbankchecks → Settings Check Exp. Die erste Zahl unter dem Eintrag SQL Server Version muss mindestens 10 sein (z.B. 10.50.1600.1).

Vorbereitende Arbeiten

Schritt 1: QGIS installieren

Installieren Sie QGIS von der offiziellen Website des Projektes.

Schritt 2: Recorder Datenbank für QGIS optimieren

Um die Recorder-Datenbank effektiv unter QGIS einbinden zu können, müssen Sie mindestens ein zusätzliches View erstellen. Öffnen Sie dazu das SQL Server Management Studio und verbinden Sie sich mit der Datenbank-Instanz, auf der Ihre Recorder Datenbank liegt.

Wählen Sie die Recorder-Datenbank im Objekt-Explorer aus. Starten Sie eine neue Abfrage mit Datei → Neu → Abfrage mit aktueller Verbindung (Strg+N). Kopieren Sie den folgenden Quellcode in das Abfragefenster:

  IF  EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[dbo].[bfn_sample_spatial_ref]') AND type in (N'V'))
  DROP VIEW [dbo].[bfn_sample_spatial_ref]
  
  GO
  SET ANSI_NULLS ON
  GO
  SET QUOTED_IDENTIFIER ON
  GO
  
  DECLARE @SQL as varchar(8000)
  SET @SQL ='SELECT s.SAMPLE_KEY,
    case 
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 8 then lat + 0.00625 
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 7 then lat + 0.0125
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 6 then lat + 0.025
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 4 then lat + 0.05
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 8 then lat + 0.00833333333333333
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 6 then lat + 0.025
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 4 then lat + 0.05
      else lat
    end
    as lat_center,
    case
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 8 then long + 0.01041666666666666
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 7 then long + 0.02083333333333333
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 6 then long + 0.02083333333333333
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 4 then long + 0.08333333333333333
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 8 then long + 0.00833333333333333 
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 6 then long + 0.02083333333333333 
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 4 then long + 0.08333333333333333
      else LONG
    end
    as long_center,
    case
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 8 then geography::Point(lat + 0.00625, long + 0.01041666666666666, 4326) --''qqq''
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 7 then geography::Point(lat + 0.0125,  long + 0.02083333333333333, 4326)  --''qq''
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 6 then geography::Point(lat + 0.025, long + 0.02083333333333333, 4326)  --''q''
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 4 then geography::Point(lat + 0.05, long + 0.08333333333333333, 4326)  --''m''
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 8 then geography::Point(lat + 0.00833333333333333, long + 0.00833333333333333, 4326)  --''qyx''
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 6 then geography::Point(lat + 0.025, long + 0.02083333333333333, 4326)  --''q''
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 4 then geography::Point(lat + 0.05, long + 0.08333333333333333, 4326)  --''m''
      else geography::Point(lat, long, 4326)
    end
    as center_geom,
    case
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 8 and data is null then 1300 --''qqq''
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 7 and data is null then 2600   --''qq''
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 6 and data is null then 5200   --''q''
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 4 and data is null then 10400   --''m''
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 8 and data is null then 1000   --''qyx''
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 6 and data is null then 5200   --''q''
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 4 and data is null then 10400   --''m''
      else dbo.ufn_BfNNumbersFromString(data)
    end
    as usr,
    case
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 8 then ''qqq''
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 7 then ''qq''
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 6 then ''q''
      when Spatial_ref_system = ''QQQ'' and len(spatial_ref) = 4 then  ''m''
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 8 then ''qyx''
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 6 then ''q''
      when Spatial_ref_system = ''QYX'' and len(spatial_ref) = 4 then ''m''
      else ''p''
    end as [rtyp]
    from SAMPLE s 
        LEFT JOIN 
    (SELECT MAX(data) as [data], SAMPLE_KEY 
    FROM SAMPLE_DATA 
    WHERE MEASUREMENT_UNIT_KEY = ''BFNSYS0000000032'' AND MEASUREMENT_QUALIFIER_KEY = ''BFNSYS0000000099'' 
    GROUP BY SAMPLE_KEY) as sd
    ON s.SAMPLE_KEY = sd.SAMPLE_KEY
    WHERE s.LAT IS NOT NULL'

  IF CAST( left(cast(SERVERPROPERTY('productversion') AS varchar),CHARINDEX('.',cast(SERVERPROPERTY('productversion') as varchar))-1)as integer) > 9 
  EXEC('CREATE VIEW [dbo].[bfn_sample_spatial_ref] AS ' + @SQL)
  GO
  
  IF  EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[dbo].[bfn_sample_spatial_ref]') AND type in (N'V'))
  GRANT SELECT ON [dbo].[bfn_sample_spatial_ref] TO PUBLIC
  GO


Führen Sie das Script aus. Drücken Sie dazu den Ausführen-Knopf auf der SQL-Editor-Symbolleite, oder wählen Sie Abfrage → Ausführen.

Der Code erstellt ein neues View in Ihrer Recorder Datenbank. Dabei werden aus den Recorder Raumreferenzen der Aufnahmen Tabelle (Sample) Geometrien erzeugt und gleichzeitig Koordinaten von Rasterpunkten der deutschen Rastersysteme in das Zentrum des Rasters verlegt.

Schritt 3: View mit allen Beobachtungen erstellen.

Erstellen Sie jetzt im SQL Server Management Studio ein View mit allen Beobachtungsdaten Ihrer Datenbank. Achten Sie darauf, dass die Datenbank noch als aktuelle Datenbank ausgewählt ist. Wählen Sie Datei → Neu → Abfrage mit aktueller Verbindung (Strg+N). Kopieren Sie den folgenden Quellcode in das Abfragefenster:

IF  EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[dbo].[v_qgis_link]') AND type in (N'V'))
  DROP VIEW [dbo].[v_qgis_link]
  
  GO
  SET ANSI_NULLS ON
  GO
  SET QUOTED_IDENTIFIER ON
  GO
  
  
    CREATE VIEW [dbo].[v_qgis_link] as
    SELECT bssr.center_geom, bssr.USR, bssr.RTYP, itn.ACTUAL_NAME, 
           s.SAMPLE_REFERENCE, itn.SORT_ORDER, 
           dbo.ufn_BfNReturnVagueDateInteger(S.VAGUE_DATE_END) as DATE_END
    FROM bfn_sample_spatial_ref bssr
    INNER JOIN SAMPLE s
    ON bssr.sample_key = s.SAMPLE_KEY
    JOIN taxon_occurrence toc ON toc.SAMPLE_KEY = s.SAMPLE_KEY
    LEFT JOIN TAXON_DETERMINATION td ON td.TAXON_OCCURRENCE_KEY = toc.TAXON_OCCURRENCE_KEY
    JOIN INDEX_TAXON_NAME itn ON itn.TAXON_LIST_ITEM_KEY = td.TAXON_LIST_ITEM_KEY
    WHERE td.PREFERRED = 1
  
  GO
  
  IF  EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[dbo].[v_qgis_link]') AND type in (N'V'))
  GRANT SELECT ON [dbo].[v_qgis_link] TO PUBLIC

In ihrer Datenbank wird jetzt ein View (eine Datensicht) erstellt, die Beobachtungen mit folgenden Informationen enthält:

  • center_geom [Zentralkoordinate als Geometrieobjekt],
  • USR [Unschärferadius],
  • RTYP [Rastertyp].
  • ACTUAL_NAME [als gültig angenommener Name],
  • SAMPLE_REFERENCE [Raster, sofern bekannt],
  • SORT_ORDER [Sortierreihenfolge der Arten]
  • DATE_END [Aufnahmedatum bzw. -zeitraum, Ende]

Schritt 4: DSN erstellen

Um Quantum GIS mit dem SQL-Server verbinden zu können, müssen Sie zunächst eine DSN (Data Source Name) erstellen.

Windows 7

Klicken Sie im Menü Start auf Systemsteuerung, in der Systemsteuerung auf Verwaltung und dort auf Datenquellen (ODBC); alternativ geben Sie im Startmenü Datenquellen ein und wählen den gefundenen Eintrag Datenquellen (ODBC) aus.

Wählen Sie den Reiter "Benutzer-DSN". Klicken Sie auf [Hinzufügen]. Wählen Sie den Treiber "SQL Server" aus der Treiberliste aus (es sind auch andere möglich, gegebenenfalls müssen Sie das austesten). Vergeben Sie einen Namen für die DSN (z.B. Recorder) und geben Sie unter Server die SQL-Server Instanz Ihrer Recorder-Datenbank an. Diese setzt sich aus dem Computernamen und dem Instanznamen zusammen, also MeinPC/Instanz. Im Zweifelsfall nutzen Sie das kleine Tool RecorderInfo. Sie finden es in Ihrer Recorder Installation im Ordner Helferlein. Starten Sie das Programm mit Doppelklick, wählen Sie Recorder 6 Infos holen. Suchen Sie den Eintrag unter Server Name: und kopieren Sie den Inhalt.

Bestätigen Sie mit Fertigstellen. Die neu erstellte Datenbankverbindung kann jetzt genutzt werden.


Einbinden in QGIS

Schritt 5: Verbindung zu Recorder in QGIS erstellen.

Wechseln Sie nach QGIS.

Wählen Sie aus dem Hauptmenü Layer → Räumlichen MSSQL Layer hinzufügen. Klicken Sie auf Neu und erstellen Sie eine neue Verbindung mit folgenden Daten:

Name: Recorder (frei wählbar!)
Lieferant/DSN: Recorder (Name der soeben erstellten DSN)
Host: (kein Eintrag!)
Datenbank: NBNData (abweichenden Datenbanknamen mit RecorderInfo erfragen)
Vertrauenswürdige Verbindung: ausgewählt
Benutzernamen speichern: nicht ausgewählt
Passwort speichern: nicht ausgewählt
Nur in Metadatentabelle gemetry_columns nachsehen: nicht ausgewählt
Auch geometrielose Tabellen anzeigen: ausgewählt
Geschätzte Tabellenparameter nutzen: nicht ausgewählt

Testen Sie die Verbindung (Testen) und speichern Sie sie mit OK

Schritt 6: Einbinden des Views in QGIS.

Die soeben erstellte Verbindung ist nun verfügbar. Klicken Sie auf Verbinden. Die Verbindung zur Datenbank wird hergestellt. QGis zeigt jetzt eine Tabelle aller verfügbaren Tabellen und Views der Recorder Datenbank an, sofern sie Geometrie-Spalten enthalten. Wählen Sie das View v_qgis_link aus und fügen Sie dieses mit Hinzufügen als Layer Ihrem Projekt hinzu.

Schritt 7: Arbeiten mit dem Layer

Nach dem Einbinden in QGIS wird das Layer unter Layer mit der Bezeichnung v_qgis_link in QGIS angeführt. Im Kartenfenster sehen Sie jetzt sämtliche Artbeobachtungen Ihrer Recorder-Datenbank. Machen Sie sich mit den Werkzeugen und Optionen von QGIS vertraut, um optimale Ergebnisse für die von Ihnen gewünschte Kartendarstellung zu erhalten. Sie können beispielsweise nach den Artbeobachtungen zu Buche, Fagus sylvatica filtern:

  • Wählen Sie den Layer mit der Maus aus. Öffnen Sie mit der rechten Maustaste das Kontext Menü, wählen Sie dort Filter....

Im Abfragedialog holen Sie sich zunächst alle vorhandenen Sippennamen, indem Sie im Bereich Felder das Feld ACTUAL_NAME auswählen und sich danach im Bereich Werte mit Alle die vorhandenen Sippen anzeigen lassen.

Wählen Sie dann (jeweils mit Doppelklick) unter

  • Felder:        ACTUAL_NAME
  • Operatoren: =
  • Werte:        Fagus sylvatica

QGIS erstellt den Abfrage- (Filter-)ausdruck für Sie: "ACTUAL_NAME" = 'Fagus sylvatica'. Bestätigen Sie Ihren Filterausdruck mit OK

In der Kartendarstellung werden jetzt ausschließlich Beobachtungen von Fagus sylvatica angezeigt.