115
Every connection is a new opportunity MapInfo Professional 11.0 SQL Server 2008 (Express) MUGUKI, London Peter Horsbøll Møller Systems Engineer January, 2012 Every connection is a new opportunity

Muguki session on MapInfo Professional 11 and SQL Server 2008

Embed Size (px)

DESCRIPTION

These are the slides from a three hour session I did in January 2012 on how to use SQL Server 2008 (or any spatial database) with MapInfo Professional 11.0 (or any version of MapInfo Professional after version 10.0)

Citation preview

Page 1: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

MapInfo Professional 11.0SQL Server 2008 (Express)

MUGUKI, London

Peter Horsbøll MøllerSystems EngineerJanuary, 2012

Every connection is a new opportunity™

Page 2: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Agenda

How to setup a spatial database to be used by MapInfo Professional 11.0

How to work with a spatial database from MapInfo Professional 11.0

How to take advantage of a spatial database in general

Page 3: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

A few words about myself

Live in Denmark with my family

Worked with the largest Danish partner developing MapBasic applications, doing training and support from 1996 until 2008.

Worked on a number of project using SQL Server with SpatialWare and Oracle

Have been working with PB Software for the last 4 years as a Systems Engineer

Moderator and an active member on the MapInfo-L

Page 4: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Page 5: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

DAY 1Hour 1

Page 6: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating database, login and users

Page 7: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

A few words on login and users

In most cases you will use Windwos Authentication and use the Windows usernames (and Active Directory)

This let’s you assign permissions to a AD group or a single Windows user

The SQL Server users can be used for giving a certain application access

Page 8: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating database, login and users

Page 9: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Schemas

Page 10: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

What is a schema in SQL Server?

A schema in SQL Server is a way to organise for instance your tables

Schemaes also lets you assign permission to a number of tables, by assigning permissions to the schema in stead of directly to the tables

You can use Schemaes as a way of organising your tables instead of using several databases

When you access the database from MapInfo Professional you can in the Open dialog choose what Schema you want to browse. In this way you can limit the number of tables shown in the dialog.

Page 11: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating a new schema

Page 12: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating a ODBC Data source

Data

Data

Page 13: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating a SQL Server 2008 data source

Data sources can be created manually or in a centralised way

They can be stored in files or in the registry

For SQL Server 2008 you should use the ”SQL Server Native Client 10.0” driver

Page 14: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

MARS connection

Multiple Active Result Sets (MARS)

Supported MapInfo Professional 10.5.2 SQLServer 2005 and 2008

MapInfo Professional will by default add this string to the connection string: “MARS Connection=true”

Improved performance when access a table, especially using Live with Cache. Access can be 5-10 times faster.

Page 15: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating a SQL Server 2008 data source

Page 16: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

The MapInfo Map Catalog

Page 17: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Map Catalog

The Map Catalog (MapInfo.MapInfo_MapCatalog) describes spatial tables in the database with values like: Kind of spatial table, for example. XY, SpatialWare, Oracle, SQL

Server, PostgreSQL/PostGIS, etc. Coordinate system Data bounds Symbol, default and per row Default view

• The Map Catalog must exist once in the databases holding spatial data, that must be accessed by MapInfo Professional

Page 18: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Map Catalog – Spatial type

Data storage 1 : MapInfo Code, XY with MapInfo key ( 3 columns) 4 : XY stored in two columns 13: Oracle Spatial 14: MapInfo SpatialWare for MS SQL Server 17: SQL Server 2008 Geometry 18: SQL Server 2008 Geography 19: PostgreSQL/PostGIS

Object types .0: Only Points .1: Only Lines/Polylines .2: Only Regions/Polygons .3: Mixture of object types is possible

Page 19: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating the Map Catalog

You can create the Map Catalog using EasyLoader, directly in the database using SQL or you can use the DBMS Catalog tool

The user creating the Map Catalog using EasyLoader needs a sysadmin server role.

If you create the Map Catalog using EasyLoader, make sure that you close all connections to the database before creating the Map Catalog. If not you might have issues using the Per Row Style option when making DBMS tables mappable.

