MapBasic hvad kan det bruges til? Insights Danmark 2011 Peter Horsbøll Møller September 2011
Program MapBasic - Hvad er det? MapBasic Eksempel 1 MapBasic Eksempel 2 Links
MapBasic hvad er det? MapBasic er Et scriptsprog til MapInfo Professional En teksteditor En kompiler Samme program! MapBasic findes i og udføres via Arbejdsområder MapBasic-vinduet i MapInfo Professional MapBasic applikationer kompileret med MapInfo Mapbasic
Hvordan kommer man i gang med MapBasic Download MapBasic MapBasic kan hentes gratis fra vores hjemmeside, se Links bagers MapBasic vinduet Brug MapInfo Professional med MapBasic-vinduet åbent og vinduet vil optage dine handlinger Kopier dem og indsæt dem i en ny fil i MapBasic-editoren Lav evt. nogle tilrettelser Kompiler dit lille program via MapBasic Kør det i MapInfo Professional Udvid det efter behov Begynd at strukturere det med procedurer og funktioner Begynd at strukturere det med moduler og MapBasic-projekter
MapBasic Eksempel 1 - Baggrundskort Lavet af Niels Lundbye-Christensen, Jammerbugt Kommune Gør det nemt for brugeren at åbne baggrundskort ind i et kortvindue Opretter nogle menupunkter Ved tryk på én af disse åbnes et foruddefineret datasæt, ofte rasterkort eller WMS-kort
Sub Main Create Menu "&Baggrundskort" As "&Skærmkort" Calling Sub1, "(-", "&Høje Målebordsblade 1842-1899" Calling Sub2, "&Lave Målebordsblade 1900-1960" Calling Sub3, "(-", "Topografisk kortværk &1 cm (1:100.000)" Calling Sub4, "Topografisk kortværk &2 cm (1:50.000)" Calling Sub5, "Topografisk kortværk &4 cm (1:25.000)" Calling Sub6, "(-", "Krak &Regionalkort" Calling Sub7, "Krak &Bykort" Calling Sub8, "(-", "L&uftfotos 2010" Calling Sub9, "(-", "Luk baggrundskortet" Calling CloseGroup, "(-", Jira " GIS Jammerbugt..." Calling SubGIS Alter Menu Bar Add "Baggrundskort" NameLayer = "ingen" End Sub
****************************************** sub sub1 NameBaggrund BibliotekLayer NamelayerOld NameLayer Call SubOpen End Sub = "Skærmkort = "O:\Grunddata\Skærmkort.TAB = NameLayer = "Skærmkort_Baggrundskort" ****************************************** sub sub2 NameBaggrund = "Høje Målebordsblade 1842-1899" BibliotekLayer = "O:\Grunddata\HøjeMålebord1842-99 NamelayerOld = NameLayer NameLayer = "HøjeMålebord1842_99_Baggrundskort" Call SubOpen End Sub
Generel funktion, der åbner for det ønskede baggrundskort. Anvender værdier fra sub1,sub2 osv. sub subopen 'Her kaldes sub-funktionen, der tjekker om der er et kortvindue åbent call CheckForOpenMapWindow 'Her kaldes sub-funktionen, der tjekker om der er et group layer, der hedder Baggrundskort call GroupTjek If OpenMap = 1 then End If Statusbar message NameBaggrund Print "Åbner " + NameBaggrund Open Table BibliotekLayer As NameLayer Interactive Add Map Layer NameLayer DestGroupLayer "Baggrundskort" position 10 End sub
'Funktionen tjekker om der er et åbent kortvindue Sub CheckForOpenMapWindow NumWin = NumWindows( ) if NumWin=0 then else End If Note "Der skal være et kortvindue åbent!" OpenMap = WindowInfo(FrontWindow(),Win_Info_Type) if OpenMap <> 1 then End If Note "Der skal være et kortvindue åbent!" End Sub
'Funktionen tjekker om der er et grouplayer, der hedder Baggrundskort Sub GroupTjek if OpenMap = 1 Then GroupLayerName lloffset = 0 ngrouplayers If ngrouplayers > 0 Then For i = 1 To ngrouplayers ll = lloffset + i Next End If = "Baggrundskort = Mapperinfo(WindowId(1),29) If GroupLayerInfo(WindowId(1),ll,1) = GroupLayerName Then remove map GroupLayer "Baggrundskort" interactive if NameLayerOld <> "ingen" then Close Table NameLayerOld Interactive end If 'Her kaldes sub-funktionen, der tilføjer GroupLayer '"Baggrundskort", og placerer det nederst Call AddGroup exit sub End if Call AddGroup End sub
Sub AddGroup nlayers = Mapperinfo(WindowId(1),28) Dialog Title "Indtast lagplacering Control StaticText Position 5,5 Title "Hvor skal baggrundskortet placeres? Control StaticText Position 5,15 Title " Der er i alt " + nlayers + " lag. Control StaticText Position 5,38 Title "Forvalgt: Nederst Control EditText Position 5,25 Width 75 ID 1 Value "Indtast evt. et tal Into LagPlacering Control OKButton Position 45, 50 If CommandInfo (CMD_INFO_DLG_OK) Then If LagPlacering = "Indtast evt. et tal" Then LagPlacering = nlayers+1 End If End If Add Map auto GroupLayer("Baggrundskort") Set Map Window frontwindow() Order GroupLayers 1 End Sub DestGroupLayer 0 Position LagPlacering
MapBasic Eksempel 2 Locate Files Lavet af undertegnede Tilføjer menupunkter til højrekliksmenuer i Lagkontrollen og Tabeloversigtsvinduet til bl.a. at lokalisere en fil fra en tabel i Windows Stifinder
Ønske fra Odense Kommune: Luk via Lagkontrollen
Links Den danske PBBI blog: danmark.pbbiblogs.com MapNetForum forum.gis-hotel.dk MapInfo-L groups.google.com/group/mapinfo-l MI Pro træningssvideor: www.pbinsight.com/support/training/video-tutorials Planer for produkterne: roadmap.pbinsight.com/ MI Pro dokumentation: www.pbinsight.com/support/product-documentation/details/mapinfo-professional Download MapBasic: www.pbinsight.com/support/product-downloads/for/mapbasic MI Pro prøveversion: www.pbinsight.com/support/product-downloads/for/mapinfo-professional PBBI Location Intelligence Blog: li.pbbiblogs.com/ Anden dokumentation: www.pbinsight.com/support/product-documentation/ Anden download: www.pbinsight.com/support/product-downloads/
Peter Horsbøll Møller, peter.moller@pb.com