Upload
peter-horsboll-moller
View
320
Download
21
Embed Size (px)
DESCRIPTION
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.
Citation preview
MapInfo User Conference 2014: GIS Gets Personal #MapInfoUC
Welcome
MapInfo User Conference 2014: GIS Gets Personal #MapInfoUC
Hands on Lab 14D Automating Repetitive Tasks with MapBasic
Peter Horsbøll MøllerGIS/LI Pre-Sales SpecialistJune 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 FileINTRODUCTION
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
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
MapInfo User Conference 2014: GIS Gets Personal #MapInfoUC
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
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_Data\CriminalActivity.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
MapInfo User Conference 2014: GIS Gets Personal #MapInfoUC
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
Exercise
Dataset
•US\CITY_125.TAB
•US\STATECAP.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()
MapInfo User Conference 2014: GIS Gets Personal #MapInfoUC
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
Exercise
Dataset
•US\States.TAB
•US\US_HIWAY.TAB
•US\USCities.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
MapInfo User Conference 2014: GIS Gets Personal #MapInfoUC
From Points to Squares
MapInfo User Conference 2014: GIS Gets Personal #MapInfoUC
Exercise
Dataset
•US\States.TAB
•US\US_HIWAY.TAB
•US\USCities.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 “…\US\USCities.tab" TYPE NATIVE Charset "WindowsLatin1" Interactive
Open Table “…\US\USCities.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 “…\US\USCities.tab" TYPE NATIVE Charset "WindowsLatin1" Interactive
Open Table “…\US\USCities.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)
MapInfo User Conference 2014: GIS Gets Personal #MapInfoUC
Get the latestMapInfo User Conference news:Twitter via #MapInfoUCand follow us @MapInfo