Page 20: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating the Map Catalog – EasyLoader

Page 21: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Tables

Page 22: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating tables

You can create tables manually thru the Management Studio

Or thru MapInfo Professional

If you use MapInfo Professional it will do a number of things automatically for you, like adding the table to the MapCatalog, creating spatial index and primary index.

Page 23: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating tables – data typesExact numerics

Bigint (MapInfo type: Float)

– -9.223.372.036.854.775.808 – 9.223.372.036.854.775.807 Int (MapInfo type: Integer)

– -2.147.483.648 – 2.147.483.647 SmallInt (MapInfo type: SmallInt)

– -32.768 – 32.767 TinyInt (MapInfo type: SmallInt)

– 0 – 255 Bit (MapInfo type: Logical)

– 1 or 0 Decimal / numerical (MapInfo type: Decimal)

– -10^38 +1 – 10^38 –1

Page 24: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating tables – data types

Approximate Numerics Float (MapInfo type: Float) Real (MapInfo type: Float)

Date and time Datetime (MapInfo type: DateTime)

– From January 1, 1753, through December 31, 9999, with an accuracy of three-hundredths of a second, or 3,33 milliseconds

Date (MapInfo type: Date)

– From January 1, 1 A.D. through December 31, 9999 A.D.

Page 25: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating tables – data types

Character strings Char (MapInfo type: Char)

– Fixed-length non-Unicode data, max. 8.000 characters VarChar (MapInfo type: Char)

– Variable-length non-Unicode data, max. 8.000 characters Text (MapInfo type: Char)

– Variable-length non-Unicode data, max. 2,147,483,647 characters

Note: Character columns longer than 254 will be made read-only when opened in MapInfo Professional and they will only show the first 254 characters

Page 26: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating tables – data types

Spatial types Geometry (MapInfo type: Object)

– Does require the table to be registered in the MapCatalog, more on this later

Geography (MapInfo type: Object)

– Does require the table to be registered in the MapCatalog, more on this later

Page 27: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating a table - naming

Consider only using the characters A – Z and the numbers 0 – 9 and underscores (_) when naming your tables

Use the same naming convention for columns

SQL Server does however support national characters, spaces and some other special characters.

SQL Server has a list of reserved words that can’t be used as table or column names, see the complete list here: http://technet.microsoft.com/en-us/library/ms189822.aspx

If the tables must be used from MapInfo Professional it’s recommended to limit the names to 31 characters

Also note that the columns for table and column names in the MapCatalog is limited to 32 characters. If you want to use longer names, you need to extend these

Page 28: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating tables – considerations

Avoid the unicode column types (nchar, nvarchar, ntext) as MapInfo Professional can’t edit these

Avoid creating character string column wider than 254 as MapInfo Professional can’t edit these

Consider naming your Primary key column MI_PRINX. MapInfo Professional will use this as the primary key in views

Consider adding Identity columns to all your table for the Primary Index column. This will automatically update this column with unique values when inserting new records (similar to AutoNumber in MS Access)

Page 29: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating tables thru Management Studio

Page 30: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating tables thru MapInfo Pro

Page 31: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Uploading tables to SQL Server

Page 32: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

EasyLoader

EasyLoader …

… is provided with MapInfo Professional. It can also be downloaded from our website

… is a standalone application that can run outside of MapInfo Professional

… is a Windows application but it can connect to databases running on other operating systems

… can be run in batch mode command prompt bat file program

Page 33: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Uploading thru EasyLoader

Page 34: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Using EasyLoader as a batch uploader

Samples on how to pass parameters to EasyLoader for doing batch uploads

Upload a single table “C:\Program\MapInfo\Professional\Tools\easyloader.exe”

/B dbo /E /F c:\ezload.log /G /K /P R /S DSN=GIS;UID=AdminUK;PWD=Admin /Q /Y MI_STYLE /T C:\Maps\Addresses.tab;Addresses

Upload multiple tables using a text file “C:\Program\MapInfo\Professional\Tools\easyloader.exe”

/B MAPS /E /F c:\ezload.log /G /K /P R /S DSN=GIS;UID=AdminUK;PWD=Admin /Y MI_STYLE /L C:\tabfiles.txt

