SlideShare a Scribd company logo
1 of 166
MapInfo Professional 12.0
SQL Server 2008R2 / 2012 (Express)
Peter Horsbøll Møller, Senior Systems Engineer
November 2013
Dagsorden - 1
Opsætning af en spatial database så
den kan anvendes fra MapInfo
Professional 12.0
SQL Server 2008R2 / 2012 Express
Kan være enhver spatial database
Kan være MapInfo Pro 10.0 - 12.0
Dagsorden - 2
Anvende en spatial database fra
MapInfo Professional 12.0
SQL Server 2008R2 / 2012 Express
Kan være enhver spatial database
Kan være MapInfo Pro 10.0 - 12.0
Dagsorden - 3
• Vi kommer omkring:
– Oprettelse af databaser, login og brugere
– Oprettelser af tabeller
– Oprettelse af ODBC datakilder
– MapInfos kortkatalog
– Åbning af DBMS tabeller fra MapInfo Professional
– Upload af tabeller til SQL Server
– Editering af tabeller fra MapInfo Professional
– Oprettelse af views
– De spatiale objekter og funktioner i SQL Server
– Oprettelse af Triggers
– Anvendelse af MapBasic mod SQL Server
• Hvis I har konkrete emner, som I ønsker berørt, så giv mig et praj
Forudsætninger
• MapInfo Professional 10, 10.5, 11.0, 11.5 eller 12.0.
– 12.0.2 er anbefalet
• MS SQL Server 2008 R2 eller 2012 Express with tools
– Kan hentes her:
2008: www.microsoft.com/en-us/download/details.aspx?id=23650
2012: www.microsoft.com/en-us/download/details.aspx?id=29062
– Vi skal bruge SQL Server Management Studio
– Brugerrettigheder til at oprette nye databaser, logins og brugere
• kræver enten et SA-login
• eller Administrative rettigheder lokalt på computeren
Introduktion
• Navn og organisation
• Forudsætninger:
– Kendskab til MapInfo Professional
– Kendskab til databaser/SQL Server
– Kenskab til SQL
• Ønsker til denne workshop?
DAG 1
SQL Server Management Studio
Log in på Management konsollen
• Windows Autentication eller ”enhver” SQL Server login
• Men vi har brug for visse rettigheder for at kunne oprette en database
Søge efter en SQL Server instans
• Hvis du ikke kan se din SQL Server
Express instans i listen, kan det
være fordi din SQL Server Browser
service ikke kører på din compter
(eller den computer SQL Server er
installeret på)
• Gå til (Windows) Tjenester og start
SQL Server Browser tjenesten
• Vær opmærksom på at du evt. skal
aktivere tjenesten via Egenskaber
på tjenesten
Server autentifikation
• Højreklik på database-serveren og vælg Properties
• Vælg Security
• Vælg SQL Server and Windows Authentication mode
Oprette databaser, login og brugere
Oprette en database
• Højreklik for at oprette en ny
– Option: ”Quoted Identifiers” sættes til ”On”
Oprette et login og en bruger
• Højreklik for at oprette et nyt login (Security på serveren, ikke på
databasen
Oprette et login og en bruger – General
• Login navn, Kodeord, Standard database
• Login kan også være brugerens Windows brugernavn
Oprette et login og en bruger – Server Roles
• Angiv rolle(r) på database-serveren – ofte kun ”public”
• Læs mere: http://msdn.microsoft.com/en-us/library/ms188659.aspx
Oprette et login og en bruger – User Mapping
• Tilknyt til en (ny) bruger i en database og vælg database rolle(r)
• Læs mere: http://msdn.microsoft.com/en-us/library/ms189121.aspx
Oprette et login og en bruger - Status
• Muligt at ”slukke” for adgang på et senere tidspunkt
Oprette schemas
Hvad er et schema i SQL Server?
• Et schema i SQL Server er en måde at organisere bl.a sine tabeller
• Med schemaer kan man også nemt tildele rettigheder til en række
tabeller, nemlig ved at tildele rettigheder via schemaet i stedet for
direkte på tabellerne
• Schemaer kan være en anden måde at organisere data end via flere
databaser
• Når man tilgår databasen fra MapInfo Professional kan man øverst i
Åbn dialogboksen vælge hvilket schema, man ønsker at se. På denne
måde kan man begrænse det antal tabeller man ser i vinduet med
tabeller.
• OBS: Vær opmærksom på at der skal findes mindst én tabel i schemaet
for at man kan se det fra MapInfo Professional. Det gælder også hvis
man ønsker at bruge Gem kopi som til at gemme tabeller over i
schemaet
Oprette et nyt schema
• Højreklik på mappen Schemas i mappen Security under den database,
du ønsker at oprette schemaet i
• Vælg New Schema...
• Angiv et navn og en ejer
• Sæt evt. også rettigheder
Oprette tabeller
Oprette tabeller
• Højreklik på folderen Tables under din database
• Vælg New Table…
Oprette tabeller – tilføje kolonner
• Skriv navnet på kolonnen og vælg den passende kolonnetype for hver
kolonne. Overvej om man må indsætte NULL-værdier
Oprette tabeller – Properties vinduet
• Mange indstillinger for en ny tabel kan også sætte via Properties
vinduet (Åbn det evt. ved at trykke på F4)
• Du kan her bl.a. sætte:
– Tabellens navn
– Tabellens schema
– Identity kolonnen
Oprette tabeller – datatyper
• Præcise numeriske
– Bigint (MapInfo type: Float)
• -9.223.372.036.854.775.808 – 9.223.372.036.854.775.807
– Int (MapInfo type: Integer)
• -2.147.483.648 – 2.147.483.647
– SmallInt (MapInfo type: SmallInt)
• -32.768 – 32.767
– TinyInt (MapInfo type: SmallInt)
• 0 – 255
– Bit (MapInfo type: Logical)
• 1 or 0
– Decimal / numerical (MapInfo type: Decimal)
• -10^38 +1 – 10^38 –1
Oprette tabeller – datatyper
• Tilnærmede numeriske værdier
– Float (MapInfo type: Float)
– Real (MapInfo type: Float)
• Dato og tid
– Datetime (MapInfo type: Datetime)
• Fra 1. januar 1753 til 31. december 9999 med en præcision på
trehundrededele sekund eller 3,33 milisekund
– Date (MapInfo type: Date)
• Fra 1. januar år 1 til 31. december år 9999
Oprette tabeller – datatyper
• Tekster
– Char (MapInfo type: Char)
• Fastlængde ikke-Unicode data, max. 8.000 tegn
– VarChar (MapInfo type: Char)
• Variabellængde ikke-Unicode data, max. 8.000 tegn
– Text (MapInfo type: Char)
• Variabellængde ikke-Unicode data, max. 2.147.483.647 tegn
• Bemærk: Tekstkolonner større end 254 tegn vil være skrivebeskyttet, når
de åbnes i MapInfo Professional og de vil kun vise de første 254 tegn
Oprette tabeller – datatyper
• Geografiske typer
– Geometry (MapInfo type: Object)
• Kræver at tabellen er registreret i kortkatalog for at MapInfo kan
”se” den, mere om dette senere
– Geography (MapInfo type: Object)
• Kræver at tabellen er registreret i kortkatalog for at MapInfo kan
”se” den, mere om dette senere
Oprette tabeller – overvejelser
• Undgå unicode kolonnetyperne (nchar, nvarchar, ntext), da MapInfo
Professional ikke kan redigere disse
• Undgå at oprette tekst-kolonne større end 254 tegn, da MapInfo
Professional ikke kan redigere disse
• Overvej at navngiv din primære indeks kolonne MI_PRINX. MapInfo
Professional bruger nemlig dette som den primære indeks kolonne i
views.
• Overvej at anvende Identity kolonner i dine tabeller for den primære
indeks kolonne. Dette opdaterer automatisk værdien ved indsættelse af
nye poster (svarer til ”autonummer” i MS Access)
Oprette tabeller – Primær nøgle
• Højreklik på kolonne som skal være den primære nøgle, vælg Set
Primary Key
Oprette tabeller – Identity
• Automatisk
nummering
• Vælg kolonnen og sæt
Is Identity til yes
• Du kan angive
specifikke tilvækst
(increment) og
startværdi (seed)
Gennemse data i tabeller
• Højreklik på den ønskede tabel og vælg
– enten Select Top 100 Rows
– eller Edit Top 200 Rows
• Værdier kan tilpasses via Tools > Options > SQL Server Object
Explorer
Oprette tabeller - navngivning
• Overvej kun at anvende bogstaverne A – Z, numrene 0 – 9 og
understregning (_) ved navngivning af tabeller og kolonner
• SQL Server understøtter dog nationale tegn, mellemrum og andre
specialtegn.
• SQL Server har også en række ord, som man ikke må bruge som f.eks.
tabel- og kolonnenavne, f.eks. BY og PLAN. Se en komplet liste over
reserverede ord her:
– http://technet.microsoft.com/en-us/library/ms189822.aspx
• Skal tabellerne anvendes i MapInfo Professional anbefales det at holde
tabelnavnene under 31 tegn, da det er MapInfo’s begrænsning på tabel-
og kolonnenavne
• Bemærk også at kolonner til tabel- og kolonnenavne i kortkataloget er
begrænset til 32 tegn. Anvender I længere tabel-/kolonnenavne skal
disse ændres.
Oprette tabeller – et par tips
• Du kan kopiere strukturen, eller dele heraf, fra en tabel til en anden ved
at:
– markere de kolonnenavne og -typer, du ønsker at kopiere, i Design
Mode.
– trykke på Ctrl+C for at kopiere dem
– Gå over i Design Mode for den anden tabel og tryk i det øverst
venstre felt
– tryk Ctrl+V for at indsætte de kopierede kolonner
• Du kan også skripte Create kommandoen for en tabel over i et ”Query”
vindue. Du kan så tilpasse denne kommando, f.eks. Tabelnavne, tilføje
flere kolonner og endelig udføre kommandoen. Dette vil oprette en ny
tabel med en struktur lig med – eller delvis lig med – den originale tabel.
• Hvis du ikke kan ændre kolonnetypen, skal du sikre dig at du har slået
dette fra: Prevent saving changes that require table re-creation – mere
om dette under Tips & Tricks på de sidste sider
Oprette en ODBC-datakilde
Data
Data
Oprette en datakilde
• Åbn Select Data Source. Kan tilgås fra Åbn
dialogboksen eller via Filer > Åbn DBMS-
tilslutning.
• Vælg datakildetype
– Filbaseret datakilde
– Maskindatakilde
• Klik på knappen Ny.../New…
• Vælg den ønskede drivertype/databasetype
• Angiv et navn eller filnavn
• Datakilden bliver nu oprettet
Konfigurere en datakilde
• Afhængig af database/driver
MS Access
MS SQL Server
Oprette en datakilde til SQL Server 2008/2012
• Åbn Select Data Source. Kan tilgås fra
Åbn dialogboksen eller via Filer > Åbn
DBMS-tilslutning.
• Vælg datakildetype
– Filbaseret datakilde
– Maskindatakilde
• Klik på knappen Ny.../New…
• Vælg Bruger- eller Systemdatakilde
• Vælg drivertype/databasetype:
– SQL Server Native Client 10.0 (2008)
– SQL Server Native Client 11.0 (2012)
• Datakilden bliver nu oprettet
Konfiguration af SQL Server 2008 datakilde
• Indtast navn, beskrivelse og server
• Vælg logintype (ofte Windows
Authentication) og indtast brugernavn
og kodeord, hvis du valgte SQL Server
Authentication
• Angiv standard database – altid!
• Brug ”ANSI Quoted Identifiers”
• Andre indstillinger
• Afprøv datakilden
Åbne en DBMS-tilslutning
• Kan gøres via Filer > Åbn, Åbn DBMS-
tilslutning eller via Filer > Åbn DBMS-
tilslutning
• Når du har valgt tilslutningn og skal
indtaste dine login-informationer i SQL
Server Login dialogboksen, kan du også
vælge en anden database
• Klik på knappen Options >> for at se flere
indstillinger
• Vælg en anden database hvis du ønsker
det
ODBC-datakilder på 64 bit operativsystem
• Tilgår du Datakilder via kontrolpanelet: Administrative værktøjer >
Datakilder (ODBC) kan du på et 64 bit operativsystem komme til at se
på 64bit datakilder
• MapInfo Professional 12.0 er et 32 bit program og anvender derfor også
32 bit datakilder.
• Højreklik på ”Datakilder (ODBC)” og vælg
Egenskaber, så får du denne dialogboks
• Target/Destination bestemmer om du ser 32
bit eller 64 bit datakilder:
• 32 bit:
• %windir%system32odbcad32.exe
• 64 bit:
• %windir%SysWoW64odbcad32.exe
• Læs mere:
• http://support.microsoft.com/kb/942976
MARS
• Multiple Active Result Sets (MARS) – flere aktive resultatsæt
• Understøttet af
– MapInfo Professional 10.5.2 og nyere
– SQLServer 2005, 2008 og 2012
• MapInfo Professional 10.5.2 og nyere (den danske version dog først fra
v11.0) tilføjer automatisk denne indstillinger til tilslutningn:
– “MARS Connection=true”
• Forbedret performance ved åbning af en tabel, især for Direkte med
Cache. Adgangen kan være 5-10 gange hurtigere.
• Det er ikke nemt at tilføje denne indstillinger til en ODBC-datakilde, da
forskellige programmer kan bruge den samme datakilde og ikke alle
programmer understøtter MARS.
• Du kan dog tilføje denne indstilling via Registreringsdatabasen eller fil-
datakilden, se næste side
MARS på datakilden
• Anvender du en dansk udgave af MapInfo Professional 10.5.2 kan med
fordel aktivere MARS direkte på datakilden
• I en filbaseret datakilde åbnes datakilden i en tekstfil og linjen
”MARS_Connection=Yes” tilføjes
• I en maskin-datakilde tilføjes nøglen
”MARS_Connection” af typen
Streng/Tekst til datakilden via
regedit. Nøglens værdi sættes til
”Yes”
• OBS: Brug ikke denne
fremgangsmåde hvis
andre programmer
anvender samme
datakilde
MapInfo Pro: DBMS-grundindstillinger
• Åbn tilslutning under opstart
• Tabel-projektionen
anvendes også når du gør
en DBMS-tabel
kortlægningsklar
• Standard placering af eksterne tabeller
MapInfo’s kortkatalog: MapInfo_MapCatalog
Kortkataloget
• Kortkataloget (MapInfo.MapInfo_MapCatalog) beskriver geografiske
tabeller i en database med værdier som:
– Type af spatial tabel, for eksempel XY, SpatialWare, Oracle, SQL
Server, PostgreSQL/PostGIS, mm.
– Koordinatsystem
– Dataafgrænsninger
– Symbol, standard og rækkevis
– Standardvisning
• Kortkatalog skal findes én gang i en
database med geografiske data, som
skal tilgås fra MapInfo Professional
Kortkatalog – Spatialtype
• Dataopbevaring/database
– 1 : MapInfo Code, XY med MapInfo-indeks( 3 kolonner)
– 4 : XY gemt i to kolonner
– 13: Oracle Spatial
– 14: MapInfo SpatialWare for MS SQL Server
– 17: SQL Server 2008 Geometry
– 18: SQL Server 2008 Geography
– 19: PostgreSQL/PostGIS
• Objekttyper
– .0: Kun punkter
– .1: Kun linjer/polylinjer
– .2: Kun regioner/polygoner
– .3: Alle objekttyper
Oprette kortkataloget
• Du kan også oprette kortkataloget
– Med EasyLoader (MapBasic værktøj)
– Med DBMS Catalog (MapBasic værktøj)
– direkte i databasen, manuelt via brugerfladen
– direkte i databasen, via SQL
• Brugeren der opretter kortkataloget har brug for en ”sysadmin”
serverrolle.
• Hvis du opretter kortkataloget med EasyLoader skal du sikre dig at alle
tilslutninger til databasen er lukket i MapInfo Professional. Ellers kan du
risikere at have problemer med rækkevis-stil, når du senere vil gøre en
DBMS-tabel kortlægningsklar.
Oprette kortkataloget – EasyLoader
• Start EasyLoader fra Værktøjsstyringen
• Kør EasyLoader fra Værktøjsmenuen
• Åbn en tilslutning til databasen via ODBC-
knappen. Du skal have DBA-rettigheder
• Tryk på Kortkatalog-knappen for at
oprette kortkataloget
• Du skulle nu gerne få at vide at
kortkataloget er blevet oprettet
• Hvis kortkataloget allerede findes, vil du
se en liste med tabeller allerede
registreret i kortkataloget. Du vil kunne
fjerne en eller flere af disse, hvis du
ønsker det
Oprette kortkataloget – DBMS Katalog
• Kør værktøjet DBMS Katalog fra Værktøjer >
Værktøjsstyring.
• Vælg Værktøjer > DBMS Katalog > DBMS
Katalog og tryk på Opret katalog.
• Vælg datakilden, som peger på databasen,
hvos du ønsker at oprette kortkataloget – du
skal have DBA-rettigheder
• Kortkataloget vil nu findes i databasen
Gøre en DBMS-tabel kortlægningsklar
Gøre en DBMS-tabel kortlægningsklar
• Dette vil tilføje en post til kortkatalog, som beskriver hvorledes MapInfo
Professional skal vise den pågældende tabel i et kort
• Du skal angive hvor de geografiske data skal læses, hvilket
koordinatsystem, du ønsker at bruge og hvilken stil de geografiske data
skal vises med når de vises i MapInfo Professional
Vælg database og tabel
• Vælg Tabel > Juster > Gør DBMS-
tabel kortlægningsklar
• Du kan vælge en allerede åben
DBMS-tilslutning via listen med
Filtyper eller åbne en ny tilslutning via
knappen Åbn DBMS-tilslutning i
øverste højre hjørne af dialogboksen
• Vælg den tabel, som du ønsker at
gøre kortlægningsklar og tryk på Åbn
• Bemærk at du kun ser de tabeller,
som ikke allerede er registreret i
kortkataloget
Indstillinger for den kortlægningsklare tabel
• Angiv nu hvordan tabellen skal gøres kortlægningsklar:
– Type
• X og Y koordinater
• Oracle Spatial
• SQL Server Geometri
• SQL Server Geografi
• . . .
– Stil
• Rækkevis
– Symbol
– Koordinatsystem
• Kan eventuelt være skrivebeskyttet
– Tabelgrænser: Vælg data. For en tom tabel vælges koordinatsystem
• Tryk på OK
• Bemærk at vagmulighederne afhænger af den valgte tabel
• Vælg nu den næste tabel, som skal gøres kortlægningsklar
• Annuller dialogboksen Vælg DBMS-tabel, hvis du ikke ønsker at gøre
flere tabeller kortlægningsklare.
Gøre en DBMS-table kortlægningsklar - Notater
• Du skal ikke gøre dette hvis du har
– Uploadet tabellen med EasyLoader
– Gemt tabeller i databasen via Gem som i MapInfo Professional
• Du kan også udføre denne handling
– direkte in SQL Server
– Via MapBasic enten via et arbejdsområde, MapBasic-vinduet eller via
en MapBasic applikation.
– Brug denne MapBasic kommando for at gøre en DBMS-tabel
kortlægningsklar:
• Server ConnectionNumber Create Map . . .
Fjerne en tabel fra kortkataloget
• Hvis du har behov for at fjerne en tabel fra kortkataloget, findes der en
række måder at gøre dette:
• Slet posten manuelt via SQL Server Management Studio
• eller
... brug EasyLoader til at
fjerne tabellen via
knappen Kortkatalog
... brug DBMS Katalog til
at fjerne tabellen via
knappen Slet indgang
Åbne DBMS-tabeller i MapInfo Professional
Åbne en DBMS-tabel
• Vælg Filer > Åbn
• Tryk på Åbn DBMS-tilslutning
eller vælg den allerede åbne
tilslutning i listen med Filtyper
• Vælg de ønskede tabeller
• Tilpas eventuelt indstillingerne for
de enkelte tabeller
• Vælg metode for åbning
• Tryk på OK
Åbne en DBMS-tabel før MapInfo Pro v12
• Vælg Filer > Åbn
• Tryk på Åbn DBMS-tilslutning
eller vælg den allerede åbne
tilslutning i listen med Filtyper
• Vælg den ønskede tabel og tryk
på Åbn.
Åbne en DBMS-tabel
• Specificer:
– Kolonner
– Rækker
– Adgangstype
• Sammenkædet
• Direkte med Cache
• Direkte uden Cache
– Hvor tab-filen skal gemmes
på disken
• Det er kun første gang at du åbner en DBMS-tabel at du skal angive
hvilke data du ønsker at åbne
• Efterfølgende kan du genåbne disse data ved at åbne tab-filen
• Tab- filen indeholder all nødvendig information
– Tabelstruktur
– tilslutningsinformation
– Kan også indeholde brugernavn og kodeord
• Hvis tabellen blev oprettet som “sammenkædet”, bør du overveje at
opdatere tabellen.
• Hvis tabellen blev oprettet som ”direkte”, vil MapInfo Professional læse
de nyeste data fra databasen
Genåbne en DBMS-tabel
Værktøjet Tabelstyring
• Lader dig se tilslutningsstreng og forespørgsel fra en DBMS-tabel
• Disse gemmes som metadata i tab-filen
Metadata sektion - Sammenkædet
!table
!version 400
!charset WindowsLatin1
Definition Table
Type LINKED Charset "WindowsLatin1"
Fields 4
MI_PRINX Integer ReadOnly ;
PLACENAME Char (50) ;
DESCRIPTION Char (250) ;
TYPE Char (20) ;
begin_metadata
"DATALINK" = ""
"DATALINKConnectionString" = "DSN=GIS2;Description=SQL Server 2008
GIS database;UID=AdminUser;APP=MapInfo
Professional®;WSID=DKMP12948"
"DATALINKQuery" = "select ""MI_PRINX"", ""PLACENAME"",
""DESCRIPTION"", ""TYPE"", ""OBJECT"" from
""GIS"".""dbo"".""PointsOfInterest"""
"IsReadOnly" = "FALSE"
end_metadata
Metadata sektion - Direkte
!table
!version 500
!charset WindowsLatin1
Definition Table
Type ODBC
begin_metadata
"IsReadOnly" = "FALSE"
"DATALINK" = ""
"DATALINKQuery" = "Select * From
""GIS"".""dbo"".""PointsOfInterest"""
"DATALINKConnectionString" = "DSN=GIS2;Description=SQL Server 2008
GIS database;UID=AdminUser;APP=MapInfo
Professional®;WSID=DKMP12948"
"DATALINKToolKit" = "ODBC"
"CACHE" = "ON"
"MBRSEARCH" = "ON"
end_metadata
MapInfo Pro: Sammenkædet kontra Direkte
Sammenkædet kontra Direkte - I
• Sammenkædet
– Data bliver kopieret til MapInfo tabellen, når tabellen oprettes og når
den opdateres
– Adgang til databasen er kun nødvendig, når du gemmer eller
opdaterer tabellen
-> At arbejde uden tilslutning og lange transaktioner er understøttet
– Hastigheden er lige så god som en normal MapInfo tabel, når først
data er hentet
– Data kan tilgås skrivebeskyttet hvis der ikke findes en primær nøgle
– Hvis du bruger en forespørgsel til kun at hente de nødvendige data,
vil forbedre hastigheden ved download. Forespørgslen kan skabes
via Rækkefilter, kolonnefilte rog Ekspert dialogboksene
– Data hentes ned til samme placering som tab-filen
– Duplikerede data
Sammenkædet kontra Direkte - II
• Direkte med og uden cache
– Åbning er tabellerne første gang kan være hurtigere end
sammenkædet – afhængig af zoomniveaue i kortvinduet
– En “vis hele lager” eller zoom ud til hele visningen vil hente alle
poster fra tabellen
– Data skal have en primær nøgle
– Du skal altid have en åben tilslutning til databasen
Sammenkædet kontra Direkte - III
• Direkte uden cache
– MapInfo Professional læser “altid” direkte fra databasen
– Ethvert optegning, gennemse eller udvælgelse kan have en negativ
effekt på performance
– Data genlæses fra database-serveren ved et hvert opslag
Sammenkædet kontra Direkte – IV
• Direkte med cache
– Anvender en midlertidig cache
• 9.5.0 og tidligere:
– Tabel i hukommelsen, store tabeller kan fejle eller være
langsomme
– Cache gælder kun for et kortudsnit. Hvis du zoomer/panorerer
udenfor det forrige kortudsnit, læses data fra databasen igen
• 9.5.1 og nyere:
– MapInfo tabel gemt i en temporær fil
– Cachen er progressiv, data bevares i cachen i den aktuelle
session og cachen vokser løbende
– Data gemmes i cachen efterhånden som data indlæses fra
databasen. Dermed vil efterfølgende adgang til de samme data blive
hurtigere
– Cachen nulstilles når tabellen lukkes
Sammenkædet kontra Direkte – Konklusioner?
• Brug kun “direkte uden cache” når
– Data ændres hvert minut eller hurtigere
• Brug ”direkte med cache” når
– Tabellen er meget stor og du ikke kan filtrere via en forspørgsel
– Dine data ændres løbende, f.eks. dagligt
• Bruge sammenkædet når
– Dine data er statiske og kun ændres en gang hver uge/måned/år
– Performance er vigtig
– Du skal laver større analyser på dine data, f.eks. SQL-forespørgsler
Linked kontra Live – Konklusioner?
• Hvis du har en meget lille datamængde i din tabel, spiller det næppe
den store roller om du anvender direkte eller sammenkædet
• Med ”direkte” tabeller sikrer du dig at brugerne ”logger på” for at tilgå
data.
• Hvis du anvender ”direkte” tabeller, anbefaler vi at du tilgår dine tabeller
via et arbejdsområde med zoomniveauer, som forhindrer at unødvendig
data hentes
• Understøttelse af MARS har forbedret anvendelse af Direkte med
Cache
Lidt snak om performance, baggrund
• MapInfo Professional 11.0.3 kører på den lokale computer
• SQL Server 2008 Express kører på den lokale computer
• 17 tabeller i en SQL Server database, 250 MB i tab-filer
• 5 tabeller med punkter
– mellem 23.000 og 480.000 punkter pr. tabel, totalt 759.100 punkter
• 4 tabeller med polylinjer
– mellem 800 og 12.500 polylinjer pr tabel, totalt 48.100 polylinjer
– mellem 23.400 og 480.700 knuder pr tabel, totalt 653.900 knuder
• 8 tabeller med regioner
– mellem 1 og 179.800 regioner pr tabel, totalt 238.000 regioner
– mellem 10.900 og 1.303.800 knuder pr tabel, totalt 2.147.500 knuder
Lidt snak om performance, nogle tal
• Hente data fra alle tabeller ned i sammenkædede tabeller i et
kortvindue:
– 38 sekunder
• Hente data fra alle tabeller ned i direkte tabeller med cache i et
kortvindue uden zoomniveauer:
– Zoom: 500 m: 4 sekunder
– Zoom: 1000 m: 5 sekunder
– Zoom: 2500 m: 12 sekunder
– Zoom: 5000 m: 37 sekunder
• Åbne alle tabeller via et arbejdsområde med zoomniveauer:
– Sammenkædet: 0-1 sekund, + 1-2 sekunder til optegning af kort
– Direkte med cache: 1-2 sekund + 2-4 sekunder til optegning af kort
Opret ny tabel
Opret en ny tabel via MapInfo Professional
• Du kan oprette en tabel i SQL Server direkte
fra MapInfo Professional.
• MapInfo Professional tilføjer atuomatisk denne
nye tabel til kortkataloget i databasen.
• Vælg Filer > Ny...
• Vælg det ønskede i dialogboksen Ny tabel og
tryk på knappen Opret...
• Tilføj kolonner via dialogboksen Ny
tabelstruktur og tryk på knappen Opret...
Opret en ny tabel via MapInfo Professional
• Vælg datakilden i listen Gem som
type eller åbn en ny tilslutning via
knappen Åbn DBMS-tilslutning
• Indtast nu et navn på din nye tabel
i databasen og sikre dig at det
korrekte schema er valgt
• Tryk på knappen Gem for at
gemme tabellen
Opret en ny tabel via MapInfo Professional
• Nu skal du angive hvorledes denne
database-tabel skal åbnes i MapInfo
Professional
• Og angive om MapInfo Professional skal
oprette en primær indekskolonne og hvad
navnet skal være på denne
• Og hvordan de geografiske data skal
gemmes
• Og hvordan stilen skal håndteres
• Tryk på OK for at oprette og åbne denne
nye tabel i MapInfo Professional
DAG 2
Forespørgsler ved åbning af DBMS-tabeller
Forespørgsler – Hvornår udføres de?
• Sammenkædet
– Forespørgslen udføres når
• tabellen åbnes første gang
• tabellen opdateres
• Direkte med cache
– Forespørgslen udføres når
• Tabellen tilføjes til et kort (eller et listevindue)
• Du zoomer eller panorerer i kortet
• Direkte uden cache
– Forespørgslen udføres når
• Tabellen tilføjes til et kort (eller et listevindue)
• Du zoomer eller panorerer i kortet
• Du klikker i kortet med vælg-værktøjet
• Du klikker i kortet med info-værktøjet
• …
Forespørgsler – Rækkefiltrering
• Du kan angive hvilke poster, du ønsker at hente fra databasen
• Ved hjælp af attributter
• Ved hjælp af geografi
• Værdien af Current_Mapper og Selection er statiske og opdateres ikke
med nye værdier, når tabellen opdateres.
“Selection” er kun tilgængelig hvis der er
en aktiv udvælgelse
“Current_Mapper” er kun tilgængelig hvis
der er et kort aktivt
“Object” er kun tilgængelig for
kortlægningsklare tabeller
“Like” og “not like” er kun tilgængelige for
tekst-kolonner
Brug ikke ”” omkring tekstværdien!
Forespørgsler - Ekspert
• Skriv dine egne SQL-udtryk
• Syntaksen afhænger af SQL dialekten i databasen
• MapInfo Professional vil “oversætte” nogle specifikke udtryk når
forespørgslen sendes til databasen:
– Object
– Within
– Selection
– Current_Mapper
– …
• Du kan gemme og indlæse forespørgsler via de to knapper på højre
side i dialogboksen
Forespørge på datoer via Eksport-dialogboksen
• Du kan f.eks. anvende ekspert-dialogboksen til at forespørge på datoer
• Brug følgende udtryk til at konvertere en tekst til en dato:
– Convert(date, ‘ddmmåååå’, 112), hvor ”ddmmåååå” erstattes af den
ønskede dato
Metadata for geografisk forespørgsel
!table
!version 650
!charset WindowsLatin1
Definition Table
Type LINKED Charset "WindowsLatin1"
Fields 3
MI_PRINX Integer ReadOnly ;
NAVN Char (50) ;
TYPE Char (50) ;
begin_metadata
"IsReadOnly" = "FALSE“
"DATALINK" = ""
"DATALINKConnectionString" = "DSN=GIS;MARS_Connection=Yes"
"DATALINKQuery" = "select ""MI_PRINX"", ""NAVN"", ""TYPE"", ""OBJECT"" from
""GIS"".""dbo"".""POI"" where (OBJECT within Rectangle(
628163.45078508,6112409.85175394,720526.19639343,6186305.28363101))"
"DATALINKSpatialObj" = "ST_Spatial(HG_Box(ST_Point(628163.451003735300,
6186305.285449981700),ST_Point(720526.200186016970,6112409.856650807900))
,ST_Point(674344.821471954000,6149357.566051412400))"
end_metadata
Uploade tabeller til SQL Server
EasyLoader
EasyLoader …
• … leveres med MapInfo Professional. Programmet kan også hentes på
vores hjemmeside
• … er et selvstændigt program, som kan køres udenfor MapInfo
Professional
• … er et Windows-program, men kan forbinde sig til databaser, der kører
på andre operativsystemer
• … kan køres i batch-mode fra
– kommandoprompt
– Bat-fil
– program
Uploade eksisterende data med EasyLoader
• EasyLoader lader dig uploade eksisterende data til en database
– Oracle Locator/Spatial
– MapInfo SpatialWare
– SQL Server2008 Spatial
– PostgreSQL/PostGIS
– MS Access, XY-koordinater
• Vælg en eller flere tabeller, der skal uploades
• Angiv hvorledes de skal uploades
• Kan oprette kortkataloget
• Kan fjerne tabeller fra kortkataloget
• Kortkataloget opdateres
EasyLoader indstillinger
• Indstillinger
– Geometri kontra Geografi
– Schema
– Giv “public” adgang til tabellerne
• OBS: Det giver ”public”
skriverettigheder til tabellen
– Opret geografisk indeks i databasen
– Opret ID kolonne som Identity
– Konverter Dato og Tid koloner til
DatoTid
– Angiv rækkevis stil
– Opret indeks på andre kolonner
Tabelnavne og database-tabelnavne
MapInfo tabeller
• Adresser
• Bygninger
• Byflade
• Vejmidter
• Kommunegrænsen
• Matrikler
• Kommunale_grunde
Database-tabelnavne
→ Adresser
→ Bygninger
→ Byflader
→ Vejmidter
→ Kommunegraenser
→ Matrikler
→ Kommunale_Grunde
EasyLoader kommandolinje: A - F
• /A Tilføj alle tabeller til samme servertabel
– EasyLoader.exe /A
• /B Schemanavn
– EasyLoader.exe /B GIS
• /C Opret indeks for alle lokalt indekserede kolonner
– EasyLoader.exe /C
• /D Mappe til lokale MapInfo tabeller til åbning af data fra databasen
– EasyLoader.exe /D C:Tables
• /E Eksklusiv bruger af tabellen
– EasyLoader.exe /E
• /F Navn på logfil
– EasyLoader.exe /F ez_log.log
EasyLoader kommandolinje: G - O
• /G Giv “public” adgang til tabeller
– EasyLoader.exe /G
• /I Opret IKKE geografisk indeks
– EasyLoader.exe /I
• /K Opret “Identity” kolonne i SQL Server
– EasyLoader.exe /K
• /L Filnavn på fil med liste over MapInfo tabeller
– EasyLoader.exe /L C:tabfiles.txt
Eksempel på indhold i filen:
D:DataAdresser.tab;Adresser
D:DataBygninger.tab;Bygninger
• /M Geografi gemt som koordinater {MICODE | XY}
– EasyLoader.exe /M XY
• /O Tilslutningsstreng til Oracle
– EasyLoader.exe /O user_name/password@server_name
EasyLoader kommandolinje: P - T
• /P { A | C | R } Tilføj (A) / Opret (C) / Erstat (R)
– EasyLoader.exe /P C
• /Q Afslut EasyLoader efter udførsel
– EasyLoader.exe /Q
• /R Overskriv tabel i databasen
– EasyLoader.exe /R
• /S Tilslutningsstreng
– EasyLoader.exe /S DSN=MyDataSource;UID=AdminUser;PWD=Admin
– EasyLoader.exe /S UID=MyId;DATABASE=MyDB;HOST=MyServer;
SERVER=MyServer_tli;SERVICE=sqlexec;PROTOCOL=onsoctcp
• /T MapInfo tablenavn;Databasetabelnavn;Rækkeinterval
!! Brug ikke anførselstegn (””)
– EasyLoader.exe /T c:dataCities.tab;Cities;1,500
EasyLoader kommandolinje: U - Z
• /U Opret IKKE et primært indeks
– EasyLoader.exe /U
• /X Gem interval
– EasyLoader.exe /X 1000
• /Y Navn på rækkevis stil kolonne
– EasyLoader.exe /Y STYLE
– EasyLoader.exe /Y NO_STYLE
• /Z Brug altid Geometri
– EasyLoader.exe /Z
Upload via Gem kopi som
• Fra MapInfo Professional can du gemme din tabel direkte over i en
database via Filer > Gem kopi som...
• Sørg for at vælge den ønskede database-tilslutning i Save as type listen
• Indtast navnet på servertabellen og vælg det ønskede schema
• Angiv efterfølgende navn på lokal tabel som peger på den nye tabel i
databasen (via Direkte tilslutning)
• Gem kopi som tilføjer automatisk:
– MI_PRINX
– MI_STYLE
MapBasic syntaks for Save as
• MapBasic syntaksen for at gemme en tabel i en database ser således
ud:
Commit Table AV97_W
As "C:DBMSBuildings_Rotterdam.tab"
Type ODBC Connection 1
Table """dbo""."“Buildings_SAS"""
Type SQLServerSpatial Geometry
ConvertDateTime ON Interactive
• Nogle af parametrene er frivillige
Dato-kolonner
• Du kan risikere denne fejl:
• Den kan skyldes at året er udenfor SQL Serveren interval for år i
DateTime-formatet (1753 til 9999)
• Du kan finde disse datoer med denne forespørgsel:
Select * from MIN_TABEL
Where not Year(DATO_KOLONNE) between 1753 and 9999
into Selection
– hvor ”DATO_KOLONNE” er en Dato-kolonne i MapInfo
Geografiske datafejl
• Der kan være problemer med visse objekter i MapInfo tabeller. Det kan
derfor være en god ide at køre nedenstående forespørgsler for at finde
eventuelle oplagte problemer:
• Finder flader med et areal under 1 kvm
Select * From MIN_TABEL
Where Str$(ObjectInfo(OBJ, 1)) In (”7”, ”8”, ”9”)
Into __FLADER
Select * From __FLADER
Where CartesianArea(OBJ, ”sq m”) < 1
Into __MULIGE_FEJL_FLADER
• Finder linære objekter med et længde under 1 m
Select * From MIN_TABEL
Where Str$(ObjectInfo(OBJ, 1)) In (”3”, ”4”)
Into __LINJER
Select * From __ LINJER
Where CartesianObjectLen(OBJ, ”m”) < 1
Into __MULIGE_FEJL_LINJER
Redigere i tabeller fra SQL Server
Redigere
• Tabellen i databasen skal have en primær indeks kolonne
– I et view skal denne kolonne hedde MI_PRINX
• Du kan redigere data med et hvert værktøj i MapInfo Professional
• Når du redigerer koordinater på en XY-koordinat table, bliver
koordinaterne opdateret i kolonnerne med X og Y-koordinater i
database-tabellen
• Hvis du ændrer stilen på en tabel, med rækkevis stil aktiveret, gemmes
stilen i kolonnen med stile, ofte navngivet ”MI_STYLE”. På andre
tabellen vil ændringer af stilen ikke blive fastholdt, når du opdaterer
tabellen
Redigering – Flere samtidige brugere
• Hvis flere brugere skal redigere den samme tabel i SQL Server, skal de
ikke tilgå denne tabel via den samme fysiske fil på harddisken.
• Hvis de gør dette, vil kun en bruger kunne redigere tabellen ad gangen
– de øvrige brugere vil blive forhindret i at redigere så snart den første
brugere begynder at redigere.
• De skal altså tilgå databasen via hver deres lokale kopi af en MapInfo
tabel. Den kan være såvel sammenkædet som direkte
Gemme
• Tryk på Gem tabel for at gemme ikke gemte ændringer i en
DBMS tabel
• Når ændringer gemmes til databasen, undersøger MapInfo om
posten der er blevet ændret, er blevet ændret i databasen efter
den blev læst derfra. Hvis det er tilfældet bliver du præsenteret
for en dialog, hvor du skal løse denne konflikt
• Gemme ændringer lokalt i (kun for sammenkædede tabeller)
kan gøres ved blot at lukke tabellen. MapInfo vil så spørge dig
hvad der skal ske med de ikke-gemte ændringer:
 Gem ændringer i MapInfo-Tabel
