Time to look under the hood.
Open up the MapBasic window to see how you can automate data processing and other tasks using MapInfo Professional.
You might find some great time savers in this session.
You do not need to be a programmer to benefit from these techniques.
2. Hands on Lab
14D Automating Repetitive
Tasks with MapBasic
Peter Horsbøll Møller
GIS/LI Pre-Sales Specialist
June 13, 2014
Every connection is a new opportunity™
MapInfo User Conference 2014: GIS Gets Personal
#MapInfoUC
3. Automating Repetitive Tasks
with MapBasic
Time to look under the hood.
Open up the MapBasic
window to see how you can
automate data processing and
other tasks using MapInfo
Professional.
You might find some great
time savers in this session.
You do not need to be a
programmer to benefit from
these techniques.
MapInfo User Conference 2014: GIS Gets Personal
#MapInfoUC
4. MapBasic Documentation
MapBasic Help file: Help System (zip)
MapBasic Reference Guide: Reference
MapBasic User Guide: User Guide
MapInfo User Conference 2014: GIS Gets Personal
#MapInfoUC
5. MapBasic Help File
INTRODUCTION
How to read the Help File?
MapBasic Fundamentals
MapInfo User Conference 2014: GIS Gets Personal
#MapInfoUC
7. The Features of the MapBasic Window
The MapBasic window in MapInfo Professional:
•Can be opened via Options > Show MapBasic Window
•Records, when open, (most) actions performed by the
user in MapInfo Professional
•Can also ”play back” actions/statements
• Put the cursor in the line and hit the Enter-key
• Highlight several lines and hit the Enter-key
•You can save statements from the window to a text file via
the MapBasic menu
•You can clear the content in the window via the MapBasic
menu
MapInfo User Conference 2014: GIS Gets Personal
#MapInfoUC
8. MapInfo User Conference 2014: GIS Gets Personal
#MapInfoUC
Be adviced!
Please note that
•The MapBasic statements in the MapBasic window can be
very specific. They can for example refer to a specific
window, a specific table or similar
•The scenario might not be completely similar next time
you want to run a MapBasic statement. Maybe you don’t
have any tables open, maybe there are no open windows,
maybe the active window isn’t a map window and so on
9. Using the MapBasic window
Open the MapBasic window
Perform one or more actions using the interface in MapInfo
Professional, that is a menu item, a button or similar
Notice that the statements are written to the MapBasic
window
Now try to execute the statements one at a time via the
MapBasic window
Remember to clean up before you repeat the actions via
the MapBasic window: Close tables or revert changes to
tables and so forth.
MapInfo User Conference 2014: GIS Gets Personal
#MapInfoUC
11. MapInfo User Conference 2014: GIS Gets Personal
#MapInfoUC
Update Column
Normally you are limited to updating one column at a time
thru the Update Column dialog.
The MapBasic statement Update Table, however, lets you
update several columns at a time
Update table
Set column = expr [ , column = expr, ...]
[ Where RowID = idnum ]
Use the dialog to get the syntax for one column and then
modify the statement to update several afterwards
12. MapInfo User Conference 2014: GIS Gets Personal
#MapInfoUC
Exercise
Dataset
•Exercise_DataCriminalActivity.TAB
•Update X with CentroidX(OBJ) thru the dialog
•Modify the Update Table statement to also update:
• Y with CentroidY(OBJ)
• CRIMEID with RowID
•Consider setting the Coordinate System with:
• Set CoordSys Table C
13. Append Rows to table
With Append Rows to Table you can insert records from one
table into another table
Using the dialog you can however not control which column is
inserted into which column.
When using the dialog the order of the columns is important
You can get around this issue using the MapBasic window
Insert Into table [ ( columnlist ) ]
{ Values ( exprlist )
| Select columnlist From table }
Using columnlist you can specify columns with names like ID,
X, Y, NAME instead of COL1, COL2, COL2, COL4
MapInfo User Conference 2014: GIS Gets Personal
#MapInfoUC
14. MapInfo User Conference 2014: GIS Gets Personal
#MapInfoUC
Exercise
Dataset
•USCITY_125.TAB
•USSTATECAP.TAB
•Save a copy of StateCap as USCities
•Append City_125 to USCities using Append Rows to Table
•Revert changes to USCities
•Modify the statement to use column names
•Modify the statement to set FIPS_Code to ”00” for the cities inserted
15. MapInfo User Conference 2014: GIS Gets Personal
#MapInfoUC
Exercise
Modify your script to have the style of the state capitals as red circles
using the statement:
Set Style Symbol(35,16711680,12,"MapInfo Symbols",0,0)
And the style of the cities as grey circles using this statement:
Set Style Symbol (35,8421504,8,"MapInfo Symbols",0,0)
Use CreatePoint to recreate the points using the new style
You can set the style using Symbol Style and use this statement to get
the symbol printed to the Message window:
Print CurrentSymbol()
16. Creating Spatial Features
You can create points using Table > Create Points.
And you can create other basic spatial features using the
MapBasic window and some MapBasic functions:
CreatePoint(x, y)
CreateLine(x1, y1, x2, y2)
CreateCircle(x, y, radius)
Buffer(OBJ, resolution, distance, units) *
MBR(OBJ)
Offset(OBJ, direction, distance, units) *
OffsetXY(OBJ, offsetx, offsety, units) *
* Some of the functions above can be used in a Cartesian
as well as a Spherical version
MapInfo User Conference 2014: GIS Gets Personal
#MapInfoUC
17. MapInfo User Conference 2014: GIS Gets Personal
#MapInfoUC
Exercise
Dataset
•USStates.TAB
•USUS_HIWAY.TAB
•USUSCities.TAB (the table that we created in a previous exercise)
•Create buffers around the cities based on the population
•Set the size to (POP_1990 / 20000) miles – or pick your own size
•Set the style as blue border for cities and red for state capitals
18. From Points to Squares
MapInfo User Conference 2014: GIS Gets Personal
#MapInfoUC
19. MapInfo User Conference 2014: GIS Gets Personal
#MapInfoUC
Exercise
Dataset
•USStates.TAB
•USUS_HIWAY.TAB
•USUSCities.TAB (the table that we created in a previous exercise)
•Add four columns (X1, Y1, X2, Y2) of type Float to the table USCities
•Update these with:
• CentroidX(Offset(OBJ, 45, (POP_1990 / 20000), ”mi”))
• CentroidY(Offset(OBJ, 45, (POP_1990 / 20000), ”mi”))
• CentroidX(Offset(OBJ, 225, (POP_1990 / 20000), ”mi”))
• CentroidY(Offset(OBJ, 225, (POP_1990 / 20000), ”mi”))
•Create a square around each city using CreateLine and MBR
20. MapInfo User Conference 2014: GIS Gets Personal
#MapInfoUC
Solutions
Set CoordSys Table CriminalActivity
Update CriminalActivity
Set X = CentroidX(obj)
, Y = CentroidY(obj)
, CrimeID = ROWID
21. MapInfo User Conference 2014: GIS Gets Personal
#MapInfoUC
Solutions
Commit Table STATECAP As “…USUSCities.tab" TYPE NATIVE
Charset "WindowsLatin1" Interactive
Open Table “…USUSCities.TAB" Interactive
Insert Into USCities ( Capital, State, Pop_1990,
Num_HU_90) Select City, State, Tot_Pop, Tot_hu From
CITY_125
Insert Into USCities ( Capital, State, Pop_1990,
Num_HU_90) Select City, State, Tot_Pop, Tot_hu From
CITY_125
22. MapInfo User Conference 2014: GIS Gets Personal
#MapInfoUC
Solutions
Commit Table STATECAP As “…USUSCities.tab" TYPE NATIVE
Charset "WindowsLatin1" Interactive
Open Table “…USUSCities.TAB" Interactive
Set Style Symbol(35,16711680,12,"MapInfo Symbols",0,0)
Update USCities
Set OBJ = CreatePoint(CentroidX(OBJ), CentroidY(OBJ))
Set Style Symbol (35,8421504,8,"MapInfo Symbols",0,0)
Insert Into USCities
( Capital, State, Pop_1990, Num_HU_90, FIPS_CODE, OBJ)
Select City, State, Tot_Pop, Tot_hu, "00“
, CreatePoint(CentroidX(OBJ), CentroidY(OBJ))
From CITY_125
23. MapInfo User Conference 2014: GIS Gets Personal
#MapInfoUC
Solutions
Set Style Brush(1, 16777215, 16777215)
Set Style BorderPen(1, 2, 16711680)
Select * From USCities Where FIPS_Code <> "00" Into
__TO_UPDATE
Update __TO_UPDATE Set OBJ = Buffer(obj, 100, pop_1990 /
20000, "mi")
Set Style BorderPen(1, 2, 3175935)
Select * From USCities Where FIPS_Code = "00" Into
__TO_UPDATE
Update __TO_UPDATE Set OBJ = Buffer(obj, 100, pop_1990 /
20000, "mi")
24. MapInfo User Conference 2014: GIS Gets Personal
#MapInfoUC
Solutions
Alter Table "USCities"
(add X1 Float,Y1 Float,X2 Float,Y2 Float ) Interactive
Update USCities
Set X1 = CentroidX(Offset(OBJ,45,(POP_1990/20000),"mi"))
Update USCities
Set Y1 = CentroidY(Offset(OBJ,45,(POP_1990/20000),"mi"))
Update USCities
Set X2 = CentroidX(Offset(OBJ,225,(POP_1990/20000),"mi"))
Update USCities
Set Y2 = CentroidY(Offset(OBJ,225,(POP_1990/20000),"mi"))
Update USCities
Set OBJ = CreateLine(X1, Y1, X2, Y2)
Update USCities
Set OBJ = MBR(OBJ)
25. Get the latest
MapInfo User Conference news:
Twitter via #MapInfoUC
and follow us @MapInfo
MapInfo User Conference 2014: GIS Gets Personal
#MapInfoUC