Makes it easy to rerun the uploads!

Page 35: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Uploading thru EasyLoader - batchmode

Page 36: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Upload using Save as

Within MapInfo Professional you can save your table directly to the data using File > Save Copy as…

Make sure you select the database connection in the file type drop down list

Enter the name of the server table

Enter the name of the tab file (using Live connection)

• Will automatically add:– MI_PRINX– MI_STYLE

Page 37: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

MapBasic syntax for Save as

The MapBasic syntax for saving table to a database looks like this:

Commit Table AV97_W As "C:\DBMS\Buildings.tab" Type ODBC Connection 1 Table """dbo""."“Buildings""" Type SQLServerSpatial Geometry ConvertDateTime ON Interactive

Some of the parameters are optional

Page 38: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Uploading thru Save as

Page 39: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Spatial errors

Certain objects from MapInfo tabellens can result in errors. It can be a good idea to run queries like these to find obvious issues:

Regions with an area of less than 1 sq meter

Select * From MY_TABLEWhere Str$(ObjectInfo(OBJ, 1)) In (”7”, ”8”, ”9”)And CartesianArea(OBJ, ”sq m”) < 1Into __POSSIBLE_ISSUES_REGIONS

Lines with a length of less than 1 meterSelect * From MY_TABLE

Where Str$(ObjectInfo(OBJ, 1)) In (”3”, ”4”)And CartesianObjectLen(OBJ, ”m”) < 1Into __POSSIBLE_ISSUES_LINES

Page 40: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Opening tables into MapInfo Professional

Page 41: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Opening a remote table

Select File > Open

Click on Open DBMS Connection or select the open connection in the Files of Type dropdown list

Select the table to open and click Open.

Page 42: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Opening DBMS tables into MapInfo Pro

Page 43: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Reopening a remote table

It’s only the first time you open a DBMS table, that you need to specify which data to open

Afterwards you can reopen this table by opening the tab file

The tab file contains all the necessary information Table structure Connection information Can also hold the Username and Password

If the table was opened as ”Linked”, you may want to refresh the data.

If the table was opened as ”Live”, MapInfo will read the latest data from the database

Page 44: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Meta data section - Linked!table!version 400!charset WindowsLatin1

Definition Table Type LINKED Charset "WindowsLatin1" Fields 4 MI_PRINX Integer ReadOnly ; PLACENAME Char (50) ; DESCRIPTION Char (250) ; TYPE Char (20) ;begin_metadata"\DATALINK" = """\DATALINK\ConnectionString" = "DSN=GIS2;Description=SQL Server

2008 GIS database;UID=AdminUser;APP=MapInfo Professional®;WSID=DKMP12948"

"\DATALINK\Query" = "select ""MI_PRINX"", ""PLACENAME"", ""DESCRIPTION"", ""TYPE"", ""OBJECT"" from ""GIS"".""dbo"".""PointsOfInterest"""

"\IsReadOnly" = "FALSE"end_metadata

Page 45: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Meta data section - Live!table!version 500!charset WindowsLatin1

Definition Table Type ODBCbegin_metadata"\IsReadOnly" = "FALSE""\DATALINK" = """\DATALINK\Query" = "Select * From

""GIS"".""dbo"".""PointsOfInterest""""\DATALINK\ConnectionString" = "DSN=GIS2;Description=SQL Server

2008 GIS database;UID=AdminUser;APP=MapInfo Professional®;WSID=DKMP12948"

"\DATALINK\ToolKit" = "ODBC""\CACHE" = "ON""\MBRSEARCH" = "ON"end_metadata

Page 46: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

MapInfo Pro: Linked vs Live tables

Page 47: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Linked

• Data is copied to the MapInfo table the when you create the linked table and when you refresh it

• Access to the database is only needed when saving or refreshing -> working offline and long transactions are built in so your data is locally available

• Speed is as fast as local data after download

• Data can be accessed read-only without a primary key

• Using a query to get just the data you need, will speed up download time. Queries are set when you create the linked table via the Row, Column or Expert dialogs

• Data is downloaded to the same location as the .TAB file