– Gem ændringer på server
– Fortryd ændringer
Løs konflikter i MapInfo Pro
• Hvis en tabel er blevet ændret i databasen, når du gemmer ændringer vil
MapInfo præsenterer brugeren for en Løs konflikt dialogboks som vist
• Du kan her se hvilke data/kolonner, der er blevet ændret
• Du kan se den originale database version, den aktuelle MapInfo version og
den aktuelle database version
• Du kan vælge hvad der skal beholdes og hvad der skal ændres –
kolonnevis
• Du kan her se at kolonnen
PANDSTATUS er ændret og til hvad.
• Du kan også se at geografien (object)
er blevet ændret. Det er dog svært at
se på hvilken måde den er ændret
Opdatere sammenkædede tabeller
Opdatere
• Genindlæse data fra databasen kan gøres via Tabel > Juster > Opdater
DBMS-Tabel...
• Opdatere en DBMS-tabel
– Undersøger ændringer i databasen
– Anvender forespørgslen. Bemærk at disse betingelser er statiske.
– Hvis du har angivet en forespørgsel med brug af aktuelt kort eller
aktuel udvælgelse, vil den originale værdi igen blive anvendt. For at
at angive en ny værdi, f.eks. Et nyt kortudsnit, er du nødt til at
genåbne tabellen fra databasen og her angive den nye betingelse.
• MapBasic syntaks: Server Refresh name_of_table
Opdatere DBMS-tabeller via et arbejdsområde
!Workspace
!Version 950
!Charset WindowsLatin1
Dim nConn As Integer
nConn = Server_Connect( "ODBC", "DSN=GIS;UID=EditUser;PWD=Edit" )
Print "Åbnet tilslutning som nr: " + nConn
Print "Åbner nu tabellerne..."
Open Table "D:3. demodbmsByflade.tab" Interactive
Map From Byflade
Print "Opdaterer nu DBMS-tabellerne..."
Server Refresh Byflade
Close Table Byflade
Print "Så er vi færdige"
Server nConn Disconnect
Undim nConn
DAG 3
MapInfo tabeller kontra tabeller i SQL Server
MapInfo tabeller kontra tabeller i SQL Server
• Der er en række forskelle mellem MapInfos flade filer og opbevaring af
data i SQL Server
– Flere programmer kan tilgå data, ikke kun MapInfo software
– Flerbruger editering
– Alle fordelene ved relationelle databaser: relationer, views,
sikkerhed, triggers mm.
• Når data opbevares i MapInfos flade filer, skal en applikation håndtere
elementer som
– Tidsstempling ved ændring af data
– Holde styr på historiske versioner af data
– mm.
• Når data opbevares i databasen, kan databasen varetage disse ting for
alle programmer, der måtte tilgå data.
Oprette views i SQL Server
Hvad er et view?
• Et view kan betragtes som en måde at se på data
• Med et view kan man begrænse antallet af kolonner eller/og antallet af
poster, man ser.
• Med et view kan man også sammenstille flere kolonner til én kolonne.
F.eks. kan man sammensætte VEJNAVN, HUSNR og
HUSNR_BOGSTAV til en ADRESSE-kolonne
• Man kan også bruge views til at berige et tabel med data fra en anden
tabel, f.eks. overføre vejnavnet fra en vejnavnetabel til en tabel med
adresser. Dette gøres ofte via et join, en sammenkædning, af tabeller.
Du kan gøre dette enten på alfanmeriske eller geogratisk attributter.
• Et view kan også sammensætte flere tabeller til en
Oprette views i SQL Server – New view, tables
• Højreklik på Views mappen og vælg New View…
• Vælg den eller de tabellern som skal indgå i viewet fra Add Table
dialogboksen
Oprette views i SQL Server – joins
• Træk kolonnen fra den første tabel over til kolonnen fra den anden tabel
for at markere hvad de skal knytte de to tabeller sammen
• Bemærk at dette også skrives i SQL vinduet nederst
Oprette views i SQL Server – kolonner
• Sæt nu flueben ved de kolonner, som du ønsker at medtage i viewet
• Du kan omdøbe kolonnerne (give dem et alias) via Alias feltet
Oprette views i SQL Server - test
• Afprøv viewet via knappen Execute SQL, Ctrl + R eller F5
• Kontroller resultatet i listevinduet nederst
Oprette views i SQL Server - gem
• Tryk nu på knappen Save eller Ctrl + S og navgiv dit view
• Overvej at ”prefixe” dit view med f.eks. ”view”, ”vw” eller lignende
Oprette views i SQL Server – kortlægningsklar
• Hvis viewet skal vises i et kortvindue i MapInfo Professional, skal du
gøre det kortlægningsklart (registrere det i kortkataloget) via Tabel >
Juster > Gør DBMS-tabel kortlægningsklar
• Du kan også manuelt tilføje viewet til kortkataloget, hvis du kender alle
parametrene
• Du kan også kopiere posten med den grundlæggende tabel i
kortkatalog, indsætte denne igen og ændre tabelnavnet til navnet på
viewet
Bedre performance med views
• Opretter du views hvor du også ønsker at man skal kunne finde
specifikke poster lynhurtigt, kan det være en fordel at indeksere dine
views
• For at kunne indeksere dine views skal de dog være koblet sammen
med de bagvedliggende data, det kalder man SCHEMABINDING
• Derudover skal du også lave et entydigt grupperet indeks (unique
clustered index) før du kan indeksere andre kolonner
• Nu kan du indeksere dine kolonner, f.eks. dit søgefelt med adresser
eller lignende.
• Læs mere her:
– http://en.wikipedia.org/wiki/Materialized_view
– http://msdn.microsoft.com/en-us/library/dd171921.aspx
– http://www.mssqltips.com/sqlservertip/1610/sql-server-schema-
binding-and-indexed-views/
SCHEMABINDING
• Højreklik på dit view og vælg Scritp View As > Alter To > New Query
Window
• Tilføj ”WITH SCHEMABINDING” som vist nedenfor
• Tryk F5 eller vælg Execute-knappen for at ændre dit view
Entydigt grupperet indeks
• Højreklik på Index mappen under dit view og vælg Create New....
• Angiv et navn, f.eks. ”PK_” + navnet på dit view
• Vælg din primære indeks kolonne via knappen Add
• Vælg Clustered og sæt flueben i Unique
• Tryk på OK
Et view der sammensætter tabeller
Nedenstående skal køres fra et Query-vindue – ikke som et view:
Create View [dbo].[viewSearch] WITH SCHEMABINDING As
Select VEJNAVN
+ ' ' + Cast(HUS_NR as VarChar) + HUSBOGSTAV
+ ', ' + Cast(POSTNR As VarChar)
+ ' ' + POSTDIST As SEARCHVALUE, MI_PRINX, SP_GEOMETRY
From dbo.ADRESSER
Union All
Select MAS_MATRNR + ' ' + ELAVNAVN As SEARCHVALUE
, (1000000 + MI_PRINX)
As MI_PRINX
, SP_GEOMETRY
From dbo.JORDSTYKKER
• Og tilføj den så til MapCatalog
Introduktion til SQL Server's spatial objekter
Geometry kontra Geography
• Geometry datatypen understøtter plane – eller projicerede - data.
Geometry datatypen overholder standarden Open Geospatial
Consortium (OGC) Simple Features for SQL Specification version 1.1.0.
• Derudover understøtter SQL Server Geography datatypen, som
gemmer ellipsoidisk data, som f.eks. GPS længde/bredde koordinater.
• Her er en oversigt over de objekttyper, som Geometry-typen
understøtter:
– Kun de blå er ”faktiske” objekter
– http://msdn.microsoft.com/en-us/library/bb964711.aspx
Punkt
Linje Region
Region Pline
Multi
Punkt
Samlingsobjekt
SQL Server 2008 kontra 2012
• Understøttelse af cirkelbuer og tilhørende metoder
– STNumCurves
– STCurveN
– STCurveToLine
– CurveToLineWithTolerance
– BufferWithCurves
• Beregning af korteste linje mellem to geometrier
– ShortestLineTo
• Validering af geometrier
– Mere tolerant
– IsValidDetailed
• Præcision forbedret fra 27 til 48 bits
– færre afrundingsproblemer
• Mere automatisk oprettelse af spatiale indeks
Geometry OGC metoder - 2008
• STArea
• STAsBinary
• STAsText
• STBoundary
• STBuffer
• STCentroid
• STContains
• STConvexHull
• STCrosses
• STDifference
• STDimension
• STDisjoint
• STDistance
• STEndpoint
• STEnvelope
• STEquals
• STExteriorRing
• STGeometryN
• STGeometryType
• STInteriorRingN
• STIntersection
• STIntersects
• STIsClosed
• STIsEmpty
• STIsRing
• STIsSimple
• STIsValid
• STLength
• STNumGeometries
• STNumInteriorRing
• STNumPoints
• STOverlaps
• STPointN
• STPointOnSurface
• STRelate
• STSrid
• STStartPoint
• STSymDifference
• STTouches
• STUnion
• STWithin
• STX
• STY
De er alle følsomme
overfor store/små
bogstaver!!!
Geometry OGC metoder - 2012
• STArea
• STAsBinary
• STAsText
• STBoundary
• STBuffer
• STCentroid
• STContains
• STConvexHull
• STCrosses
• STCurveN
• STCurveToLine
• STDifference
• STDimension
• STDisjoint
• STDistance
• STEndpoint
• STEnvelope
• STEquals
• STExteriorRing
• STGeometryN
• STGeometryType
• STInteriorRingN
• STIntersection
• STIntersects
• STIsClosed
• STIsEmpty
• STIsRing
• STIsSimple
• STIsValid
• STLength
• STNumCurves
• STNumGeometries
• STNumInteriorRing
• STNumPoints
• STOverlaps
• STPointN
• STPointOnSurface
• STRelate
• STSrid
• STStartPoint
• STSymDifference
• STTouches
• STUnion
• STWithin
• STX
• STY
De er alle følsomme
overfor store/små
bogstaver!!!
Invalide geometrier
• Finde poster med invalide geometrier
Select * From dbo.MYTABLE
Where SP_Geometry.STIsValid() = 0
• Korrigere poster med invalider geometrier
Update dbo.MYTABLE
Set SP_Geometry = SP_Geometry.MakeValid()
Koordinatsystemer – EPSG-koder
• Finde EPSG-koder for en tabel, også kaldet SRID:
select distinct SP_GEOMETRY.STSrid from dbo.MINTABEL
• Hvis den ikke er korrekt, kan man ændre den via denne kommando:
Update dbo.MINTABEL Set SP_GEOMETRY.STSrid = 25832
• Dog bør man ikke ændre EPSG-koden til en for et helt andet
koordinatsystem. Der findes dog koordinatsystemer med forskellige
EPSG-koder, f.eks.:
"UTM Zone 32 Euref89p25832“
, 8, 115, 7, 9.0, 0, 0.9996, 500000, 0
"ETRS TM Zone 32, Northern Hemisphere (ETRS89)p3044“
, 8, 115, 7, 9, 0, 0.9996, 500000, 0
• Problemet kan løses ved at kopiere MapInfoW.prj fra MapInfo Pro
mappen over i Tools mappen. Bør allerede være rettet i v11.5 og nyere
versioner
Spatial SQL eksempler
Beregne areal af valide objekter
Select *, SP_GEOMETRY.STArea() As Area
From dbo.BYFLADER
Where SP_GEOMETRY.STIsValid() = 1
Beregne længder på valide objekter
Select *, SP_GEOMETRY.STLength() As Length
From dbo.VEJMIDTER
Where SP_GEOMETRY.STIsValid() = 1
Spatial SQL eksempler
Find kommuner og deres naboer
Select t1.KOMNAVN, t2.KOMNAVN
From dbo.KOMMUNE t1, dbo.KOMMUNE t2
Where (t1.SP_GEOMETRY.STTouches(t2.SP_GEOMETRY) = 1
Or t1.SP_GEOMETRY.STIntersects(t2.SP_GEOMETRY) = 1)
And t1.MI_PRINX <> t2.MI_PRINX
Order By t1.KOMNAVN
Spatial SQL eksempler
Tilføj et bynavn til netop de veje, der skærer en by
Select V.*, B.BYNAVN
FROM dbo.VEJMIDTER AS V
CROSS JOIN dbo.BYFLADE AS B
WHERE (V.SP_GEOMETRY.STIntersects(B.SP_GEOMETRY) = 1)
Tilføj et bynavn til de veje som skærer en by og NULL til de
øvrige veje
Select V.*, B.BYNAVN
FROM dbo.VEJMIDTER AS V
LEFT OUTER JOIN dbo.BYFLADE AS B
On (V.SP_GEOMETRY.STIntersects(B.SP_GEOMETRY) = 1)
Nogle join typer i SQL Server
• Inner Join
SELECT V.*, B.BYNAVN
FROM dbo.VEJMIDTER AS V
INNER JOIN dbo.BYFLADE AS B
ON (V.SP_GEOMETRY.STIntersects(B.SP_GEOMETRY) = 1)
• Left Outer Join
SELECT V.*, B.BYNAVN
FROM dbo.VEJMIDTER AS V
LEFT OUTER JOIN dbo.BYFLADE AS B
ON (V.SP_GEOMETRY.STIntersects(B.SP_GEOMETRY) = 1)
• Cross Join
SELECT V.*, B.BYNAVN
FROM dbo.VEJMIDTER AS V
CROSS JOIN dbo.BYFLADE AS B
WHERE (V.SP_GEOMETRY.STIntersects(B.SP_GEOMETRY) = 1)
Inner Join
ID NAME LASTNAME
1 Peter 1
2 Paul 3
3 Mary 5
4 Ann 2
ID LASTNAME
1 Møller
2 Smith
3 McCartney
4 Probert
ID NAME LASTNAME
1 Peter Møller
2 Paul McCartney
4 Ann Smith
SELECT P.ID, P.NAME, L.LASTNAME
FROM dbo.PERSONS AS P
INNER JOIN dbo.LASTNAMES AS L
ON (P.LASTNAME = L.ID)
Left Outer Join
ID NAME LASTNAME
1 Peter 1
2 Paul 3
3 Mary 5
4 Ann 2
ID LASTNAME
1 Møller
2 Smith
3 McCartney
4 Probert
ID NAME LASTNAME
1 Peter Møller
2 Paul McCartney
3 Mary <NULL>
4 Ann Smith
SELECT P.ID, P.NAME, L.LASTNAME
FROM dbo.PERSONS AS P
LEFT OUTER JOIN dbo.LASTNAMES AS L
ON (P.LASTNAME = L.ID)
Cross Join
ID NAME LASTNAME
1 Peter 1
2 Paul 3
3 Mary 5
4 Ann 2
ID LASTNAME
1 Møller
2 Smith
3 McCartney
4 Probert
ID NAME LASTNAME
1 Peter Møller
2 Paul McCartney
4 Ann Smith
SELECT P.ID, P.NAME, L.LASTNAME
FROM dbo.PERSONS AS P
CROSS JOIN dbo.LASTNAMES AS L
WHERE (P.LASTNAME = L.ID)
Note: A Cross Join without condition will join every
record in the first table with every record in the
other table
Triggers i SQL Server
Hvad er Triggers?
• En trigger kan blive kaldt når der sker noget specielt i databasen
• De kan f.eks. kaldes når poster indsættes, opdateres eller slettes
• De kan også blive kaldt når en bruger logger på databasen
Trigger indstillinger
• Højreklik på Databaseserveren > Properties, Advanced
– Allow triggers to fire others sættes til FALSE
• Højreklik på databasen > Properties, Options
– Recursive triggers Enabled sættes til FALSE
Midlertidige tabeller i triggers
• SQL Server har to midlertidige tabeller, som kan anvendes i en trigger:
• inserted
– Indeholder de nye poster, der skal indsættes i, altså de ændringer
der er foretaget
– Findes ved indsættelse af nye poster og opdatering af poster
• deleted
– Indeholder posterne, der er blevet opdateret eller slettet, altså som
posterne så ud inden de blevet rettet/slettet
– Findes ved opdatering af poster og sletning af poster
Blev en kolonne opdateret?
• Man kan også forespørge på om en given kolonne blev opdateret i
forbindelse med en opdatering.
• Det gøres med funktionen Update(), som returner TRUE for
kolonnenavne, som er blevet opdateret
If UPDATE(BYGNINGSTYPE)
Begin
If (exists(Select *
from inserted
where BYGNINGSTYPE = 'Bygning, stråtag'))
Begin
Insert into dbo.StraataekSikkerhedszone
(BYGN_ID, SP_GEOMETRY)
(Select MI_PRINX, SP_GEOMETRY.STBuffer(150)
From inserted
Where BYGNINGSTYPE = 'Bygning, stråtag')
End
End
Oprette triggers
• Højreklik på Trigger mappen på den tabel, som du ønsker at oprette en
trigger til og vælg New trigger…
• Brug Query > Specify Values for Template Parameters eller
Ctrl+Shift+M for at indsætte nogle standardværdier i triggeren
• Nu skal du ”bare” tilpasse selve trigger udtrykket efter dine behov
• Du skal eksekvere (Execute) triggeren for rent faktisk at oprette den
Trigger kommando
CREATE TRIGGER [schema_name.] trigger_name
ON { table | view }
[ WITH <dml_trigger_option> [ ,...n ] ]
{ FOR | AFTER | INSTEAD OF } { [INSERT] [,] [UPDATE] [,] [DELETE]}
[ NOT FOR REPLICATION ]
AS { sql_statement [ ; ]
[ ,...n ]
| EXTERNAL NAME <method specifier [ ; ] > }
En trigger til alt
• Man kan lave en trigger, der håndterer såvel indsættelse, opdatering og
sletninger i en tabel.
• Man skal sørge for at denne trigger kan fastslå, hvilken hændelse den
kaldes for
If (not exists(SELECT * FROM inserted))
Begin -- records where deleted/der blev slette poster
End
Else
Begin
If exists(SELECT * FROM deleted)
Begin -- records where updated/der blev opdateret poster
End
Else
begin -- records were inserted/der blev indsat poster
End
End
Opret en tidsstemplende trigger ved opdatering
CREATE TRIGGER dbo.trg_MY_TABLE_OnUpdate
ON dbo.MY_TABLE
AFTER UPDATE
AS
Begin
Update dbo.MY_TABLE
Set DATE_CHANGED = CURRENT_TIMESTAMP,
USER_CHANGED = SYSTEM_USER
Where MI_PRINX In (Select MI_PRINX From inserted);
End
GO
Opret en tidsstemplende trigger ved indsættelse
CREATE TRIGGER dbo.trg_MY_TABLE_OnInsert
ON dbo. MY_TABLE
AFTER INSERT
AS
Begin
Update dbo.MY_TABLE
Set DATE_CREATED = CURRENT_TIMESTAMP,
USER_CREATED = SYSTEM_USER
Where MI_PRINX In (Select MI_PRINX From inserted);
End
GO
Opret en tidsstemplende trigger ved indsættelse
og opdatering - I
CREATE TRIGGER dbo.trg_MY_TABLE_OnInsert
ON dbo. MY_TABLE
AFTER INSERT
AS
Begin
If exists(SELECT * FROM deleted)
Begin -- records where updated/der blev opdateret poster
Update dbo.MY_TABLE
Set DATE_CREATED = CURRENT_TIMESTAMP,
USER_CREATED = SYSTEM_USER
Where MI_PRINX In (Select MI_PRINX From inserted);
End
Else
...
Opret en tidsstemplende trigger ved indsættelse
og opdatering - II
...
begin -- records were inserted/der blev indsat poster
Update dbo.MY_TABLE
Set DATE_CREATED = CURRENT_TIMESTAMP,
USER_CREATED = SYSTEM_USER
Where MI_PRINX In (Select MI_PRINX From inserted);
End
End
GO
Opret en”historik” trigger
CREATE TRIGGER dbo.trgCopyToHistory
ON dbo.KOMMUNE
AFTER DELETE,UPDATE
AS
Begin
Insert Into dbo.KOMMUNE_historik
(OBJECTID, ID_NR, NAVN, OBJEKTTYPE, OBJEKTKODE
, ADM_KODE, MID_FEJL, PRODUCENT, MI_PRINX_ORIGINAL
, SP_GEOMETRY, MI_STYLE)
Select OBJECTID, ID_NR, NAVN, OBJEKTTYPE, OBJEKTKODE
, ADM_KODE, MID_FEJL, PRODUCENT, MI_PRINX
, SP_GEOMETRY, MI_STYLE
From deleted
End
Go
Trigger, der opdaterer X og Y koordinater
• Create TRIGGER [dbo].[trg_MYTABLE_OnUpdate]
ON [dbo].[MYTABLE]
AFTER INSERT, UPDATE
AS
BEGIN
UPDATE DBO.MYTABLE
SET X = SP_GEOMETRY.STX,
Y = SP_GEOMETRY.STY
WHERE MI_PRINX IN (SELECT MI_PRINX FROM inserted)
END
Trigger der opretter stråtagssikkerhedszoner - I
Create TRIGGER dbo.trgBygningerStraataekt
ON dbo.Bygninger
AFTER INSERT,DELETE,UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
If (not exists(SELECT * FROM inserted))
Begin -- records where deleted
-- vi sletter dem der blev slettet
Delete From dbo.StraataekSikkerhedszone
Where BYGN_ID In (Select MI_PRINX From deleted)
end
else
end...
Trigger der opretter stråtagssikkerhedszoner - II
...
Begin
if exists(SELECT * FROM deleted)
begin -- records where updated
If UPDATE(BYGNINGSTYPE)
Begin
-- ændringer i bygningstype, vi håndterer ændringer til/fra
-- ‘Bygning, stråtag’ I kolonnen BYGNINGSTYPE
Delete From dbo.StraataekSikkerhedszone
Where BYGN_ID In
(Select MI_PRINX From deleted
where BYGNINGSTYPE = 'Bygning, stråtag')
Insert into dbo.StraataekSikkerhedszone
(BYGN_ID, MACRO_ITEM, SP_GEOMETRY)
(Select MI_PRINX, 1, SP_GEOMETRY.STBuffer(200)
From inserted
Where BYGNINGSTYPE = 'Bygning, stråtag')
End
else
...
Trigger der opretter stråtagssikkerhedszoner - III
...
Begin
If UPDATE(SP_GEOMETRY)
Begin
-- opdatering af geometrien skal afspejles i zonen
Delete From dbo.StraataekSikkerhedszone
Where BYGN_ID In
(Select MI_PRINX From deleted
where BYGNINGSTYPE = 'Bygning, stråtag')
Insert into dbo.StraataekSikkerhedszone
(BYGN_ID, MACRO_ITEM, SP_GEOMETRY)
(Select MI_PRINX, 2, SP_GEOMETRY.STBuffer(200)
From inserted
Where BYGNINGSTYPE = 'Bygning, stråtag')
End
End
End
...
Trigger der opretter stråtagssikkerhedszoner - IV
else
begin -- records were inserted
If (exists(Select * from inserted
where BYGNINGSTYPE = 'Bygning, stråtag'))
Begin
-- nye poster blev indsat I tabellen bygninger
-- vi opretter zoner for dem med stråtag
Insert into dbo.StraataekSikkerhedszone
(BYGN_ID, MACRO_ITEM, SP_GEOMETRY)
(Select MI_PRINX, 4, SP_GEOMETRY.STBuffer(200)
From inserted Where BYGNINGSTYPE = 'Bygning, stråtag')
End
End
END
GO
Tilgå SQL Server via MapBasic
Process
• Opret tilslutning
nConn = Server_Connect("ODBC", "DSN=GIS;UID=EditUser;PWD=Edit")
• Gør ”noget”
Server Create Map
Server Create Style
Server Create Table
Server Link Table
Register Table
Server Refresh
Server Set Map
Server_Execute
Commit Table
…
• Luk tilslutning
Server nConn Disconnect
Server_Execute
• Du kan bruge Server_Execute funktionen til at sende SQL kommandoer
til udførsel i databasen
• Sikre dig at du har en tilslutning åben, her bruges tilslutning nr 1
Print Server_Execute(1, ”Drop table dbo.KOMMUNE”)
Print Server_Execute(1, ”Delete From MapInfo.MapInfo_MapCatalog
Where OWNERNAME = ’dbo’
and TABLENAME = ’KOMMUNE’”)
• OBS: Ovenstående skal stå på én linje pr. kommando
• Husk at erstatte ” og ’ i MapBasic –vinduet, hvís du kopieret
ovenstående fra en PowerPoint
MapBasic applikationer: Find DBMS
• Find DBMS er et lille værktøj som illustrerer hvordan en søgning kan
gøres via kald til en spatial database
• Værktøjet søger i en foruddefineret tabel i databasen ved hjælp af
tilslutning 1. Det kunne ændres til en specifik datakilde.
• Med værktøjet kan du indtaste en værdi, du ønsker en søge efter. Når
du trykker på Enter sendes SQL forespørgslen til database og
matchende værdier returneres og vises i dialogboksen
• Når du klikker på en af værdierne, markeres den tilsvarende post i
kortet og der zoomes hen til posten
• Bemærk at du også skal have tabellen åben i et kortvindue.
• De forskellige navne er angivet i konfigurationsfilen: FIND DBMS.ini
Find DBMS
MapBasic applikationer: TableRefresh
Tanken er at man installerer MapInfo Pro på en server eller en anden
computer, som kører om natten. Derefter opretter man et job på
computeren, som starter applikationen hver nat, hver søndag nat eller
lignende. Programmet søger så efter tabeller i den angivne mappe og
opdaterer dem, der skal og kan opdateres.
Programmet styres af opsætningsfilen, som bestemmer:
• i hvilken mappe, der skal søges efter tabeller
• om der skal søges i undermapper
• om DBMS-tabeller skal opdateres
• om WFS-tabeller skal opdateres
Tips
Spørgsmål & svar
Q Når jeg åbner en DBMS-tabel, får jeg at vide at tabellen er skrivebeskyttet?
A Sikre dig at du har rettigheder til at ændre i tabellen i databasen og at
tabellen har et entydigt primært indeks – for views skal denne kolonne
hedde MI_PRINX
Q Jeg får ikke valget mellem Oracle Spatial og ODBC?
A Du har enten ikke installeret understøttelse for Oracle Spatial (OCI) eller
også har du ikke en Oracle klient installeret
Q Min DBMS-tabel kan ikke blive vist i et kortvindue?
A Tabellen er sikkert ikke blevet registreret i kortkataloget. Gør den
kortlægningsklar først
Q Jeg har åbnet en DBMS-tabel og gjort den kortlægningsklar, men jeg kan
stadig ikke tilføje den til et kortvindue?
A Du skal genåbne tabellen fra databasen for at få MapInfo Professional til
at læse kortlægningsinformationerne fra kortkataloget
Spørgsmål & svar
Q Hvordan kan jeg se kolonnerne med koordinater i MapInfo Professional?
A Opret et view og tilføje disse kolonner to gange (en gang med et alias),
gør viewet kortlægningsklart og åbn så viewet i stedet for den
bagvedliggende tabel, se nærmere på næste side
Q Når jeg åbner min tabel kan jeg ikke redigere kortdataene. Jeg kan dog
redigere attributdataene?
A Dette problem kan skyldes at du har valgt en skrivebeskyttet kolonne til at
indeholde den rækkevis stil, for eksempel hvis kolonnen er breddere end
254 tegn
Q Jeg kan ikke uploade en tabel til databasen vha. Gem kopi som. Jeg har
slettet den gamle tabel i databasen?
A Tabellen findes måske allerede i kortkataloget. Du skal fjerne den fra
kortkataloget før du kan gemme den som.
Spørgsmål & svar
Q Jeg har lige oprettet kortkataloget via EasyLoader, men nu kan jeg ikke
angive at min tabel skal anvende rækkevis stil – denne mulighed er
inaktiv. Jeg har undersøgt at jeg har kolonne af typen varchar(254).
Hva’ nu?
A Hvis du havde en tilslutning åben til databasen i MapInfo
Professional da du oprettede kortkataloget med EasyLoader, skal
du nu lukke alle tilslutningr til databasen for at få MapInfo
Professional til at genopfriske sit “syn” på kortkataloget
Se koordinater i MapInfo Professional
• MapInfo “gemmer” kolonner med koordinater, når de oversættes til et
punkt
• For at få vist koordinaterne skal du oprette et view der
– Indeholder koordinaterne to gange
– Indeholder den primære indeks kolonne under navnet MI_PRINX
• Dette view kunne se således ud:
SELECT HOLE_ID, ID, LENGTH,
LOCATIONX, LOCATIONY, LOCATIONZ,
LOCATIONX As X, LOCATIONY As Y, ID As MI_PRINX
FROM dbo.DRILLHOLES
• Til sidst skal du gøre viewet kortlægningklart vha. kolonnerne X og Y
SQL Server tips
• Tools > Options
– Fjern flueben for ”Prevent saving changes that require table re-
creation”.
– Det gør det f.eks. muligt at ændre en kolonne fra nvarchar til varchar
Spørgsmål ?
The Power of Insight
MapInfo Professional
Peter Horsbøll Møller, Senior Systems Engineer
peter.moller@pb.com

