Welcome 
MapInfo User Conference 2014: GIS Gets Personal 
#MapInfoUC
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
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
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
MapBasic Help File 
INTRODUCTION 
How to read the Help File? 
MapBasic Fundamentals 
MapInfo User Conference 2014: GIS Gets Personal 
#MapInfoUC
MapBasic Documentation 
MapInfo User Conference 2014: GIS Gets Personal 
#MapInfoUC
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
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
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
MapInfo User Conference 2014: GIS Gets Personal 
#MapInfoUC 
Example
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
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
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
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
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()
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
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
From Points to Squares 
MapInfo User Conference 2014: GIS Gets Personal 
#MapInfoUC
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
MapInfo User Conference 2014: GIS Gets Personal 
#MapInfoUC 
Solutions 
Set CoordSys Table CriminalActivity 
Update CriminalActivity 
Set X = CentroidX(obj) 
, Y = CentroidY(obj) 
, CrimeID = ROWID
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
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
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")
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)
Get the latest 
MapInfo User Conference news: 
Twitter via #MapInfoUC 
and follow us @MapInfo 
MapInfo User Conference 2014: GIS Gets Personal 
#MapInfoUC

Automating Repetitive Tasks with MapBasic

  • 1.
    Welcome MapInfo UserConference 2014: GIS Gets Personal #MapInfoUC
  • 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 MapBasicHelp 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
  • 6.
    MapBasic Documentation MapInfoUser Conference 2014: GIS Gets Personal #MapInfoUC
  • 7.
    The Features ofthe 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 Conference2014: 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 MapBasicwindow 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
  • 10.
    MapInfo User Conference2014: GIS Gets Personal #MapInfoUC Example
  • 11.
    MapInfo User Conference2014: 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 Conference2014: 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 totable 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 Conference2014: 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 Conference2014: 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 Conference2014: 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 toSquares MapInfo User Conference 2014: GIS Gets Personal #MapInfoUC
  • 19.
    MapInfo User Conference2014: 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 Conference2014: GIS Gets Personal #MapInfoUC Solutions Set CoordSys Table CriminalActivity Update CriminalActivity Set X = CentroidX(obj) , Y = CentroidY(obj) , CrimeID = ROWID
  • 21.
    MapInfo User Conference2014: 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 Conference2014: 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 Conference2014: 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 Conference2014: 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