• Duplicate data

Page 48: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Live with/without cache

• First time opening a table may be faster – depending on the zoom of your map window

• One “view entire layer” or zoom out to the entire view will download the whole table

• Data must have a primary key

• You always need access to the database

Page 49: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Live without cache

• MapInfo Professional “always” reads directly from the database

• Every draw, browse, select click which can negatively affect performance.

• Data is reread from the server on every access

Page 50: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Live with Cache

• Uses a temporary cache Since 9.5.1

– MapInfo table stored in a temporary MapInfo table.

– The cache is progressive, as you pan, zoom out or have more than one map window of the same data, the cache grows

• Data is cached as used in the map, so subsequent access to the same data will be quicker

• The cache is cleared when the table closes

Page 51: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Conclusions

Only use LIVE WITHOUT CACHE when The data is highly volatile (changing minute to minute or even

sooner)

Use LIVE WITH CACHE when The table data is very large and it is not feasible to create a filter

query to download less data Your data changes regulary, for instance every day or during the

day

Use LINKED when Your data is static or only changes ones a day/week/month/year Performance is important You want to do advanced spatial analysis on the data in

MapInfo Pro

Page 52: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Conclusions

• If you have a small data size in your table, it will probably not matter if you choose Live or Linked

• Using a LIVE table ensures that users log onto the database before they can access the data

• If you use live tables we recommend that you access your data thru a workspace with zoom levels set on the live table to prevent downloading unnecessary data

• The support for MARS has improved the use of live with cache

Page 53: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

DAY 2Hour 2

Page 54: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Querying

Page 55: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

When is the query performed?

For Linked tables query is performed when the table is opened the first time the table is refreshed.

For Live with cache tables query is performed when the table is added to a map you zoom or pan in the map

For Live without cache query is performed when the table is added to a map you zoom or pan in the map you refresh the map …

Page 56: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Row filtering

You can specify which records to retrieve from the database by attributes

And by geography

Value of Current_Mapper and Selection are static and not updated when the table is refreshed.

“Selection” only available when a selection is active“Current_Mapper” only available when a map is active“Object” is only available for mappable tables

“Like” and “not like” only available for text columnsDo not use ”” around text values!

Page 57: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Querying - Expert

Write your own SQL statement

Syntax depends on the SQL dialect of the database

MapInfo Professional will “translate” certain expression when passing the query to the database: Object Within Selection Current_Mapper …

You can save and open queries using the two buttons on the right side of the dialog

Page 58: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Metadata of a spatial query!table!version 650!charset WindowsLatin1

Definition Table Type LINKED Charset "WindowsLatin1" Fields 3 MI_PRINX Integer ReadOnly ; NAME Char (50) ; TYPE Char (50) ;begin_metadata"\IsReadOnly" = "FALSE“"\DATALINK" = """\DATALINK\ConnectionString" = "DSN=GIS;MARS_Connection=Yes""\DATALINK\Query" = "select ""MI_PRINX"", ""NAME"", ""TYPE"", ""OBJECT""

from ""GIS"".""dbo"".""POI"" where (OBJECT within Rectangle( 628163.45078508,6112409.85175394,720526.19639343,6186305.28363101))"

"\DATALINK\SpatialObj" = "ST_Spatial(HG_Box(ST_Point(628163.451003735300, 6186305.285449981700),ST_Point(720526.200186016970,6112409.856650807900)) ,ST_Point(674344.821471954000,6149357.566051412400))"

end_metadata

Page 59: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Editing tables from SQL Server

Page 60: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Editing

The remote table must contain a primary unique index In a view this column should be named MI_PRINX

You can edit the data with every tool available in MapInfo Professional

When editing coordinates of a XY-coordinate table, the coordinates are updated in the columns with the X and Y coordinates in the database table

When changing the style on a table that has ”per row style” enabled the new style will be stored in the column holding the style. On other tables the change of style will be dismissed when you refresh the table

Page 61: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Editing – by multiple users

If multiple users are editing the same table in SQL Server, they must not access this database table thru the same physical file on disk.

If they do only one user will be able to edit the table at a time – the others will be prevented from editing as soon as the first users starts editing.