More Related Content

Viewers also liked

MapInfo Pro 64 bit og MapInfo Pro Advanced 64 bit
MapInfo Pro 64 bit og MapInfo Pro Advanced 64 bitMapInfo Pro 64 bit og MapInfo Pro Advanced 64 bit
MapInfo Pro 64 bit og MapInfo Pro Advanced 64 bitPeter Horsbøll Møller
 
Getting Started with the Ribbon library - MUGUKI User Group Meeting 2016
Getting Started with the Ribbon library - MUGUKI User Group Meeting 2016Getting Started with the Ribbon library - MUGUKI User Group Meeting 2016
Getting Started with the Ribbon library - MUGUKI User Group Meeting 2016Peter Horsbøll Møller
 
Automating Repetitive Tasks with MapBasic
Automating Repetitive Tasks with MapBasicAutomating Repetitive Tasks with MapBasic
Automating Repetitive Tasks with MapBasicPeter Horsbøll Møller
 
Using Spectrum on Demand from MapInfo Pro
Using Spectrum on Demand from MapInfo ProUsing Spectrum on Demand from MapInfo Pro
Using Spectrum on Demand from MapInfo ProPeter Horsbøll Møller
 
Using MapBasic to modify your user interface
Using MapBasic to modify your user interfaceUsing MapBasic to modify your user interface
Using MapBasic to modify your user interfacePeter Horsbøll Møller
 
