MapInfo Professional 11.0 Hvordan man tilgår en database Peter Horsbøll Møller, Senior Systems Engineer Marts 2012
Opsætning af en spatial database så den kan anvendes fra MapInfo Professional 11.0 Anvende en spatial database fra MapInfo Professional 11.0 Kunne være enhver spatial database Kunne være MI Pro 10.0, 10.5 eller 11.0
Oprette en ODBC-datakilde Data Data
Oprette en datakilde til SQL Server 2008 Å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 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 Afprøv datakilden
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
Oprette kortkataloget EasyLoader Start EasyLoader fra Værktøjsstyringen Kør EasyLoader fra Værktøjsmenuen Åbn en tilslutning til databasen via ODBCknappen. 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
Å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 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
Forespørgsler Rækkefiltrering Du kan angive hvilke poster, du ønsker at hente fra databasen Ved hjælp af attributter Like og not like er kun tilgængelige for tekst-kolonner Brug ikke omkring tekstværdien! Ved hjælp af geografi 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 Værdien af Current_Mapper og Selection er statiske og opdateres ikke med nye værdier, når tabellen opdateres.
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
Genåbne en DBMS-tabel 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
Sammenkædet kontra Direkte
Sammenkædet kontra Direkte - Sammenkædet 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 - Direkte 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 - Direkte uden cache 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 Direkte med cache Direkte med cache Anvender en midlertidig cache MapInfo tabel gemt i Windows temp mappen 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 og når tabellen opdateres
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
Sammenkædet kontra Direkte 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
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 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 af 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 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. demo\dbms\byflade.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
MapInfo tabeller kontra tabeller i SQL Server
MapInfo tables versus tables in 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
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
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)
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
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
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
Spørgsmål? The Power of Insight MapInfo Professional Peter Horsbøll Møller, Senior Systems Engineer peter.moller@pb.com