They must access the database table thru their own (local) copy of a MapInfo table, can be linked as well as live

Page 62: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Saving

Click Save Table to save the pending edits to the DBMS table

When saving the edits to the database, MapInfo checks if the records you have changed, have been changed in the database since you accessed these. If so, a dialog appears asking you to solve the conflict

If you are using a linked table, MI Pro will ask if you want to refresh the table as well. I would recommend that you say yes

Saving changes offline (only for Linked tables) can be done by closing the table. MapInfo will ask how to store the pending edits: Save Changes to MapInfo Table Save Changed to Server Discard Changes

Page 63: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Editing

Page 64: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Conflict resolution in MapInfo Pro

If a table has been changed in the database when being saved, MapInfo will prompt the user with a Conflict Resolution dialog like this one

Here you can see what has been changed.You can see the original server version, the current MapInfo version

and the current server versionYou can decide what to keep and what to change – column by column

• Here you can see that column KATEGORI has been changed, and how.

• You can also see that the geometry (object) has been changed. Harder to see how that has changed

Page 65: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Editing – conflict resolution

Page 66: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Refreshing linked tables

Page 67: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Refreshing

Reloading data from the database can be done with Table > Maintenance > Refresh DBMS Table...

Refreshing a DBMS table Checks the database for changes Reapplies the query condition. Note that the query conditions

are static. If you have specified to filter using the current map or current

selection, this filter will always be applied to the table. To specify a different map extent, you have to reopen the table from the database.

MapBasic syntax is: Server Refresh name_of_table

Page 68: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Refreshing DBMS tables thru a workspace

!Workspace!Version 950!Charset WindowsLatin1Dim nConn As IntegernConn = Server_Connect( "ODBC", "DSN=GIS;UID=EditUser;PWD=Edit" )Print “Connection opened as no: " + nConnPrint “Now opening tables..."Open Table "D:\3. demo\dbms\Buildings.tab" InteractiveMap From BuildingsPrint “Refreshing the DBMS tables..."Server Refresh BuildingsClose Table BuildingsPrint “We are done!"Server nConn DisconnectUndim nConn

Page 69: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Files versus database

Page 70: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Files versus database

The are a number of differences between MapInfo’s flat tab files and keeping the data in SQL Server Several applications can access the data, not only MapInfo

software Multiple user editing The entire database stuff: relations, views, security, triggers etc.

When data is kept in the flat MapInfo tab files, the application needs to handle things like timestamp on change keeping historic versions etc.

When the data is in the database, the database can manage these things.

Page 71: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating views in SQL Server

Page 72: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

What is a view?

Et view can be seen as a way to look at your data

With a view you can limit the number of columns and/or records you want to see, for instance to separate a table of roads into different road classes

With a view you can merge multiple columns to one column, for instance merge road name and house no to a address column

You can also use a view to enrich one table with data from another table, for isntance by transfering the postal area name from a postal table to a table with addresses. You often do this by joining these tables. This can be done thru alphanumerical or spatial attributes

A view can also be used to merge multiple tables into one.

Page 73: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating views in SQL Server – mappable

If the views must be mappable from within MapInfo Pro, you need to make the view mappable

You can also manually add the view to the MapInfo_MapCatalog – if you know all the parameters

Or you can copy the record of the base table in the Map Catalog, insert the copy and change the name of the table to the name of the view

Page 74: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating views

Page 75: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Making a DBMS table mappable

Page 76: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Making a DBMS table mappable

This will add a record of that table to the MapInfo MapCatalog specifying how MapInfo Professional should show this table in a map

You need to specify where to get the spatial data, what coordinate system to use and what symbology to apply to the spatial data when displaying it in MapInfo Professional

You can do this thru Table > Maintenance > Make DBMS Table Mappable in MapInfo Professional

or by copying and modifying a record in the MapCatalog

Page 77: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Making DBMS tables mappable

Page 78: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

A view that merges tables

The statement below should be run from a Query-vindue – not thru View > Create New:

Create View dbo.viewAddressesUnion As SELECT *

FROM dbo.ADDRESSES_AUNION ALLSELECT *