MapInfo Professional 12.0 and SQL Server 2008
MapInfo Professional 12.0 and SQL Server 2008MapInfo Professional 12.0 and SQL Server 2008
MapInfo Professional 12.0 and SQL Server 2008Peter Horsbøll Møller
 

Viewers also liked (11)

Nyheder i MapInfo Pro 12.5 Dansk 32 bit
Nyheder i MapInfo Pro 12.5 Dansk 32 bitNyheder i MapInfo Pro 12.5 Dansk 32 bit
Nyheder i MapInfo Pro 12.5 Dansk 32 bit
 
Hvad påvirker en whisky
Hvad påvirker en whiskyHvad påvirker en whisky
Hvad påvirker en whisky
 
MapInfo Pro 64 bit og MapInfo Pro Advanced 64 bit
MapInfo Pro 64 bit og MapInfo Pro Advanced 64 bitMapInfo Pro 64 bit og MapInfo Pro Advanced 64 bit
MapInfo Pro 64 bit og MapInfo Pro Advanced 64 bit
 
MapInfo Discover 2015.2 64 bit
MapInfo Discover 2015.2 64 bitMapInfo Discover 2015.2 64 bit
MapInfo Discover 2015.2 64 bit
 
Getting Started with the Ribbon library - MUGUKI User Group Meeting 2016
Getting Started with the Ribbon library - MUGUKI User Group Meeting 2016Getting Started with the Ribbon library - MUGUKI User Group Meeting 2016
Getting Started with the Ribbon library - MUGUKI User Group Meeting 2016
 