FROM dbo.ADDRESSES_B

Add it to the MapCatalog if it is mappable

Page 79: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Improved performance with views

If you create a view that you want to search for specific records, it might be an idea to index the view

To be able to index your views, you need to bind the views with the data used in the views, this is called SCHEMABINDING

You also need a unique clustered index. Otherwise you can’t index other columns

Now you can index other columns, for instance the column with your addresses or the like.

Read more here: http://en.wikipedia.org/wiki/Materialized_view http://msdn.microsoft.com/en-us/library/dd171921.aspx http://www.mssqltips.com/sqlservertip/1610/sql-server-schema-

binding-and-indexed-views/

Page 80: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

SCHEMABINDING

Right click on your view and select Scritp View As > Alter To > New Query Window

Add ”WITH SCHEMABINDING” as shown below

Hit F5 or click the Execute button to modify the view

Or set it while creating the view

Page 81: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Unique Clustered Index

Right click on the Index folder of your view and select Create New....

Write a name, like ”PK_” + the name of your view

Pick the primary key column using the Add button

Choose Clustered and check Unique

Hit OK

Page 82: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating indexed views

Page 83: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Introduction to Geometry type

Page 84: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Geometry vs Geography

The geometry data type supports planar, or Euclidean (flat-earth), data. The geometry data type conforms to the Open Geospatial Consortium (OGC) Simple Features for SQL Specification version 1.1.0.

In addition, SQL Server supports the geography data type, which stores ellipsoidal (round-earth) data, such as GPS latitude and longitude coordinates.

Read more:• http://msdn.microsoft.com/en-us/library/bb964711.aspx

Point

LineRegion

RegionPline

MultiPoint

Collection

Page 85: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Geometry OGC methodsSTArea

STAsBinary

STAsText

STBoundary

STBuffer

STCentroid

STContains

STConvexHull

STCrosses

STDifference

STDimension

STDisjoint

STDistance

STEndpoint

STEnvelope

• STEquals

• STExteriorRing

• STGeometryN

• STGeometryType

• STInteriorRingN

• STIntersection

• STIntersects

• STIsClosed

• STIsEmpty

• STIsRing

• STIsSimple

• STIsValid

• STLength

• STNumGeometries

• STNumInteriorRing

• STNumPoints

• STOverlaps

• STPointN

• STPointOnSurface

• STRelate

• STSrid

• STStartPoint

• STSymDifference

• STTouches

• STUnion

• STWithin

• STX

• STY

They are all case sensitive!!!

Page 86: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Invalid geometries

Find records with invalid geometries

Select * From dbo.MYTABLEWhere SP_Geometri.STIsValid() = 0

Fix records with invalide geometries – pure magic!? Or not!?

Update dbo.MYTABLESet SP_Geometri = SP_Geometri.MakeValid()

Page 87: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Coordinate systems – EPSG codes

Querying EPSG codes for a table, også known as SRID:

select distinct SP_GEOMETRY.STSrid from dbo.MYTABLE

If it isn’t ”right”, you can change it using this statement:Update dbo.MYTABLE Set SP_GEOMETRY.STSrid = 25832

But do not change the EPSG code to one of a completely different coordinate system.

But there does exist coordinate systems with different EPSG codes!:

"UTM Zone 32 Euref89\p25832“, 8, 115, 7, 9.0, 0, 0.9996, 500000,

0"ETRS TM Zone 32, Northern Hemisphere (ETRS89)\p3044“

, 8, 115, 7, 9, 0, 0.9996, 500000, 0

Note that EasyLoader has its own projection file!!

Page 88: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Spatial SQL samples

Adding a column with the area

Select *, SP_GEOMETRY.STArea() As Area From dbo.PLACES

Adding a column with the length

Select *, SP_GEOMETRY.STLength() As Length From dbo.ROADS

Page 89: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Spatial SQL samples

Finding municipalities and their neighbours

Select t1.NAME, t2.NAME From dbo.MUNICIPALITIES t1, dbo.MUNICIPALITIES t2 Where (t1.SP_GEOMETRY.STTouches(t2.SP_GEOMETRY) = 1 Or t1.SP_GEOMETRY.STIntersects(t2.SP_GEOMETRY) = 1) And t1.MI_PRINX <> t2.MI_PRINX Order By t1.NAME

Page 90: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Spatial SQL samples

Adding city name to only those roads, that intersects a citySelect R.*, P.PLACENAMEFROM dbo.ROADS AS R

CROSS JOIN dbo.PLACES AS PWHERE (R.SP_GEOMETRY.STIntersects(P.SP_GEOMETRY) = 1)

Adding city name to the roads, that intersects a city and NULL to the other roads

Select R.*, P.PLACENAMEFROM dbo.ROADS AS R

LEFT OUTER JOIN dbo.PLACES AS POn (R.SP_GEOMETRY.STIntersects(P.SP_GEOMETRY) = 1)

Page 91: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Some (spatial) join types of SQL Server

Inner JoinSELECT R.*, P.PLACENAMEFROM dbo.ROADS AS R INNER JOIN dbo.PLACES AS PON (R.SP_GEOMETRY.STIntersects(P.SP_GEOMETRY) = 1)

Left Outer JoinSELECT R.*, P.PLACENAMEFROM dbo.ROADS AS R LEFT OUTER JOIN dbo.PLACES AS PON (R.SP_GEOMETRY.STIntersects(P.SP_GEOMETRY) = 1)

Cross JoinSELECT R.*, P.PLACENAMEFROM dbo.ROADS AS R CROSS JOIN dbo.PLACES AS PWHERE (R.SP_GEOMETRY.STIntersects(P.SP_GEOMETRY) = 1)

Page 92: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Inner Join

ID NAME LASTNAME

1 Peter 1

2 Paul 3

3 Mary 5

4 Ann 2

ID LASTNAME

1 Møller

2 Smith

3 McCartney

4 Probert

ID NAME LASTNAME

1 Peter Møller

2 Paul McCartney

4 Ann Smith

SELECT P.ID, P.NAME, L.LASTNAMEFROM dbo.PERSONS AS P INNER JOIN dbo.LASTNAMES AS LON (P.LASTNAME = L.ID)

Page 93: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Left Outer Join

ID NAME LASTNAME

1 Peter 1

2 Paul 3

3 Mary 5

4 Ann 2

ID LASTNAME

1 Møller

2 Smith

3 McCartney

4 Probert

ID NAME LASTNAME

1 Peter Møller

2 Paul McCartney

3 Mary <NULL>

4 Ann Smith

SELECT P.ID, P.NAME, L.LASTNAMEFROM dbo.PERSONS AS P LEFT OUTER JOIN dbo.LASTNAMES AS LON (P.LASTNAME = L.ID)

Page 94: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Cross Join

ID NAME LASTNAME

1 Peter 1

2 Paul 3

3 Mary 5

4 Ann 2

ID LASTNAME

1 Møller

2 Smith

3 McCartney

4 Probert

ID NAME LASTNAME

1 Peter Møller

2 Paul McCartney

4 Ann Smith

SELECT P.ID, P.NAME, L.LASTNAMEFROM dbo.PERSONS AS P CROSS JOIN dbo.LASTNAMES AS LWHERE (P.LASTNAME = L.ID)

Note: A Cross Join without condition will join every record in the first table with every record in theother table

Page 95: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating spatial joins

Page 96: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Triggers i SQL Server

Page 97: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

What are Triggers?

A trigger can be called when something happens in the database

It can be called when records are inserted, updated, deleted

It can be called when a user logs onto the database

A trigger can be used to stamp records with information on who changed them and when

A trigger can be used to copy changed records to a historic table

Page 98: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Temporary tables in triggers

SQL Server has two temporary tables, that can be accessed in a trigger:

inserted Contains the new records, that are to be inserted. This table

contains the changed records as they look after the change Exists on insert and on update

deleted Contains the records that have been deleted or updated. This table

contains the records as they look before they are changed/deleted Exists on update and on delete

Page 99: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Trigger statement