Automating Repetitive Tasks with MapBasic
Automating Repetitive Tasks with MapBasicAutomating Repetitive Tasks with MapBasic
Automating Repetitive Tasks with MapBasic
 
Using Spectrum on Demand from MapInfo Pro
Using Spectrum on Demand from MapInfo ProUsing Spectrum on Demand from MapInfo Pro
Using Spectrum on Demand from MapInfo Pro
 
Using MapBasic to modify your user interface
Using MapBasic to modify your user interfaceUsing MapBasic to modify your user interface
Using MapBasic to modify your user interface
 
MapInfo Discover 3D: From 2D to 3D
MapInfo Discover 3D: From 2D to 3DMapInfo Discover 3D: From 2D to 3D
MapInfo Discover 3D: From 2D to 3D
 
MapInfo Professional 12.0 and SQL Server 2008
MapInfo Professional 12.0 and SQL Server 2008MapInfo Professional 12.0 and SQL Server 2008
MapInfo Professional 12.0 and SQL Server 2008
 
Modul Map Info
Modul Map InfoModul Map Info
Modul Map Info
 

More from Peter Horsbøll Møller

More from Peter Horsbøll Møller (13)

MapInfo Pro v12.5 to v2021.1 Overview
MapInfo Pro v12.5 to v2021.1 OverviewMapInfo Pro v12.5 to v2021.1 Overview
MapInfo Pro v12.5 to v2021.1 Overview
 
MapInfo Pro Tips & Tricks med Geograf
MapInfo Pro Tips & Tricks med GeografMapInfo Pro Tips & Tricks med Geograf
MapInfo Pro Tips & Tricks med Geograf
 
Introduction to MapBasic
Introduction to MapBasicIntroduction to MapBasic
Introduction to MapBasic
 
Precisely MapInfo Pro v2019 and Roadmap
Precisely MapInfo Pro v2019 and RoadmapPrecisely MapInfo Pro v2019 and Roadmap
Precisely MapInfo Pro v2019 and Roadmap
 
Be Location Intelligent with MapInfo Pro v2019
Be Location Intelligent with MapInfo Pro v2019Be Location Intelligent with MapInfo Pro v2019
Be Location Intelligent with MapInfo Pro v2019
 
MapInfo Pro v2019: Improving the Way You Query
MapInfo Pro v2019: Improving the Way You QueryMapInfo Pro v2019: Improving the Way You Query
MapInfo Pro v2019: Improving the Way You Query
 
Eksklusivsmagning - 10 års jubilæum, Oksenvad Whiskylaug
Eksklusivsmagning - 10 års jubilæum, Oksenvad WhiskylaugEksklusivsmagning - 10 års jubilæum, Oksenvad Whiskylaug
Eksklusivsmagning - 10 års jubilæum, Oksenvad Whiskylaug
 
Llinking Spectrum dataflows to MapInfo Pro
Llinking Spectrum dataflows to MapInfo ProLlinking Spectrum dataflows to MapInfo Pro
Llinking Spectrum dataflows to MapInfo Pro
 
Clynelish - Oksenvad Whiskylaug
Clynelish - Oksenvad WhiskylaugClynelish - Oksenvad Whiskylaug
Clynelish - Oksenvad Whiskylaug
 
The Macallan - Oksenvad Whiskylaug
The Macallan - Oksenvad WhiskylaugThe Macallan - Oksenvad Whiskylaug
The Macallan - Oksenvad Whiskylaug
 
Advanced SQL Selects
Advanced SQL SelectsAdvanced SQL Selects
Advanced SQL Selects
 
Taking Advantage of a Spatial Database with MapInfo Professional
Taking Advantage of a Spatial Database with MapInfo ProfessionalTaking Advantage of a Spatial Database with MapInfo Professional
Taking Advantage of a Spatial Database with MapInfo Professional
 
The strength of a spatial database
The strength of a spatial databaseThe strength of a spatial database
The strength of a spatial database
 