CREATE TRIGGER [schema_name.] trigger_name ON { table | view } [ WITH <dml_trigger_option> [ ,...n ] ] { FOR | AFTER | INSTEAD OF } { [INSERT] [,] [UPDATE] [,] [DELETE]}[ NOT FOR REPLICATION ] AS { sql_statement [ ; ]

[ ,...n ]

| EXTERNAL NAME <method specifier [ ; ] > }

Page 100: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Create a timestamp trigger on update

CREATE TRIGGER dbo.trg_MY_TABLE_AfterUpdate ON dbo. MY_TABLEAFTER UPDATEAS Begin Update dbo.MY_TABLE Set DATE_CHANGED = CURRENT_TIMESTAMP,

USER_CHANGED = USER Where MI_PRINX In (Select MI_PRINX From inserted);EndGO

Page 101: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Create a timestamp trigger after insert

CREATE TRIGGER dbo.trg_MY_TABLE_AfterInsert ON dbo. MY_TABLEAFTER INSERTAS Begin Update dbo.MY_TABLE Set DATE_CREATED = CURRENT_TIMESTAMP,

USER_CREATED = USER Where MI_PRINX In (Select MI_PRINX From inserted);EndGO

Page 102: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Create a ”history” trigger

CREATE TRIGGER dbo.trgCopyToHistory ON dbo.ADM_KOMMUNE_2007 AFTER DELETE,UPDATEAS Begin Insert Into dbo.ADM_KOMMUNE_2007_history (OBJECTID, NAME, OBJECTTYPE, ADM_CODE

, MI_PRINX_ORIGINAL, SP_GEOMETRY, MI_STYLE) Select OBJECTID, NAME, OBJECTTYPE, ADM_CODE

, MI_PRINX, SP_GEOMETRY, MI_STYLEFrom deleted

EndGo

Page 103: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Trigger updating X and Y columns

Create TRIGGER [dbo].[trg_MYTABLE_AfterUpdate]    ON  [dbo].[MYTABLE]    AFTER INSERT, UPDATE AS BEGIN

UPDATE DBO.MYTABLE SET X = SP_GEOMETRY.STX,

Y = SP_GEOMETRY.STY WHERE MI_PRINX IN (SELECT MI_PRINX FROM inserted)

END

Page 104: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Creating triggers

Page 105: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

DAY 3Hour 3

Page 106: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Using MapBasic to access SQL Server

Page 107: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Process

Create connectionnConn = Server_Connect("ODBC“, "DSN=GIS")

Do somethingServer Create MapServer Create StyleServer Create TableServer Link TableRegister TableServer RefreshServer Set MapServer_ExecuteCommit Table…

Close ConnectionServer nConn Disconnect

Page 108: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Server_Execute

You can use the Server_Execute function to send SQL statements to the SQL Server to be executed

Make sure that you have an connection to the database open

Print Server_Execute(1, ”Drop table dbo.PLACES”)Print Server_Execute(1, ”Delete From

MapInfo.MapInfo_MapCatalog Where OWNERNAME = ’dbo’ and TABLENAME = ’PLACES’”)

Do remember to replace the ” and ’ in the MapBasic window when copied from a PowerPoint

Page 109: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

MapBasic applications - FindDBMS

Find DBMS is a small utility showing how a search can be done using a spatial database on the back end

The tool searches a predefined table in the database using the connection #1. This could be changed to be a specific data source.

The tool lets you enter some value to search for. When you hit Enter, the SQL Select is sent to the database and the matching values are returned and shown in a listbox.

When you click on any of the returned values, the matching record is highlighted in the map and the map is zoomed to the record

Note that you should have the table searched open in a map. The name of this table is specified in the config file: FIND DBMS.ini

Page 110: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Find DBMS

Page 111: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Find DBMS

Page 112: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

MapBasic applications - TableRefresh

TableRefresh is a small utility that will search a file structure for tables

The tables found will be opened and if they are either a Linked or a WFS table, the application can refresh them if this has been specified

The tool is controlled by the configuration file

Page 113: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Table Refresh

Page 114: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Questions

Peter Horsbøll Møller

[email protected]

www.pbinsight.com

Page 115: Muguki session on MapInfo Professional 11 and SQL Server 2008

Every connection is a new opportunity™

Every connection is a new opportunity™