MapInfo Pro og SQL Server - Uden opgaver

  • 1. MapInfo Professional 12.0 SQL Server 2008R2 / 2012 (Express) Peter Horsbøll Møller, Senior Systems Engineer November 2013
  • 2. Dagsorden - 1 Opsætning af en spatial database så den kan anvendes fra MapInfo Professional 12.0 SQL Server 2008R2 / 2012 Express Kan være enhver spatial database Kan være MapInfo Pro 10.0 - 12.0
  • 3. Dagsorden - 2 Anvende en spatial database fra MapInfo Professional 12.0 SQL Server 2008R2 / 2012 Express Kan være enhver spatial database Kan være MapInfo Pro 10.0 - 12.0
  • 4. Dagsorden - 3 • Vi kommer omkring: – Oprettelse af databaser, login og brugere – Oprettelser af tabeller – Oprettelse af ODBC datakilder – MapInfos kortkatalog – Åbning af DBMS tabeller fra MapInfo Professional – Upload af tabeller til SQL Server – Editering af tabeller fra MapInfo Professional – Oprettelse af views – De spatiale objekter og funktioner i SQL Server – Oprettelse af Triggers – Anvendelse af MapBasic mod SQL Server • Hvis I har konkrete emner, som I ønsker berørt, så giv mig et praj
  • 5. Forudsætninger • MapInfo Professional 10, 10.5, 11.0, 11.5 eller 12.0. – 12.0.2 er anbefalet • MS SQL Server 2008 R2 eller 2012 Express with tools – Kan hentes her: 2008: www.microsoft.com/en-us/download/details.aspx?id=23650 2012: www.microsoft.com/en-us/download/details.aspx?id=29062 – Vi skal bruge SQL Server Management Studio – Brugerrettigheder til at oprette nye databaser, logins og brugere • kræver enten et SA-login • eller Administrative rettigheder lokalt på computeren
  • 6. Introduktion • Navn og organisation • Forudsætninger: – Kendskab til MapInfo Professional – Kendskab til databaser/SQL Server – Kenskab til SQL • Ønsker til denne workshop?
  • 9. Log in på Management konsollen • Windows Autentication eller ”enhver” SQL Server login • Men vi har brug for visse rettigheder for at kunne oprette en database
  • 10. Søge efter en SQL Server instans • Hvis du ikke kan se din SQL Server Express instans i listen, kan det være fordi din SQL Server Browser service ikke kører på din compter (eller den computer SQL Server er installeret på) • Gå til (Windows) Tjenester og start SQL Server Browser tjenesten • Vær opmærksom på at du evt. skal aktivere tjenesten via Egenskaber på tjenesten
  • 11. Server autentifikation • Højreklik på database-serveren og vælg Properties • Vælg Security • Vælg SQL Server and Windows Authentication mode
  • 13. Oprette en database • Højreklik for at oprette en ny – Option: ”Quoted Identifiers” sættes til ”On”
  • 14. Oprette et login og en bruger • Højreklik for at oprette et nyt login (Security på serveren, ikke på databasen
  • 15. Oprette et login og en bruger – General • Login navn, Kodeord, Standard database • Login kan også være brugerens Windows brugernavn
  • 16. Oprette et login og en bruger – Server Roles • Angiv rolle(r) på database-serveren – ofte kun ”public” • Læs mere: http://msdn.microsoft.com/en-us/library/ms188659.aspx
  • 17. Oprette et login og en bruger – User Mapping • Tilknyt til en (ny) bruger i en database og vælg database rolle(r) • Læs mere: http://msdn.microsoft.com/en-us/library/ms189121.aspx
  • 18. Oprette et login og en bruger - Status • Muligt at ”slukke” for adgang på et senere tidspunkt
  • 20. Hvad er et schema i SQL Server? • Et schema i SQL Server er en måde at organisere bl.a sine tabeller • Med schemaer kan man også nemt tildele rettigheder til en række tabeller, nemlig ved at tildele rettigheder via schemaet i stedet for direkte på tabellerne • Schemaer kan være en anden måde at organisere data end via flere databaser • Når man tilgår databasen fra MapInfo Professional kan man øverst i Åbn dialogboksen vælge hvilket schema, man ønsker at se. På denne måde kan man begrænse det antal tabeller man ser i vinduet med tabeller. • OBS: Vær opmærksom på at der skal findes mindst én tabel i schemaet for at man kan se det fra MapInfo Professional. Det gælder også hvis man ønsker at bruge Gem kopi som til at gemme tabeller over i schemaet
  • 21. Oprette et nyt schema • Højreklik på mappen Schemas i mappen Security under den database, du ønsker at oprette schemaet i • Vælg New Schema... • Angiv et navn og en ejer • Sæt evt. også rettigheder
  • 23. Oprette tabeller • Højreklik på folderen Tables under din database • Vælg New Table…
  • 24. Oprette tabeller – tilføje kolonner • Skriv navnet på kolonnen og vælg den passende kolonnetype for hver kolonne. Overvej om man må indsætte NULL-værdier
  • 25. Oprette tabeller – Properties vinduet • Mange indstillinger for en ny tabel kan også sætte via Properties vinduet (Åbn det evt. ved at trykke på F4) • Du kan her bl.a. sætte: – Tabellens navn – Tabellens schema – Identity kolonnen
  • 26. Oprette tabeller – datatyper • Præcise numeriske – Bigint (MapInfo type: Float) • -9.223.372.036.854.775.808 – 9.223.372.036.854.775.807 – Int (MapInfo type: Integer) • -2.147.483.648 – 2.147.483.647 – SmallInt (MapInfo type: SmallInt) • -32.768 – 32.767 – TinyInt (MapInfo type: SmallInt) • 0 – 255 – Bit (MapInfo type: Logical) • 1 or 0 – Decimal / numerical (MapInfo type: Decimal) • -10^38 +1 – 10^38 –1
  • 27. Oprette tabeller – datatyper • Tilnærmede numeriske værdier – Float (MapInfo type: Float) – Real (MapInfo type: Float) • Dato og tid – Datetime (MapInfo type: Datetime) • Fra 1. januar 1753 til 31. december 9999 med en præcision på trehundrededele sekund eller 3,33 milisekund – Date (MapInfo type: Date) • Fra 1. januar år 1 til 31. december år 9999
  • 28. Oprette tabeller – datatyper • Tekster – Char (MapInfo type: Char) • Fastlængde ikke-Unicode data, max. 8.000 tegn – VarChar (MapInfo type: Char) • Variabellængde ikke-Unicode data, max. 8.000 tegn – Text (MapInfo type: Char) • Variabellængde ikke-Unicode data, max. 2.147.483.647 tegn • Bemærk: Tekstkolonner større end 254 tegn vil være skrivebeskyttet, når de åbnes i MapInfo Professional og de vil kun vise de første 254 tegn
  • 29. Oprette tabeller – datatyper • Geografiske typer – Geometry (MapInfo type: Object) • Kræver at tabellen er registreret i kortkatalog for at MapInfo kan ”se” den, mere om dette senere – Geography (MapInfo type: Object) • Kræver at tabellen er registreret i kortkatalog for at MapInfo kan ”se” den, mere om dette senere
  • 30. Oprette tabeller – overvejelser • Undgå unicode kolonnetyperne (nchar, nvarchar, ntext), da MapInfo Professional ikke kan redigere disse • Undgå at oprette tekst-kolonne større end 254 tegn, da MapInfo Professional ikke kan redigere disse • Overvej at navngiv din primære indeks kolonne MI_PRINX. MapInfo Professional bruger nemlig dette som den primære indeks kolonne i views. • Overvej at anvende Identity kolonner i dine tabeller for den primære indeks kolonne. Dette opdaterer automatisk værdien ved indsættelse af nye poster (svarer til ”autonummer” i MS Access)
  • 31. Oprette tabeller – Primær nøgle • Højreklik på kolonne som skal være den primære nøgle, vælg Set Primary Key
  • 32. Oprette tabeller – Identity • Automatisk nummering • Vælg kolonnen og sæt Is Identity til yes • Du kan angive specifikke tilvækst (increment) og startværdi (seed)
  • 33. Gennemse data i tabeller • Højreklik på den ønskede tabel og vælg – enten Select Top 100 Rows – eller Edit Top 200 Rows • Værdier kan tilpasses via Tools > Options > SQL Server Object Explorer
  • 34. Oprette tabeller - navngivning • Overvej kun at anvende bogstaverne A – Z, numrene 0 – 9 og understregning (_) ved navngivning af tabeller og kolonner • SQL Server understøtter dog nationale tegn, mellemrum og andre specialtegn. • SQL Server har også en række ord, som man ikke må bruge som f.eks. tabel- og kolonnenavne, f.eks. BY og PLAN. Se en komplet liste over reserverede ord her: – http://technet.microsoft.com/en-us/library/ms189822.aspx • Skal tabellerne anvendes i MapInfo Professional anbefales det at holde tabelnavnene under 31 tegn, da det er MapInfo’s begrænsning på tabel- og kolonnenavne • Bemærk også at kolonner til tabel- og kolonnenavne i kortkataloget er begrænset til 32 tegn. Anvender I længere tabel-/kolonnenavne skal disse ændres.
  • 35. Oprette tabeller – et par tips • Du kan kopiere strukturen, eller dele heraf, fra en tabel til en anden ved at: – markere de kolonnenavne og -typer, du ønsker at kopiere, i Design Mode. – trykke på Ctrl+C for at kopiere dem – Gå over i Design Mode for den anden tabel og tryk i det øverst venstre felt – tryk Ctrl+V for at indsætte de kopierede kolonner • Du kan også skripte Create kommandoen for en tabel over i et ”Query” vindue. Du kan så tilpasse denne kommando, f.eks. Tabelnavne, tilføje flere kolonner og endelig udføre kommandoen. Dette vil oprette en ny tabel med en struktur lig med – eller delvis lig med – den originale tabel. • Hvis du ikke kan ændre kolonnetypen, skal du sikre dig at du har slået dette fra: Prevent saving changes that require table re-creation – mere om dette under Tips & Tricks på de sidste sider
  • 37. Oprette en datakilde • Åbn Select Data Source. Kan tilgås fra Åbn dialogboksen eller via Filer > Åbn DBMS- tilslutning. • Vælg datakildetype – Filbaseret datakilde – Maskindatakilde • Klik på knappen Ny.../New… • Vælg den ønskede drivertype/databasetype • Angiv et navn eller filnavn • Datakilden bliver nu oprettet
  • 38. Konfigurere en datakilde • Afhængig af database/driver MS Access MS SQL Server
  • 39. Oprette en datakilde til SQL Server 2008/2012 • Åbn Select Data Source. Kan tilgås fra Åbn dialogboksen eller via Filer > Åbn DBMS-tilslutning. • Vælg datakildetype – Filbaseret datakilde – Maskindatakilde • Klik på knappen Ny.../New… • Vælg Bruger- eller Systemdatakilde • Vælg drivertype/databasetype: – SQL Server Native Client 10.0 (2008) – SQL Server Native Client 11.0 (2012) • Datakilden bliver nu oprettet
  • 40. Konfiguration af SQL Server 2008 datakilde • Indtast navn, beskrivelse og server • Vælg logintype (ofte Windows Authentication) og indtast brugernavn og kodeord, hvis du valgte SQL Server Authentication • Angiv standard database – altid! • Brug ”ANSI Quoted Identifiers” • Andre indstillinger • Afprøv datakilden
  • 41. Åbne en DBMS-tilslutning • Kan gøres via Filer > Åbn, Åbn DBMS- tilslutning eller via Filer > Åbn DBMS- tilslutning • Når du har valgt tilslutningn og skal indtaste dine login-informationer i SQL Server Login dialogboksen, kan du også vælge en anden database • Klik på knappen Options >> for at se flere indstillinger • Vælg en anden database hvis du ønsker det
  • 42. ODBC-datakilder på 64 bit operativsystem • Tilgår du Datakilder via kontrolpanelet: Administrative værktøjer > Datakilder (ODBC) kan du på et 64 bit operativsystem komme til at se på 64bit datakilder • MapInfo Professional 12.0 er et 32 bit program og anvender derfor også 32 bit datakilder. • Højreklik på ”Datakilder (ODBC)” og vælg Egenskaber, så får du denne dialogboks • Target/Destination bestemmer om du ser 32 bit eller 64 bit datakilder: • 32 bit: • %windir%system32odbcad32.exe • 64 bit: • %windir%SysWoW64odbcad32.exe • Læs mere: • http://support.microsoft.com/kb/942976
  • 43. MARS • Multiple Active Result Sets (MARS) – flere aktive resultatsæt • Understøttet af – MapInfo Professional 10.5.2 og nyere – SQLServer 2005, 2008 og 2012 • MapInfo Professional 10.5.2 og nyere (den danske version dog først fra v11.0) tilføjer automatisk denne indstillinger til tilslutningn: – “MARS Connection=true” • Forbedret performance ved åbning af en tabel, især for Direkte med Cache. Adgangen kan være 5-10 gange hurtigere. • Det er ikke nemt at tilføje denne indstillinger til en ODBC-datakilde, da forskellige programmer kan bruge den samme datakilde og ikke alle programmer understøtter MARS. • Du kan dog tilføje denne indstilling via Registreringsdatabasen eller fil- datakilden, se næste side
  • 44. MARS på datakilden • Anvender du en dansk udgave af MapInfo Professional 10.5.2 kan med fordel aktivere MARS direkte på datakilden • I en filbaseret datakilde åbnes datakilden i en tekstfil og linjen ”MARS_Connection=Yes” tilføjes • I en maskin-datakilde tilføjes nøglen ”MARS_Connection” af typen Streng/Tekst til datakilden via regedit. Nøglens værdi sættes til ”Yes” • OBS: Brug ikke denne fremgangsmåde hvis andre programmer anvender samme datakilde
  • 45. MapInfo Pro: DBMS-grundindstillinger • Åbn tilslutning under opstart • Tabel-projektionen anvendes også når du gør en DBMS-tabel kortlægningsklar • Standard placering af eksterne tabeller
  • 47. Kortkataloget • Kortkataloget (MapInfo.MapInfo_MapCatalog) beskriver geografiske tabeller i en database med værdier som: – Type af spatial tabel, for eksempel XY, SpatialWare, Oracle, SQL Server, PostgreSQL/PostGIS, mm. – Koordinatsystem – Dataafgrænsninger – Symbol, standard og rækkevis – Standardvisning • Kortkatalog skal findes én gang i en database med geografiske data, som skal tilgås fra MapInfo Professional
  • 48. Kortkatalog – Spatialtype • Dataopbevaring/database – 1 : MapInfo Code, XY med MapInfo-indeks( 3 kolonner) – 4 : XY gemt i to kolonner – 13: Oracle Spatial – 14: MapInfo SpatialWare for MS SQL Server – 17: SQL Server 2008 Geometry – 18: SQL Server 2008 Geography – 19: PostgreSQL/PostGIS • Objekttyper – .0: Kun punkter – .1: Kun linjer/polylinjer – .2: Kun regioner/polygoner – .3: Alle objekttyper
  • 49. Oprette kortkataloget • Du kan også oprette kortkataloget – Med EasyLoader (MapBasic værktøj) – Med DBMS Catalog (MapBasic værktøj) – direkte i databasen, manuelt via brugerfladen – direkte i databasen, via SQL • Brugeren der opretter kortkataloget har brug for en ”sysadmin” serverrolle. • Hvis du opretter kortkataloget med EasyLoader skal du sikre dig at alle tilslutninger til databasen er lukket i MapInfo Professional. Ellers kan du risikere at have problemer med rækkevis-stil, når du senere vil gøre en DBMS-tabel kortlægningsklar.
  • 50. Oprette kortkataloget – EasyLoader • Start EasyLoader fra Værktøjsstyringen • Kør EasyLoader fra Værktøjsmenuen • Åbn en tilslutning til databasen via ODBC- knappen. Du skal have DBA-rettigheder • Tryk på Kortkatalog-knappen for at oprette kortkataloget • Du skulle nu gerne få at vide at kortkataloget er blevet oprettet • Hvis kortkataloget allerede findes, vil du se en liste med tabeller allerede registreret i kortkataloget. Du vil kunne fjerne en eller flere af disse, hvis du ønsker det
  • 51. Oprette kortkataloget – DBMS Katalog • Kør værktøjet DBMS Katalog fra Værktøjer > Værktøjsstyring. • Vælg Værktøjer > DBMS Katalog > DBMS Katalog og tryk på Opret katalog. • Vælg datakilden, som peger på databasen, hvos du ønsker at oprette kortkataloget – du skal have DBA-rettigheder • Kortkataloget vil nu findes i databasen
  • 52. Gøre en DBMS-tabel kortlægningsklar
  • 53. Gøre en DBMS-tabel kortlægningsklar • Dette vil tilføje en post til kortkatalog, som beskriver hvorledes MapInfo Professional skal vise den pågældende tabel i et kort • Du skal angive hvor de geografiske data skal læses, hvilket koordinatsystem, du ønsker at bruge og hvilken stil de geografiske data skal vises med når de vises i MapInfo Professional
  • 54. Vælg database og tabel • Vælg Tabel > Juster > Gør DBMS- tabel kortlægningsklar • Du kan vælge en allerede åben DBMS-tilslutning via listen med Filtyper eller åbne en ny tilslutning via knappen Åbn DBMS-tilslutning i øverste højre hjørne af dialogboksen • Vælg den tabel, som du ønsker at gøre kortlægningsklar og tryk på Åbn • Bemærk at du kun ser de tabeller, som ikke allerede er registreret i kortkataloget
  • 55. Indstillinger for den kortlægningsklare tabel • Angiv nu hvordan tabellen skal gøres kortlægningsklar: – Type • X og Y koordinater • Oracle Spatial • SQL Server Geometri • SQL Server Geografi • . . . – Stil • Rækkevis – Symbol – Koordinatsystem • Kan eventuelt være skrivebeskyttet – Tabelgrænser: Vælg data. For en tom tabel vælges koordinatsystem • Tryk på OK • Bemærk at vagmulighederne afhænger af den valgte tabel • Vælg nu den næste tabel, som skal gøres kortlægningsklar • Annuller dialogboksen Vælg DBMS-tabel, hvis du ikke ønsker at gøre flere tabeller kortlægningsklare.
  • 56. Gøre en DBMS-table kortlægningsklar - Notater • Du skal ikke gøre dette hvis du har – Uploadet tabellen med EasyLoader – Gemt tabeller i databasen via Gem som i MapInfo Professional • Du kan også udføre denne handling – direkte in SQL Server – Via MapBasic enten via et arbejdsområde, MapBasic-vinduet eller via en MapBasic applikation. – Brug denne MapBasic kommando for at gøre en DBMS-tabel kortlægningsklar: • Server ConnectionNumber Create Map . . .
  • 57. Fjerne en tabel fra kortkataloget • Hvis du har behov for at fjerne en tabel fra kortkataloget, findes der en række måder at gøre dette: • Slet posten manuelt via SQL Server Management Studio • eller ... brug EasyLoader til at fjerne tabellen via knappen Kortkatalog ... brug DBMS Katalog til at fjerne tabellen via knappen Slet indgang
  • 58. Åbne DBMS-tabeller i MapInfo Professional
  • 59. Åbne en DBMS-tabel • Vælg Filer > Åbn • Tryk på Åbn DBMS-tilslutning eller vælg den allerede åbne tilslutning i listen med Filtyper • Vælg de ønskede tabeller • Tilpas eventuelt indstillingerne for de enkelte tabeller • Vælg metode for åbning • Tryk på OK
  • 60. Åbne en DBMS-tabel før MapInfo Pro v12 • Vælg Filer > Åbn • Tryk på Åbn DBMS-tilslutning eller vælg den allerede åbne tilslutning i listen med Filtyper • Vælg den ønskede tabel og tryk på Åbn.
  • 61. Åbne en DBMS-tabel • Specificer: – Kolonner – Rækker – Adgangstype • Sammenkædet • Direkte med Cache • Direkte uden Cache – Hvor tab-filen skal gemmes på disken
  • 62. • Det er kun første gang at du åbner en DBMS-tabel at du skal angive hvilke data du ønsker at åbne • Efterfølgende kan du genåbne disse data ved at åbne tab-filen • Tab- filen indeholder all nødvendig information – Tabelstruktur – tilslutningsinformation – Kan også indeholde brugernavn og kodeord • Hvis tabellen blev oprettet som “sammenkædet”, bør du overveje at opdatere tabellen. • Hvis tabellen blev oprettet som ”direkte”, vil MapInfo Professional læse de nyeste data fra databasen Genåbne en DBMS-tabel
  • 63. Værktøjet Tabelstyring • Lader dig se tilslutningsstreng og forespørgsel fra en DBMS-tabel • Disse gemmes som metadata i tab-filen
  • 64. Metadata sektion - Sammenkædet !table !version 400 !charset WindowsLatin1 Definition Table Type LINKED Charset "WindowsLatin1" Fields 4 MI_PRINX Integer ReadOnly ; PLACENAME Char (50) ; DESCRIPTION Char (250) ; TYPE Char (20) ; begin_metadata "DATALINK" = "" "DATALINKConnectionString" = "DSN=GIS2;Description=SQL Server 2008 GIS database;UID=AdminUser;APP=MapInfo Professional®;WSID=DKMP12948" "DATALINKQuery" = "select ""MI_PRINX"", ""PLACENAME"", ""DESCRIPTION"", ""TYPE"", ""OBJECT"" from ""GIS"".""dbo"".""PointsOfInterest""" "IsReadOnly" = "FALSE" end_metadata
  • 65. Metadata sektion - Direkte !table !version 500 !charset WindowsLatin1 Definition Table Type ODBC begin_metadata "IsReadOnly" = "FALSE" "DATALINK" = "" "DATALINKQuery" = "Select * From ""GIS"".""dbo"".""PointsOfInterest""" "DATALINKConnectionString" = "DSN=GIS2;Description=SQL Server 2008 GIS database;UID=AdminUser;APP=MapInfo Professional®;WSID=DKMP12948" "DATALINKToolKit" = "ODBC" "CACHE" = "ON" "MBRSEARCH" = "ON" end_metadata
  • 66. MapInfo Pro: Sammenkædet kontra Direkte
  • 67. Sammenkædet kontra Direkte - I • Sammenkædet – Data bliver kopieret til MapInfo tabellen, når tabellen oprettes og når den opdateres – Adgang til databasen er kun nødvendig, når du gemmer eller opdaterer tabellen -> At arbejde uden tilslutning og lange transaktioner er understøttet – Hastigheden er lige så god som en normal MapInfo tabel, når først data er hentet – Data kan tilgås skrivebeskyttet hvis der ikke findes en primær nøgle – Hvis du bruger en forespørgsel til kun at hente de nødvendige data, vil forbedre hastigheden ved download. Forespørgslen kan skabes via Rækkefilter, kolonnefilte rog Ekspert dialogboksene – Data hentes ned til samme placering som tab-filen – Duplikerede data
  • 68. Sammenkædet kontra Direkte - II • Direkte med og uden cache – Åbning er tabellerne første gang kan være hurtigere end sammenkædet – afhængig af zoomniveaue i kortvinduet – En “vis hele lager” eller zoom ud til hele visningen vil hente alle poster fra tabellen – Data skal have en primær nøgle – Du skal altid have en åben tilslutning til databasen
  • 69. Sammenkædet kontra Direkte - III • Direkte uden cache – MapInfo Professional læser “altid” direkte fra databasen – Ethvert optegning, gennemse eller udvælgelse kan have en negativ effekt på performance – Data genlæses fra database-serveren ved et hvert opslag
  • 70. Sammenkædet kontra Direkte – IV • Direkte med cache – Anvender en midlertidig cache • 9.5.0 og tidligere: – Tabel i hukommelsen, store tabeller kan fejle eller være langsomme – Cache gælder kun for et kortudsnit. Hvis du zoomer/panorerer udenfor det forrige kortudsnit, læses data fra databasen igen • 9.5.1 og nyere: – MapInfo tabel gemt i en temporær fil – Cachen er progressiv, data bevares i cachen i den aktuelle session og cachen vokser løbende – Data gemmes i cachen efterhånden som data indlæses fra databasen. Dermed vil efterfølgende adgang til de samme data blive hurtigere – Cachen nulstilles når tabellen lukkes
  • 71. Sammenkædet kontra Direkte – Konklusioner? • Brug kun “direkte uden cache” når – Data ændres hvert minut eller hurtigere • Brug ”direkte med cache” når – Tabellen er meget stor og du ikke kan filtrere via en forspørgsel – Dine data ændres løbende, f.eks. dagligt • Bruge sammenkædet når – Dine data er statiske og kun ændres en gang hver uge/måned/år – Performance er vigtig – Du skal laver større analyser på dine data, f.eks. SQL-forespørgsler
  • 72. Linked kontra Live – Konklusioner? • Hvis du har en meget lille datamængde i din tabel, spiller det næppe den store roller om du anvender direkte eller sammenkædet • Med ”direkte” tabeller sikrer du dig at brugerne ”logger på” for at tilgå data. • Hvis du anvender ”direkte” tabeller, anbefaler vi at du tilgår dine tabeller via et arbejdsområde med zoomniveauer, som forhindrer at unødvendig data hentes • Understøttelse af MARS har forbedret anvendelse af Direkte med Cache
  • 73. Lidt snak om performance, baggrund • MapInfo Professional 11.0.3 kører på den lokale computer • SQL Server 2008 Express kører på den lokale computer • 17 tabeller i en SQL Server database, 250 MB i tab-filer • 5 tabeller med punkter – mellem 23.000 og 480.000 punkter pr. tabel, totalt 759.100 punkter • 4 tabeller med polylinjer – mellem 800 og 12.500 polylinjer pr tabel, totalt 48.100 polylinjer – mellem 23.400 og 480.700 knuder pr tabel, totalt 653.900 knuder • 8 tabeller med regioner – mellem 1 og 179.800 regioner pr tabel, totalt 238.000 regioner – mellem 10.900 og 1.303.800 knuder pr tabel, totalt 2.147.500 knuder
  • 74. Lidt snak om performance, nogle tal • Hente data fra alle tabeller ned i sammenkædede tabeller i et kortvindue: – 38 sekunder • Hente data fra alle tabeller ned i direkte tabeller med cache i et kortvindue uden zoomniveauer: – Zoom: 500 m: 4 sekunder – Zoom: 1000 m: 5 sekunder – Zoom: 2500 m: 12 sekunder – Zoom: 5000 m: 37 sekunder • Åbne alle tabeller via et arbejdsområde med zoomniveauer: – Sammenkædet: 0-1 sekund, + 1-2 sekunder til optegning af kort – Direkte med cache: 1-2 sekund + 2-4 sekunder til optegning af kort
  • 76. Opret en ny tabel via MapInfo Professional • Du kan oprette en tabel i SQL Server direkte fra MapInfo Professional. • MapInfo Professional tilføjer atuomatisk denne nye tabel til kortkataloget i databasen. • Vælg Filer > Ny... • Vælg det ønskede i dialogboksen Ny tabel og tryk på knappen Opret... • Tilføj kolonner via dialogboksen Ny tabelstruktur og tryk på knappen Opret...
  • 77. Opret en ny tabel via MapInfo Professional • Vælg datakilden i listen Gem som type eller åbn en ny tilslutning via knappen Åbn DBMS-tilslutning • Indtast nu et navn på din nye tabel i databasen og sikre dig at det korrekte schema er valgt • Tryk på knappen Gem for at gemme tabellen
  • 78. Opret en ny tabel via MapInfo Professional • Nu skal du angive hvorledes denne database-tabel skal åbnes i MapInfo Professional • Og angive om MapInfo Professional skal oprette en primær indekskolonne og hvad navnet skal være på denne • Og hvordan de geografiske data skal gemmes • Og hvordan stilen skal håndteres • Tryk på OK for at oprette og åbne denne nye tabel i MapInfo Professional
  • 79. DAG 2
  • 80. Forespørgsler ved åbning af DBMS-tabeller
  • 81. Forespørgsler – Hvornår udføres de? • Sammenkædet – Forespørgslen udføres når • tabellen åbnes første gang • tabellen opdateres • Direkte med cache – Forespørgslen udføres når • Tabellen tilføjes til et kort (eller et listevindue) • Du zoomer eller panorerer i kortet • Direkte uden cache – Forespørgslen udføres når • Tabellen tilføjes til et kort (eller et listevindue) • Du zoomer eller panorerer i kortet • Du klikker i kortet med vælg-værktøjet • Du klikker i kortet med info-værktøjet • …
  • 82. Forespørgsler – Rækkefiltrering • Du kan angive hvilke poster, du ønsker at hente fra databasen • Ved hjælp af attributter • Ved hjælp af geografi • Værdien af Current_Mapper og Selection er statiske og opdateres ikke med nye værdier, når tabellen opdateres. “Selection” er kun tilgængelig hvis der er en aktiv udvælgelse “Current_Mapper” er kun tilgængelig hvis der er et kort aktivt “Object” er kun tilgængelig for kortlægningsklare tabeller “Like” og “not like” er kun tilgængelige for tekst-kolonner Brug ikke ”” omkring tekstværdien!
  • 83. Forespørgsler - Ekspert • Skriv dine egne SQL-udtryk • Syntaksen afhænger af SQL dialekten i databasen • MapInfo Professional vil “oversætte” nogle specifikke udtryk når forespørgslen sendes til databasen: – Object – Within – Selection – Current_Mapper – … • Du kan gemme og indlæse forespørgsler via de to knapper på højre side i dialogboksen
  • 84. Forespørge på datoer via Eksport-dialogboksen • Du kan f.eks. anvende ekspert-dialogboksen til at forespørge på datoer • Brug følgende udtryk til at konvertere en tekst til en dato: – Convert(date, ‘ddmmåååå’, 112), hvor ”ddmmåååå” erstattes af den ønskede dato
  • 85. Metadata for geografisk forespørgsel !table !version 650 !charset WindowsLatin1 Definition Table Type LINKED Charset "WindowsLatin1" Fields 3 MI_PRINX Integer ReadOnly ; NAVN Char (50) ; TYPE Char (50) ; begin_metadata "IsReadOnly" = "FALSE“ "DATALINK" = "" "DATALINKConnectionString" = "DSN=GIS;MARS_Connection=Yes" "DATALINKQuery" = "select ""MI_PRINX"", ""NAVN"", ""TYPE"", ""OBJECT"" from ""GIS"".""dbo"".""POI"" where (OBJECT within Rectangle( 628163.45078508,6112409.85175394,720526.19639343,6186305.28363101))" "DATALINKSpatialObj" = "ST_Spatial(HG_Box(ST_Point(628163.451003735300, 6186305.285449981700),ST_Point(720526.200186016970,6112409.856650807900)) ,ST_Point(674344.821471954000,6149357.566051412400))" end_metadata
  • 86. Uploade tabeller til SQL Server
  • 87. EasyLoader EasyLoader … • … leveres med MapInfo Professional. Programmet kan også hentes på vores hjemmeside • … er et selvstændigt program, som kan køres udenfor MapInfo Professional • … er et Windows-program, men kan forbinde sig til databaser, der kører på andre operativsystemer • … kan køres i batch-mode fra – kommandoprompt – Bat-fil – program
  • 88. Uploade eksisterende data med EasyLoader • EasyLoader lader dig uploade eksisterende data til en database – Oracle Locator/Spatial – MapInfo SpatialWare – SQL Server2008 Spatial – PostgreSQL/PostGIS – MS Access, XY-koordinater • Vælg en eller flere tabeller, der skal uploades • Angiv hvorledes de skal uploades • Kan oprette kortkataloget • Kan fjerne tabeller fra kortkataloget • Kortkataloget opdateres
  • 89. EasyLoader indstillinger • Indstillinger – Geometri kontra Geografi – Schema – Giv “public” adgang til tabellerne • OBS: Det giver ”public” skriverettigheder til tabellen – Opret geografisk indeks i databasen – Opret ID kolonne som Identity – Konverter Dato og Tid koloner til DatoTid – Angiv rækkevis stil – Opret indeks på andre kolonner
  • 90. Tabelnavne og database-tabelnavne MapInfo tabeller • Adresser • Bygninger • Byflade • Vejmidter • Kommunegrænsen • Matrikler • Kommunale_grunde Database-tabelnavne → Adresser → Bygninger → Byflader → Vejmidter → Kommunegraenser → Matrikler → Kommunale_Grunde
  • 91. EasyLoader kommandolinje: A - F • /A Tilføj alle tabeller til samme servertabel – EasyLoader.exe /A • /B Schemanavn – EasyLoader.exe /B GIS • /C Opret indeks for alle lokalt indekserede kolonner – EasyLoader.exe /C • /D Mappe til lokale MapInfo tabeller til åbning af data fra databasen – EasyLoader.exe /D C:Tables • /E Eksklusiv bruger af tabellen – EasyLoader.exe /E • /F Navn på logfil – EasyLoader.exe /F ez_log.log
  • 92. EasyLoader kommandolinje: G - O • /G Giv “public” adgang til tabeller – EasyLoader.exe /G • /I Opret IKKE geografisk indeks – EasyLoader.exe /I • /K Opret “Identity” kolonne i SQL Server – EasyLoader.exe /K • /L Filnavn på fil med liste over MapInfo tabeller – EasyLoader.exe /L C:tabfiles.txt Eksempel på indhold i filen: D:DataAdresser.tab;Adresser D:DataBygninger.tab;Bygninger • /M Geografi gemt som koordinater {MICODE | XY} – EasyLoader.exe /M XY • /O Tilslutningsstreng til Oracle – EasyLoader.exe /O user_name/password@server_name
  • 93. EasyLoader kommandolinje: P - T • /P { A | C | R } Tilføj (A) / Opret (C) / Erstat (R) – EasyLoader.exe /P C • /Q Afslut EasyLoader efter udførsel – EasyLoader.exe /Q • /R Overskriv tabel i databasen – EasyLoader.exe /R • /S Tilslutningsstreng – EasyLoader.exe /S DSN=MyDataSource;UID=AdminUser;PWD=Admin – EasyLoader.exe /S UID=MyId;DATABASE=MyDB;HOST=MyServer; SERVER=MyServer_tli;SERVICE=sqlexec;PROTOCOL=onsoctcp • /T MapInfo tablenavn;Databasetabelnavn;Rækkeinterval !! Brug ikke anførselstegn (””) – EasyLoader.exe /T c:dataCities.tab;Cities;1,500
  • 94. EasyLoader kommandolinje: U - Z • /U Opret IKKE et primært indeks – EasyLoader.exe /U • /X Gem interval – EasyLoader.exe /X 1000 • /Y Navn på rækkevis stil kolonne – EasyLoader.exe /Y STYLE – EasyLoader.exe /Y NO_STYLE • /Z Brug altid Geometri – EasyLoader.exe /Z
  • 95. Upload via Gem kopi som • Fra MapInfo Professional can du gemme din tabel direkte over i en database via Filer > Gem kopi som... • Sørg for at vælge den ønskede database-tilslutning i Save as type listen • Indtast navnet på servertabellen og vælg det ønskede schema • Angiv efterfølgende navn på lokal tabel som peger på den nye tabel i databasen (via Direkte tilslutning) • Gem kopi som tilføjer automatisk: – MI_PRINX – MI_STYLE
  • 96. MapBasic syntaks for Save as • MapBasic syntaksen for at gemme en tabel i en database ser således ud: Commit Table AV97_W As "C:DBMSBuildings_Rotterdam.tab" Type ODBC Connection 1 Table """dbo""."“Buildings_SAS""" Type SQLServerSpatial Geometry ConvertDateTime ON Interactive • Nogle af parametrene er frivillige
  • 97. Dato-kolonner • Du kan risikere denne fejl: • Den kan skyldes at året er udenfor SQL Serveren interval for år i DateTime-formatet (1753 til 9999) • Du kan finde disse datoer med denne forespørgsel: Select * from MIN_TABEL Where not Year(DATO_KOLONNE) between 1753 and 9999 into Selection – hvor ”DATO_KOLONNE” er en Dato-kolonne i MapInfo
  • 98. Geografiske datafejl • Der kan være problemer med visse objekter i MapInfo tabeller. Det kan derfor være en god ide at køre nedenstående forespørgsler for at finde eventuelle oplagte problemer: • Finder flader med et areal under 1 kvm Select * From MIN_TABEL Where Str$(ObjectInfo(OBJ, 1)) In (”7”, ”8”, ”9”) Into __FLADER Select * From __FLADER Where CartesianArea(OBJ, ”sq m”) < 1 Into __MULIGE_FEJL_FLADER • Finder linære objekter med et længde under 1 m Select * From MIN_TABEL Where Str$(ObjectInfo(OBJ, 1)) In (”3”, ”4”) Into __LINJER Select * From __ LINJER Where CartesianObjectLen(OBJ, ”m”) < 1 Into __MULIGE_FEJL_LINJER
  • 99. Redigere i tabeller fra SQL Server
  • 100. Redigere • Tabellen i databasen skal have en primær indeks kolonne – I et view skal denne kolonne hedde MI_PRINX • Du kan redigere data med et hvert værktøj i MapInfo Professional • Når du redigerer koordinater på en XY-koordinat table, bliver koordinaterne opdateret i kolonnerne med X og Y-koordinater i database-tabellen • Hvis du ændrer stilen på en tabel, med rækkevis stil aktiveret, gemmes stilen i kolonnen med stile, ofte navngivet ”MI_STYLE”. På andre tabellen vil ændringer af stilen ikke blive fastholdt, når du opdaterer tabellen
  • 101. Redigering – Flere samtidige brugere • Hvis flere brugere skal redigere den samme tabel i SQL Server, skal de ikke tilgå denne tabel via den samme fysiske fil på harddisken. • Hvis de gør dette, vil kun en bruger kunne redigere tabellen ad gangen – de øvrige brugere vil blive forhindret i at redigere så snart den første brugere begynder at redigere. • De skal altså tilgå databasen via hver deres lokale kopi af en MapInfo tabel. Den kan være såvel sammenkædet som direkte
  • 102. Gemme • Tryk på Gem tabel for at gemme ikke gemte ændringer i en DBMS tabel • Når ændringer gemmes til databasen, undersøger MapInfo om posten der er blevet ændret, er blevet ændret i databasen efter den blev læst derfra. Hvis det er tilfældet bliver du præsenteret for en dialog, hvor du skal løse denne konflikt • Gemme ændringer lokalt i (kun for sammenkædede tabeller) kan gøres ved blot at lukke tabellen. MapInfo vil så spørge dig hvad der skal ske med de ikke-gemte ændringer:  Gem ændringer i MapInfo-Tabel – Gem ændringer på server – Fortryd ændringer
  • 103. Løs konflikter i MapInfo Pro • Hvis en tabel er blevet ændret i databasen, når du gemmer ændringer vil MapInfo præsenterer brugeren for en Løs konflikt dialogboks som vist • Du kan her se hvilke data/kolonner, der er blevet ændret • Du kan se den originale database version, den aktuelle MapInfo version og den aktuelle database version • Du kan vælge hvad der skal beholdes og hvad der skal ændres – kolonnevis • Du kan her se at kolonnen PANDSTATUS er ændret og til hvad. • Du kan også se at geografien (object) er blevet ændret. Det er dog svært at se på hvilken måde den er ændret
  • 105. Opdatere • Genindlæse data fra databasen kan gøres via Tabel > Juster > Opdater DBMS-Tabel... • Opdatere en DBMS-tabel – Undersøger ændringer i databasen – Anvender forespørgslen. Bemærk at disse betingelser er statiske. – Hvis du har angivet en forespørgsel med brug af aktuelt kort eller aktuel udvælgelse, vil den originale værdi igen blive anvendt. For at at angive en ny værdi, f.eks. Et nyt kortudsnit, er du nødt til at genåbne tabellen fra databasen og her angive den nye betingelse. • MapBasic syntaks: Server Refresh name_of_table
  • 106. Opdatere DBMS-tabeller via et arbejdsområde !Workspace !Version 950 !Charset WindowsLatin1 Dim nConn As Integer nConn = Server_Connect( "ODBC", "DSN=GIS;UID=EditUser;PWD=Edit" ) Print "Åbnet tilslutning som nr: " + nConn Print "Åbner nu tabellerne..." Open Table "D:3. demodbmsByflade.tab" Interactive Map From Byflade Print "Opdaterer nu DBMS-tabellerne..." Server Refresh Byflade Close Table Byflade Print "Så er vi færdige" Server nConn Disconnect Undim nConn
  • 107. DAG 3
  • 108. MapInfo tabeller kontra tabeller i SQL Server
  • 109. MapInfo tabeller kontra tabeller i SQL Server • Der er en række forskelle mellem MapInfos flade filer og opbevaring af data i SQL Server – Flere programmer kan tilgå data, ikke kun MapInfo software – Flerbruger editering – Alle fordelene ved relationelle databaser: relationer, views, sikkerhed, triggers mm. • Når data opbevares i MapInfos flade filer, skal en applikation håndtere elementer som – Tidsstempling ved ændring af data – Holde styr på historiske versioner af data – mm. • Når data opbevares i databasen, kan databasen varetage disse ting for alle programmer, der måtte tilgå data.
  • 110. Oprette views i SQL Server
  • 111. Hvad er et view? • Et view kan betragtes som en måde at se på data • Med et view kan man begrænse antallet af kolonner eller/og antallet af poster, man ser. • Med et view kan man også sammenstille flere kolonner til én kolonne. F.eks. kan man sammensætte VEJNAVN, HUSNR og HUSNR_BOGSTAV til en ADRESSE-kolonne • Man kan også bruge views til at berige et tabel med data fra en anden tabel, f.eks. overføre vejnavnet fra en vejnavnetabel til en tabel med adresser. Dette gøres ofte via et join, en sammenkædning, af tabeller. Du kan gøre dette enten på alfanmeriske eller geogratisk attributter. • Et view kan også sammensætte flere tabeller til en
  • 112. Oprette views i SQL Server – New view, tables • Højreklik på Views mappen og vælg New View… • Vælg den eller de tabellern som skal indgå i viewet fra Add Table dialogboksen
  • 113. Oprette views i SQL Server – joins • Træk kolonnen fra den første tabel over til kolonnen fra den anden tabel for at markere hvad de skal knytte de to tabeller sammen • Bemærk at dette også skrives i SQL vinduet nederst
  • 114. Oprette views i SQL Server – kolonner • Sæt nu flueben ved de kolonner, som du ønsker at medtage i viewet • Du kan omdøbe kolonnerne (give dem et alias) via Alias feltet
  • 115. Oprette views i SQL Server - test • Afprøv viewet via knappen Execute SQL, Ctrl + R eller F5 • Kontroller resultatet i listevinduet nederst
  • 116. Oprette views i SQL Server - gem • Tryk nu på knappen Save eller Ctrl + S og navgiv dit view • Overvej at ”prefixe” dit view med f.eks. ”view”, ”vw” eller lignende
  • 117. Oprette views i SQL Server – kortlægningsklar • Hvis viewet skal vises i et kortvindue i MapInfo Professional, skal du gøre det kortlægningsklart (registrere det i kortkataloget) via Tabel > Juster > Gør DBMS-tabel kortlægningsklar • Du kan også manuelt tilføje viewet til kortkataloget, hvis du kender alle parametrene • Du kan også kopiere posten med den grundlæggende tabel i kortkatalog, indsætte denne igen og ændre tabelnavnet til navnet på viewet
  • 118. Bedre performance med views • Opretter du views hvor du også ønsker at man skal kunne finde specifikke poster lynhurtigt, kan det være en fordel at indeksere dine views • For at kunne indeksere dine views skal de dog være koblet sammen med de bagvedliggende data, det kalder man SCHEMABINDING • Derudover skal du også lave et entydigt grupperet indeks (unique clustered index) før du kan indeksere andre kolonner • Nu kan du indeksere dine kolonner, f.eks. dit søgefelt med adresser eller lignende. • Læs mere her: – http://en.wikipedia.org/wiki/Materialized_view – http://msdn.microsoft.com/en-us/library/dd171921.aspx – http://www.mssqltips.com/sqlservertip/1610/sql-server-schema- binding-and-indexed-views/
  • 119. SCHEMABINDING • Højreklik på dit view og vælg Scritp View As > Alter To > New Query Window • Tilføj ”WITH SCHEMABINDING” som vist nedenfor • Tryk F5 eller vælg Execute-knappen for at ændre dit view
  • 120. Entydigt grupperet indeks • Højreklik på Index mappen under dit view og vælg Create New.... • Angiv et navn, f.eks. ”PK_” + navnet på dit view • Vælg din primære indeks kolonne via knappen Add • Vælg Clustered og sæt flueben i Unique • Tryk på OK
  • 121. Et view der sammensætter tabeller Nedenstående skal køres fra et Query-vindue – ikke som et view: Create View [dbo].[viewSearch] WITH SCHEMABINDING As Select VEJNAVN + ' ' + Cast(HUS_NR as VarChar) + HUSBOGSTAV + ', ' + Cast(POSTNR As VarChar) + ' ' + POSTDIST As SEARCHVALUE, MI_PRINX, SP_GEOMETRY From dbo.ADRESSER Union All Select MAS_MATRNR + ' ' + ELAVNAVN As SEARCHVALUE , (1000000 + MI_PRINX) As MI_PRINX , SP_GEOMETRY From dbo.JORDSTYKKER • Og tilføj den så til MapCatalog
  • 122. Introduktion til SQL Server's spatial objekter
  • 123. Geometry kontra Geography • Geometry datatypen understøtter plane – eller projicerede - data. Geometry datatypen overholder standarden Open Geospatial Consortium (OGC) Simple Features for SQL Specification version 1.1.0. • Derudover understøtter SQL Server Geography datatypen, som gemmer ellipsoidisk data, som f.eks. GPS længde/bredde koordinater. • Her er en oversigt over de objekttyper, som Geometry-typen understøtter: – Kun de blå er ”faktiske” objekter – http://msdn.microsoft.com/en-us/library/bb964711.aspx Punkt Linje Region Region Pline Multi Punkt Samlingsobjekt
  • 124. SQL Server 2008 kontra 2012 • Understøttelse af cirkelbuer og tilhørende metoder – STNumCurves – STCurveN – STCurveToLine – CurveToLineWithTolerance – BufferWithCurves • Beregning af korteste linje mellem to geometrier – ShortestLineTo • Validering af geometrier – Mere tolerant – IsValidDetailed • Præcision forbedret fra 27 til 48 bits – færre afrundingsproblemer • Mere automatisk oprettelse af spatiale indeks
  • 125. Geometry OGC metoder - 2008 • STArea • STAsBinary • STAsText • STBoundary • STBuffer • STCentroid • STContains • STConvexHull • STCrosses • STDifference • STDimension • STDisjoint • STDistance • STEndpoint • STEnvelope • STEquals • STExteriorRing • STGeometryN • STGeometryType • STInteriorRingN • STIntersection • STIntersects • STIsClosed • STIsEmpty • STIsRing • STIsSimple • STIsValid • STLength • STNumGeometries • STNumInteriorRing • STNumPoints • STOverlaps • STPointN • STPointOnSurface • STRelate • STSrid • STStartPoint • STSymDifference • STTouches • STUnion • STWithin • STX • STY De er alle følsomme overfor store/små bogstaver!!!
  • 126. Geometry OGC metoder - 2012 • STArea • STAsBinary • STAsText • STBoundary • STBuffer • STCentroid • STContains • STConvexHull • STCrosses • STCurveN • STCurveToLine • STDifference • STDimension • STDisjoint • STDistance • STEndpoint • STEnvelope • STEquals • STExteriorRing • STGeometryN • STGeometryType • STInteriorRingN • STIntersection • STIntersects • STIsClosed • STIsEmpty • STIsRing • STIsSimple • STIsValid • STLength • STNumCurves • STNumGeometries • STNumInteriorRing • STNumPoints • STOverlaps • STPointN • STPointOnSurface • STRelate • STSrid • STStartPoint • STSymDifference • STTouches • STUnion • STWithin • STX • STY De er alle følsomme overfor store/små bogstaver!!!
  • 127. Invalide geometrier • Finde poster med invalide geometrier Select * From dbo.MYTABLE Where SP_Geometry.STIsValid() = 0 • Korrigere poster med invalider geometrier Update dbo.MYTABLE Set SP_Geometry = SP_Geometry.MakeValid()
  • 128. Koordinatsystemer – EPSG-koder • Finde EPSG-koder for en tabel, også kaldet SRID: select distinct SP_GEOMETRY.STSrid from dbo.MINTABEL • Hvis den ikke er korrekt, kan man ændre den via denne kommando: Update dbo.MINTABEL Set SP_GEOMETRY.STSrid = 25832 • Dog bør man ikke ændre EPSG-koden til en for et helt andet koordinatsystem. Der findes dog koordinatsystemer med forskellige EPSG-koder, f.eks.: "UTM Zone 32 Euref89p25832“ , 8, 115, 7, 9.0, 0, 0.9996, 500000, 0 "ETRS TM Zone 32, Northern Hemisphere (ETRS89)p3044“ , 8, 115, 7, 9, 0, 0.9996, 500000, 0 • Problemet kan løses ved at kopiere MapInfoW.prj fra MapInfo Pro mappen over i Tools mappen. Bør allerede være rettet i v11.5 og nyere versioner
  • 129. Spatial SQL eksempler Beregne areal af valide objekter Select *, SP_GEOMETRY.STArea() As Area From dbo.BYFLADER Where SP_GEOMETRY.STIsValid() = 1 Beregne længder på valide objekter Select *, SP_GEOMETRY.STLength() As Length From dbo.VEJMIDTER Where SP_GEOMETRY.STIsValid() = 1
  • 130. Spatial SQL eksempler Find kommuner og deres naboer Select t1.KOMNAVN, t2.KOMNAVN From dbo.KOMMUNE t1, dbo.KOMMUNE t2 Where (t1.SP_GEOMETRY.STTouches(t2.SP_GEOMETRY) = 1 Or t1.SP_GEOMETRY.STIntersects(t2.SP_GEOMETRY) = 1) And t1.MI_PRINX <> t2.MI_PRINX Order By t1.KOMNAVN
  • 131. Spatial SQL eksempler Tilføj et bynavn til netop de veje, der skærer en by Select V.*, B.BYNAVN FROM dbo.VEJMIDTER AS V CROSS JOIN dbo.BYFLADE AS B WHERE (V.SP_GEOMETRY.STIntersects(B.SP_GEOMETRY) = 1) Tilføj et bynavn til de veje som skærer en by og NULL til de øvrige veje Select V.*, B.BYNAVN FROM dbo.VEJMIDTER AS V LEFT OUTER JOIN dbo.BYFLADE AS B On (V.SP_GEOMETRY.STIntersects(B.SP_GEOMETRY) = 1)
  • 132. Nogle join typer i SQL Server • Inner Join SELECT V.*, B.BYNAVN FROM dbo.VEJMIDTER AS V INNER JOIN dbo.BYFLADE AS B ON (V.SP_GEOMETRY.STIntersects(B.SP_GEOMETRY) = 1) • Left Outer Join SELECT V.*, B.BYNAVN FROM dbo.VEJMIDTER AS V LEFT OUTER JOIN dbo.BYFLADE AS B ON (V.SP_GEOMETRY.STIntersects(B.SP_GEOMETRY) = 1) • Cross Join SELECT V.*, B.BYNAVN FROM dbo.VEJMIDTER AS V CROSS JOIN dbo.BYFLADE AS B WHERE (V.SP_GEOMETRY.STIntersects(B.SP_GEOMETRY) = 1)
  • 133. Inner Join ID NAME LASTNAME 1 Peter 1 2 Paul 3 3 Mary 5 4 Ann 2 ID LASTNAME 1 Møller 2 Smith 3 McCartney 4 Probert ID NAME LASTNAME 1 Peter Møller 2 Paul McCartney 4 Ann Smith SELECT P.ID, P.NAME, L.LASTNAME FROM dbo.PERSONS AS P INNER JOIN dbo.LASTNAMES AS L ON (P.LASTNAME = L.ID)
  • 134. Left Outer Join ID NAME LASTNAME 1 Peter 1 2 Paul 3 3 Mary 5 4 Ann 2 ID LASTNAME 1 Møller 2 Smith 3 McCartney 4 Probert ID NAME LASTNAME 1 Peter Møller 2 Paul McCartney 3 Mary <NULL> 4 Ann Smith SELECT P.ID, P.NAME, L.LASTNAME FROM dbo.PERSONS AS P LEFT OUTER JOIN dbo.LASTNAMES AS L ON (P.LASTNAME = L.ID)
  • 135. Cross Join ID NAME LASTNAME 1 Peter 1 2 Paul 3 3 Mary 5 4 Ann 2 ID LASTNAME 1 Møller 2 Smith 3 McCartney 4 Probert ID NAME LASTNAME 1 Peter Møller 2 Paul McCartney 4 Ann Smith SELECT P.ID, P.NAME, L.LASTNAME FROM dbo.PERSONS AS P CROSS JOIN dbo.LASTNAMES AS L WHERE (P.LASTNAME = L.ID) Note: A Cross Join without condition will join every record in the first table with every record in the other table
  • 136. Triggers i SQL Server
  • 137. Hvad er Triggers? • En trigger kan blive kaldt når der sker noget specielt i databasen • De kan f.eks. kaldes når poster indsættes, opdateres eller slettes • De kan også blive kaldt når en bruger logger på databasen
  • 138. Trigger indstillinger • Højreklik på Databaseserveren > Properties, Advanced – Allow triggers to fire others sættes til FALSE • Højreklik på databasen > Properties, Options – Recursive triggers Enabled sættes til FALSE
  • 139. Midlertidige tabeller i triggers • SQL Server har to midlertidige tabeller, som kan anvendes i en trigger: • inserted – Indeholder de nye poster, der skal indsættes i, altså de ændringer der er foretaget – Findes ved indsættelse af nye poster og opdatering af poster • deleted – Indeholder posterne, der er blevet opdateret eller slettet, altså som posterne så ud inden de blevet rettet/slettet – Findes ved opdatering af poster og sletning af poster
  • 140. Blev en kolonne opdateret? • Man kan også forespørge på om en given kolonne blev opdateret i forbindelse med en opdatering. • Det gøres med funktionen Update(), som returner TRUE for kolonnenavne, som er blevet opdateret If UPDATE(BYGNINGSTYPE) Begin If (exists(Select * from inserted where BYGNINGSTYPE = 'Bygning, stråtag')) Begin Insert into dbo.StraataekSikkerhedszone (BYGN_ID, SP_GEOMETRY) (Select MI_PRINX, SP_GEOMETRY.STBuffer(150) From inserted Where BYGNINGSTYPE = 'Bygning, stråtag') End End
  • 141. Oprette triggers • Højreklik på Trigger mappen på den tabel, som du ønsker at oprette en trigger til og vælg New trigger… • Brug Query > Specify Values for Template Parameters eller Ctrl+Shift+M for at indsætte nogle standardværdier i triggeren • Nu skal du ”bare” tilpasse selve trigger udtrykket efter dine behov • Du skal eksekvere (Execute) triggeren for rent faktisk at oprette den
  • 142. Trigger kommando CREATE TRIGGER [schema_name.] trigger_name ON { table | view } [ WITH <dml_trigger_option> [ ,...n ] ] { FOR | AFTER | INSTEAD OF } { [INSERT] [,] [UPDATE] [,] [DELETE]} [ NOT FOR REPLICATION ] AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME <method specifier [ ; ] > }
  • 143. En trigger til alt • Man kan lave en trigger, der håndterer såvel indsættelse, opdatering og sletninger i en tabel. • Man skal sørge for at denne trigger kan fastslå, hvilken hændelse den kaldes for If (not exists(SELECT * FROM inserted)) Begin -- records where deleted/der blev slette poster End Else Begin If exists(SELECT * FROM deleted) Begin -- records where updated/der blev opdateret poster End Else begin -- records were inserted/der blev indsat poster End End
  • 144. Opret en tidsstemplende trigger ved opdatering CREATE TRIGGER dbo.trg_MY_TABLE_OnUpdate ON dbo.MY_TABLE AFTER UPDATE AS Begin Update dbo.MY_TABLE Set DATE_CHANGED = CURRENT_TIMESTAMP, USER_CHANGED = SYSTEM_USER Where MI_PRINX In (Select MI_PRINX From inserted); End GO
  • 145. Opret en tidsstemplende trigger ved indsættelse CREATE TRIGGER dbo.trg_MY_TABLE_OnInsert ON dbo. MY_TABLE AFTER INSERT AS Begin Update dbo.MY_TABLE Set DATE_CREATED = CURRENT_TIMESTAMP, USER_CREATED = SYSTEM_USER Where MI_PRINX In (Select MI_PRINX From inserted); End GO
  • 146. Opret en tidsstemplende trigger ved indsættelse og opdatering - I CREATE TRIGGER dbo.trg_MY_TABLE_OnInsert ON dbo. MY_TABLE AFTER INSERT AS Begin If exists(SELECT * FROM deleted) Begin -- records where updated/der blev opdateret poster Update dbo.MY_TABLE Set DATE_CREATED = CURRENT_TIMESTAMP, USER_CREATED = SYSTEM_USER Where MI_PRINX In (Select MI_PRINX From inserted); End Else ...
  • 147. Opret en tidsstemplende trigger ved indsættelse og opdatering - II ... begin -- records were inserted/der blev indsat poster Update dbo.MY_TABLE Set DATE_CREATED = CURRENT_TIMESTAMP, USER_CREATED = SYSTEM_USER Where MI_PRINX In (Select MI_PRINX From inserted); End End GO
  • 148. Opret en”historik” trigger CREATE TRIGGER dbo.trgCopyToHistory ON dbo.KOMMUNE AFTER DELETE,UPDATE AS Begin Insert Into dbo.KOMMUNE_historik (OBJECTID, ID_NR, NAVN, OBJEKTTYPE, OBJEKTKODE , ADM_KODE, MID_FEJL, PRODUCENT, MI_PRINX_ORIGINAL , SP_GEOMETRY, MI_STYLE) Select OBJECTID, ID_NR, NAVN, OBJEKTTYPE, OBJEKTKODE , ADM_KODE, MID_FEJL, PRODUCENT, MI_PRINX , SP_GEOMETRY, MI_STYLE From deleted End Go
  • 149. Trigger, der opdaterer X og Y koordinater • Create TRIGGER [dbo].[trg_MYTABLE_OnUpdate] ON [dbo].[MYTABLE] AFTER INSERT, UPDATE AS BEGIN UPDATE DBO.MYTABLE SET X = SP_GEOMETRY.STX, Y = SP_GEOMETRY.STY WHERE MI_PRINX IN (SELECT MI_PRINX FROM inserted) END
  • 150. Trigger der opretter stråtagssikkerhedszoner - I Create TRIGGER dbo.trgBygningerStraataekt ON dbo.Bygninger AFTER INSERT,DELETE,UPDATE AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; If (not exists(SELECT * FROM inserted)) Begin -- records where deleted -- vi sletter dem der blev slettet Delete From dbo.StraataekSikkerhedszone Where BYGN_ID In (Select MI_PRINX From deleted) end else end...
  • 151. Trigger der opretter stråtagssikkerhedszoner - II ... Begin if exists(SELECT * FROM deleted) begin -- records where updated If UPDATE(BYGNINGSTYPE) Begin -- ændringer i bygningstype, vi håndterer ændringer til/fra -- ‘Bygning, stråtag’ I kolonnen BYGNINGSTYPE Delete From dbo.StraataekSikkerhedszone Where BYGN_ID In (Select MI_PRINX From deleted where BYGNINGSTYPE = 'Bygning, stråtag') Insert into dbo.StraataekSikkerhedszone (BYGN_ID, MACRO_ITEM, SP_GEOMETRY) (Select MI_PRINX, 1, SP_GEOMETRY.STBuffer(200) From inserted Where BYGNINGSTYPE = 'Bygning, stråtag') End else ...
  • 152. Trigger der opretter stråtagssikkerhedszoner - III ... Begin If UPDATE(SP_GEOMETRY) Begin -- opdatering af geometrien skal afspejles i zonen Delete From dbo.StraataekSikkerhedszone Where BYGN_ID In (Select MI_PRINX From deleted where BYGNINGSTYPE = 'Bygning, stråtag') Insert into dbo.StraataekSikkerhedszone (BYGN_ID, MACRO_ITEM, SP_GEOMETRY) (Select MI_PRINX, 2, SP_GEOMETRY.STBuffer(200) From inserted Where BYGNINGSTYPE = 'Bygning, stråtag') End End End ...
  • 153. Trigger der opretter stråtagssikkerhedszoner - IV else begin -- records were inserted If (exists(Select * from inserted where BYGNINGSTYPE = 'Bygning, stråtag')) Begin -- nye poster blev indsat I tabellen bygninger -- vi opretter zoner for dem med stråtag Insert into dbo.StraataekSikkerhedszone (BYGN_ID, MACRO_ITEM, SP_GEOMETRY) (Select MI_PRINX, 4, SP_GEOMETRY.STBuffer(200) From inserted Where BYGNINGSTYPE = 'Bygning, stråtag') End End END GO
  • 154. Tilgå SQL Server via MapBasic
  • 155. Process • Opret tilslutning nConn = Server_Connect("ODBC", "DSN=GIS;UID=EditUser;PWD=Edit") • Gør ”noget” Server Create Map Server Create Style Server Create Table Server Link Table Register Table Server Refresh Server Set Map Server_Execute Commit Table … • Luk tilslutning Server nConn Disconnect
  • 156. Server_Execute • Du kan bruge Server_Execute funktionen til at sende SQL kommandoer til udførsel i databasen • Sikre dig at du har en tilslutning åben, her bruges tilslutning nr 1 Print Server_Execute(1, ”Drop table dbo.KOMMUNE”) Print Server_Execute(1, ”Delete From MapInfo.MapInfo_MapCatalog Where OWNERNAME = ’dbo’ and TABLENAME = ’KOMMUNE’”) • OBS: Ovenstående skal stå på én linje pr. kommando • Husk at erstatte ” og ’ i MapBasic –vinduet, hvís du kopieret ovenstående fra en PowerPoint
  • 157. MapBasic applikationer: Find DBMS • Find DBMS er et lille værktøj som illustrerer hvordan en søgning kan gøres via kald til en spatial database • Værktøjet søger i en foruddefineret tabel i databasen ved hjælp af tilslutning 1. Det kunne ændres til en specifik datakilde. • Med værktøjet kan du indtaste en værdi, du ønsker en søge efter. Når du trykker på Enter sendes SQL forespørgslen til database og matchende værdier returneres og vises i dialogboksen • Når du klikker på en af værdierne, markeres den tilsvarende post i kortet og der zoomes hen til posten • Bemærk at du også skal have tabellen åben i et kortvindue. • De forskellige navne er angivet i konfigurationsfilen: FIND DBMS.ini
  • 159. MapBasic applikationer: TableRefresh Tanken er at man installerer MapInfo Pro på en server eller en anden computer, som kører om natten. Derefter opretter man et job på computeren, som starter applikationen hver nat, hver søndag nat eller lignende. Programmet søger så efter tabeller i den angivne mappe og opdaterer dem, der skal og kan opdateres. Programmet styres af opsætningsfilen, som bestemmer: • i hvilken mappe, der skal søges efter tabeller • om der skal søges i undermapper • om DBMS-tabeller skal opdateres • om WFS-tabeller skal opdateres
  • 160. Tips
  • 161. Spørgsmål & svar Q Når jeg åbner en DBMS-tabel, får jeg at vide at tabellen er skrivebeskyttet? A Sikre dig at du har rettigheder til at ændre i tabellen i databasen og at tabellen har et entydigt primært indeks – for views skal denne kolonne hedde MI_PRINX Q Jeg får ikke valget mellem Oracle Spatial og ODBC? A Du har enten ikke installeret understøttelse for Oracle Spatial (OCI) eller også har du ikke en Oracle klient installeret Q Min DBMS-tabel kan ikke blive vist i et kortvindue? A Tabellen er sikkert ikke blevet registreret i kortkataloget. Gør den kortlægningsklar først Q Jeg har åbnet en DBMS-tabel og gjort den kortlægningsklar, men jeg kan stadig ikke tilføje den til et kortvindue? A Du skal genåbne tabellen fra databasen for at få MapInfo Professional til at læse kortlægningsinformationerne fra kortkataloget
  • 162. Spørgsmål & svar Q Hvordan kan jeg se kolonnerne med koordinater i MapInfo Professional? A Opret et view og tilføje disse kolonner to gange (en gang med et alias), gør viewet kortlægningsklart og åbn så viewet i stedet for den bagvedliggende tabel, se nærmere på næste side Q Når jeg åbner min tabel kan jeg ikke redigere kortdataene. Jeg kan dog redigere attributdataene? A Dette problem kan skyldes at du har valgt en skrivebeskyttet kolonne til at indeholde den rækkevis stil, for eksempel hvis kolonnen er breddere end 254 tegn Q Jeg kan ikke uploade en tabel til databasen vha. Gem kopi som. Jeg har slettet den gamle tabel i databasen? A Tabellen findes måske allerede i kortkataloget. Du skal fjerne den fra kortkataloget før du kan gemme den som.
  • 163. Spørgsmål & svar Q Jeg har lige oprettet kortkataloget via EasyLoader, men nu kan jeg ikke angive at min tabel skal anvende rækkevis stil – denne mulighed er inaktiv. Jeg har undersøgt at jeg har kolonne af typen varchar(254). Hva’ nu? A Hvis du havde en tilslutning åben til databasen i MapInfo Professional da du oprettede kortkataloget med EasyLoader, skal du nu lukke alle tilslutningr til databasen for at få MapInfo Professional til at genopfriske sit “syn” på kortkataloget
  • 164. Se koordinater i MapInfo Professional • MapInfo “gemmer” kolonner med koordinater, når de oversættes til et punkt • For at få vist koordinaterne skal du oprette et view der – Indeholder koordinaterne to gange – Indeholder den primære indeks kolonne under navnet MI_PRINX • Dette view kunne se således ud: SELECT HOLE_ID, ID, LENGTH, LOCATIONX, LOCATIONY, LOCATIONZ, LOCATIONX As X, LOCATIONY As Y, ID As MI_PRINX FROM dbo.DRILLHOLES • Til sidst skal du gøre viewet kortlægningklart vha. kolonnerne X og Y
  • 165. SQL Server tips • Tools > Options – Fjern flueben for ”Prevent saving changes that require table re- creation”. – Det gør det f.eks. muligt at ændre en kolonne fra nvarchar til varchar
  • 166. Spørgsmål ? The Power of Insight MapInfo Professional Peter Horsbøll Møller, Senior Systems Engineer peter.moller@pb.com