MapInfo Professional 11.0SQL Server 2008 (Express)MUGUKI, LondonPeter Horsbøll MøllerSystems EngineerJanuary, 2012        ...
AgendaHow to setup a spatial database to be used by MapInfo  Professional 11.0How to work with a spatial database from Map...
A few words about myselfLive in Denmark with my familyWorked with the largest Danish partner developing MapBasic   applica...
Every connection is a new opportunity™
DAY 1   Every connection is a new opportunity™
Creating database, login and users                             Every connection is a new opportunity™
A few words on login and usersIn most cases you will use Windwos Authentication and   use the Windows usernames (and Activ...
Creating database, login and users                             Every connection is a new opportunity™
Schemas          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 tablesSchemaes also lets you...
Creating a new schema                        Every connection is a new opportunity™
Creating a ODBC Data source               Data               Data                              Every connection is a new o...
Creating a SQL Server 2008 data sourceData sources can be created manually or in a centralised  wayThey can be stored in f...
MARS connectionMultiple Active Result Sets (MARS)Supported     MapInfo Professional 10.5.2     SQLServer 2005 and 2008Ma...
Creating a SQL Server 2008 data source                             Every connection is a new opportunity™
The MapInfo Map Catalog                          Every connection is a new opportunity™
Map CatalogThe Map Catalog (MapInfo.MapInfo_MapCatalog) describes spatial  tables in the database with values like:    Ki...
Map Catalog – Spatial typeData storage    1 : MapInfo Code, XY with MapInfo key ( 3 columns)    4 : XY stored in two col...
Creating the Map CatalogYou can create the Map Catalog using EasyLoader, directly  in the database using SQL or you can us...
Creating the Map Catalog – EasyLoader                            Every connection is a new opportunity™
Tables         Every connection is a new opportunity™
Creating tablesYou can create tables manually thru the Management  StudioOr thru MapInfo ProfessionalIf you use MapInfo Pr...
Creating tables – data typesExact numerics    Bigint (MapInfo type: Float)       – -9.223.372.036.854.775.808 – 9.223.372...
Creating tables – data typesApproximate Numerics    Float (MapInfo type: Float)    Real (MapInfo type: Float)Date and ti...
Creating tables – data typesCharacter strings    Char (MapInfo type: Char)       – Fixed-length non-Unicode data, max. 8....
Creating tables – data typesSpatial types    Geometry (MapInfo type: Object)         – Does require the table to be regis...
Creating a table - namingConsider only using the characters A – Z and the numbers 0 – 9 and    underscores (_) when naming...
Creating tables – considerationsAvoid the unicode column types (nchar, nvarchar, ntext) as MapInfo  Professional can’t edi...
Creating tables thru Management Studio                            Every connection is a new opportunity™
Creating tables thru MapInfo Pro                              Every connection is a new opportunity™
Uploading tables to SQL Server                             Every connection is a new opportunity™
EasyLoaderEasyLoader …… is provided with MapInfo Professional. It can also be  downloaded from our website… is a standalon...
Uploading thru EasyLoader                            Every connection is a new opportunity™
Using EasyLoader as a batch uploaderSamples on how to pass parameters to EasyLoader for doing batch uploadsUpload a single...
Uploading thru EasyLoader - batchmode                           Every connection is a new opportunity™
Upload using Save asWithin MapInfo Professional you can save your table  directly to the data using File > Save Copy as…Ma...
MapBasic syntax for Save asThe MapBasic syntax for saving table to a database looks  like this:  Commit Table AV97_W      ...
Uploading thru Save as                         Every connection is a new opportunity™
Spatial errorsCertain objects from MapInfo tabellens can result in errors. It can be a  good idea to run queries like thes...
Opening tables into MapInfo Professional                             Every connection is a new opportunity™
Opening a remote tableSelect File > OpenClick on Open DBMS Connection or select the open   connection in the Files of Type...
Opening DBMS tables into MapInfo Pro                            Every connection is a new opportunity™
Reopening a remote tableIt’s only the first time you open a DBMS table, that you need to specify    which data to openAfte...
Meta data section - Linked!table!version 400!charset WindowsLatin1Definition Table  Type LINKED Charset "WindowsLatin1"  F...
Meta data section - Live!table!version 500!charset WindowsLatin1Definition Table  Type ODBCbegin_metadata"IsReadOnly" = "F...
MapInfo Pro: Linked vs Live tables                              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 t...
Live with/without cache• First time opening a table may be faster – depending on the zoom of   your map window• One “view ...
Live without cache• MapInfo Professional “always” reads directly from the database• Every draw, browse, select click which...
Live with Cache• Uses a temporary cache    Since 9.5.1      – MapInfo table stored in a temporary MapInfo table.      – T...
ConclusionsOnly use LIVE WITHOUT CACHE when    The data is highly volatile (changing minute to minute or even       soone...
Conclusions• If you have a small data size in your table, it will probably not matter   if you choose Live or Linked• Usin...
DAY 2   Every connection is a new opportunity™
Querying           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 tab...
Row filteringYou can specify which records to retrieve from the database by attributes                                    ...
Querying - ExpertWrite your own SQL statementSyntax depends on the SQL dialect of the databaseMapInfo Professional will “t...
Metadata of a spatial query!table!version 650!charset WindowsLatin1Definition Table  Type LINKED Charset "WindowsLatin1"  ...
Editing tables from SQL Server                             Every connection is a new opportunity™
EditingThe remote table must contain a primary unique index    In a view this column should be named MI_PRINXYou can edit...
Editing – by multiple usersIf multiple users are editing the same table in SQL Server,   they must not access this databas...
SavingClick Save Table to save the pending edits to the DBMS tableWhen saving the edits to the database, MapInfo checks if...
Editing          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...
Editing – conflict resolution                                Every connection is a new opportunity™
Refreshing linked tables                           Every connection is a new opportunity™
RefreshingReloading data from the database can be done with Table >  Maintenance > Refresh DBMS Table...Refreshing a DBMS ...
Refreshing DBMS tables thru aworkspace!Workspace!Version 950!Charset WindowsLatin1Dim nConn As IntegernConn = Server_Conne...
Files versus database                        Every connection is a new opportunity™
Files versus databaseThe are a number of differences between MapInfo’s flat tab files and  keeping the data in SQL Server ...
Creating views in SQL Server                               Every connection is a new opportunity™
What is a view?Et view can be seen as a way to look at your dataWith a view you can limit the number of columns and/or rec...
Creating views in SQL Server – mappableIf the views must be mappable from    within MapInfo Pro, you need to make    the v...
Creating views                 Every connection is a new opportunity™
Making a DBMS table mappable                           Every connection is a new opportunity™
Making a DBMS table mappableThis will add a record of that table to the MapInfo   MapCatalog specifying how MapInfo Profes...
Making DBMS tables mappable                          Every connection is a new opportunity™
A view that merges tablesThe statement below should be run from a Query-vindue – not thru  View > Create New:Create View d...
Improved performance with viewsIf you create a view that you want to search for specific records, it might    be an idea t...
SCHEMABINDINGRight click on your view and select Scritp View As > Alter To > New   Query WindowAdd ”WITH SCHEMABINDING” as...
Unique Clustered IndexRight click on the Index folder of your view and select Create New....Write a name, like ”PK_” + the...
Creating indexed views                         Every connection is a new opportunity™
Introduction to Geometry type                                Every connection is a new opportunity™
Geometry vs GeographyThe geometry data type supports planar, or Euclidean (flat-earth),   data. The geometry data type con...
Geometry OGC methodsSTArea         •   STEquals             •   STNumPointsSTAsBinary     •   STExteriorRing       •   STO...
Invalid geometriesFind records with invalid geometriesSelect * From dbo.MYTABLE   Where SP_Geometri.STIsValid() = 0Fix rec...
Coordinate systems – EPSG codesQuerying EPSG codes for a table, også known as SRID:   select distinct SP_GEOMETRY.STSrid f...
Spatial SQL samplesAdding a column with the areaSelect *, SP_GEOMETRY.STArea() As Area  From dbo.PLACESAdding a column wit...
Spatial SQL samplesFinding municipalities and their neighboursSelect t1.NAME, t2.NAME  From dbo.MUNICIPALITIES t1, dbo.MUN...
Spatial SQL samplesAdding city name to only those roads, that intersects a citySelect R.*, P.PLACENAMEFROM dbo.ROADS AS R ...
Some (spatial) join types of SQL ServerInner Join    SELECT R.*, P.PLACENAME    FROM dbo.ROADS AS R INNER JOIN dbo.PLACES ...
Inner JoinID NAME LASTNAME   SELECT P.ID, P.NAME, L.LASTNAME                   FROM dbo.PERSONS AS P1   Peter     1       ...
Left Outer JoinID NAME LASTNAME   SELECT P.ID, P.NAME, L.LASTNAME                   FROM dbo.PERSONS AS P1   Peter     1  ...
Cross JoinID NAME LASTNAME         SELECT P.ID, P.NAME, L.LASTNAME                         FROM dbo.PERSONS AS P1   Peter ...
Creating spatial joins                         Every connection is a new opportunity™
Triggers i SQL Server                        Every connection is a new opportunity™
What are Triggers?A trigger can be called when something happens in the    databaseIt can be called when records are inser...
Temporary tables in triggersSQL Server has two temporary tables, that can be accessed in a trigger:inserted     Contains ...
Trigger statementCREATE TRIGGER [schema_name.] trigger_name    ON { table | view }    [ WITH <dml_trigger_option> [ ,...n ...
Create a timestamp trigger on updateCREATE TRIGGER dbo.trg_MY_TABLE_AfterUpdate    ON dbo. MY_TABLEAFTER UPDATEASBegin    ...
Create a timestamp trigger after insertCREATE TRIGGER dbo.trg_MY_TABLE_AfterInsert    ON dbo. MY_TABLEAFTER INSERTASBegin ...
Create a ”history” triggerCREATE TRIGGER dbo.trgCopyToHistory   ON dbo.ADM_KOMMUNE_2007   AFTER DELETE,UPDATEASBegin    In...
Trigger updating X and Y columnsCreate TRIGGER [dbo].[trg_MYTABLE_AfterUpdate]      ON [dbo].[MYTABLE]      AFTER INSERT, ...
Creating triggers                    Every connection is a new opportunity™
DAY 3   Every connection is a new opportunity™
Using MapBasic to access SQL Server                           Every connection is a new opportunity™
ProcessCreate connection    nConn = Server_Connect("ODBC“, "DSN=GIS")Do something    Server Create Map    Server Create St...
Server_ExecuteYou can use the Server_Execute function to send SQL statements to  the SQL Server to be executedMake sure th...
MapBasic applications - FindDBMSFind DBMS is a small utility showing how a search can be done using a   spatial database o...
Find DBMS            Every connection is a new opportunity™
Find DBMS            Every connection is a new opportunity™
MapBasic applications - TableRefreshTableRefresh is a small utility that will search a file structure for tablesThe tables...
Table Refresh                Every connection is a new opportunity™
Questions   Peter Horsbøll Møller   peter.moller@pb.com   www.pbinsight.com                            Every connection...
™Every connection is a new opportunity                                        Every connection is a new opportunity™
Upcoming SlideShare
Loading in …5
×

Muguki session on MapInfo Professional 11 and SQL Server 2008

4,623 views

Published on

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)

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
4,623
On SlideShare
0
From Embeds
0
Number of Embeds
22
Actions
Shares
0
Downloads
102
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Muguki session on MapInfo Professional 11 and SQL Server 2008

  1. 1. MapInfo Professional 11.0SQL Server 2008 (Express)MUGUKI, LondonPeter Horsbøll MøllerSystems EngineerJanuary, 2012 Every connection is a new opportunity™ Every connection is a new opportunity™
  2. 2. AgendaHow to setup a spatial database to be used by MapInfo Professional 11.0How to work with a spatial database from MapInfo Professional 11.0How to take advantage of a spatial database in general Every connection is a new opportunity™
  3. 3. A few words about myselfLive in Denmark with my familyWorked 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 OracleHave been working with PB Software for the last 4 years as a Systems EngineerModerator and an active member on the MapInfo-L Every connection is a new opportunity™
  4. 4. Every connection is a new opportunity™
  5. 5. DAY 1 Every connection is a new opportunity™
  6. 6. Creating database, login and users Every connection is a new opportunity™
  7. 7. A few words on login and usersIn 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 userThe SQL Server users can be used for giving a certain application access Every connection is a new opportunity™
  8. 8. Creating database, login and users Every connection is a new opportunity™
  9. 9. Schemas Every connection is a new opportunity™
  10. 10. What is a schema in SQL Server?A schema in SQL Server is a way to organise for instance your tablesSchemaes also lets you assign permission to a number of tables, by assigning permissions to the schema in stead of directly to the tablesYou can use Schemaes as a way of organising your tables instead of using several databasesWhen 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. Every connection is a new opportunity™
  11. 11. Creating a new schema Every connection is a new opportunity™
  12. 12. Creating a ODBC Data source Data Data Every connection is a new opportunity™
  13. 13. Creating a SQL Server 2008 data sourceData sources can be created manually or in a centralised wayThey can be stored in files or in the registryFor SQL Server 2008 you should use the ”SQL Server Native Client 10.0” driver Every connection is a new opportunity™
  14. 14. MARS connectionMultiple Active Result Sets (MARS)Supported  MapInfo Professional 10.5.2  SQLServer 2005 and 2008MapInfo 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. Every connection is a new opportunity™
  15. 15. Creating a SQL Server 2008 data source Every connection is a new opportunity™
  16. 16. The MapInfo Map Catalog Every connection is a new opportunity™
  17. 17. Map CatalogThe 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 Every connection is a new opportunity™
  18. 18. Map Catalog – Spatial typeData 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/PostGISObject types  .0: Only Points  .1: Only Lines/Polylines  .2: Only Regions/Polygons  .3: Mixture of object types is possible Every connection is a new opportunity™
  19. 19. Creating the Map CatalogYou can create the Map Catalog using EasyLoader, directly in the database using SQL or you can use the DBMS Catalog toolThe 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. Every connection is a new opportunity™
  20. 20. Creating the Map Catalog – EasyLoader Every connection is a new opportunity™
  21. 21. Tables Every connection is a new opportunity™
  22. 22. Creating tablesYou can create tables manually thru the Management StudioOr thru MapInfo ProfessionalIf 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. Every connection is a new opportunity™
  23. 23. 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 Every connection is a new opportunity™
  24. 24. Creating tables – data typesApproximate 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. Every connection is a new opportunity™
  25. 25. Creating tables – data typesCharacter 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 charactersNote: Character columns longer than 254 will be made read-only when opened in MapInfo Professional and they will only show the first 254 characters Every connection is a new opportunity™
  26. 26. Creating tables – data typesSpatial 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 Every connection is a new opportunity™
  27. 27. Creating a table - namingConsider only using the characters A – Z and the numbers 0 – 9 and underscores (_) when naming your tablesUse the same naming convention for columnsSQL 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.aspxIf the tables must be used from MapInfo Professional it’s recommended to limit the names to 31 charactersAlso 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 Every connection is a new opportunity™
  28. 28. Creating tables – considerationsAvoid the unicode column types (nchar, nvarchar, ntext) as MapInfo Professional can’t edit theseAvoid creating character string column wider than 254 as MapInfo Professional can’t edit theseConsider naming your Primary key column MI_PRINX. MapInfo Professional will use this as the primary key in viewsConsider 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) Every connection is a new opportunity™
  29. 29. Creating tables thru Management Studio Every connection is a new opportunity™
  30. 30. Creating tables thru MapInfo Pro Every connection is a new opportunity™
  31. 31. Uploading tables to SQL Server Every connection is a new opportunity™
  32. 32. EasyLoaderEasyLoader …… 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 Every connection is a new opportunity™
  33. 33. Uploading thru EasyLoader Every connection is a new opportunity™
  34. 34. Using EasyLoader as a batch uploaderSamples on how to pass parameters to EasyLoader for doing batch uploadsUpload a single table  “C:ProgramMapInfoProfessionalToolseasyloader.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:MapsAddresses.tab;AddressesUpload multiple tables using a text file  “C:ProgramMapInfoProfessionalToolseasyloader.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.txtMakes it easy to rerun the uploads! Every connection is a new opportunity™
  35. 35. Uploading thru EasyLoader - batchmode Every connection is a new opportunity™
  36. 36. Upload using Save asWithin 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 listEnter the name of the server tableEnter the name of the tab file (using Live connection)• Will automatically add: – MI_PRINX – MI_STYLE Every connection is a new opportunity™
  37. 37. MapBasic syntax for Save asThe MapBasic syntax for saving table to a database looks like this: Commit Table AV97_W As "C:DBMSBuildings.tab" Type ODBC Connection 1 Table """dbo""."“Buildings""" Type SQLServerSpatial Geometry ConvertDateTime ON InteractiveSome of the parameters are optional Every connection is a new opportunity™
  38. 38. Uploading thru Save as Every connection is a new opportunity™
  39. 39. Spatial errorsCertain 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 meterSelect * From MY_TABLE Where Str$(ObjectInfo(OBJ, 1)) In (”7”, ”8”, ”9”) And CartesianArea(OBJ, ”sq m”) < 1 Into __POSSIBLE_ISSUES_REGIONSLines with a length of less than 1 meterSelect * From MY_TABLE Where Str$(ObjectInfo(OBJ, 1)) In (”3”, ”4”) And CartesianObjectLen(OBJ, ”m”) < 1 Into __POSSIBLE_ISSUES_LINES Every connection is a new opportunity™
  40. 40. Opening tables into MapInfo Professional Every connection is a new opportunity™
  41. 41. Opening a remote tableSelect File > OpenClick on Open DBMS Connection or select the open connection in the Files of Type dropdown listSelect the table to open and click Open. Every connection is a new opportunity™
  42. 42. Opening DBMS tables into MapInfo Pro Every connection is a new opportunity™
  43. 43. Reopening a remote tableIt’s only the first time you open a DBMS table, that you need to specify which data to openAfterwards you can reopen this table by opening the tab fileThe tab file contains all the necessary information  Table structure  Connection information  Can also hold the Username and PasswordIf 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 Every connection is a new opportunity™
  44. 44. Meta data section - Linked!table!version 400!charset WindowsLatin1Definition Table Type LINKED Charset "WindowsLatin1" Fields 4 MI_PRINX Integer ReadOnly ; PLACENAME Char (50) ; DESCRIPTION Char (250) ; TYPE Char (20) ;begin_metadata"DATALINK" = """DATALINKConnectionString" = "DSN=GIS2;Description=SQL Server 2008 GIS database;UID=AdminUser;APP=MapInfo Professional®;WSID=DKMP12948""DATALINKQuery" = "select ""MI_PRINX"", ""PLACENAME"", ""DESCRIPTION"", ""TYPE"", ""OBJECT"" from ""GIS"".""dbo"".""PointsOfInterest""""IsReadOnly" = "FALSE"end_metadata Every connection is a new opportunity™
  45. 45. Meta data section - Live!table!version 500!charset WindowsLatin1Definition Table Type ODBCbegin_metadata"IsReadOnly" = "FALSE""DATALINK" = """DATALINKQuery" = "Select * From ""GIS"".""dbo"".""PointsOfInterest""""DATALINKConnectionString" = "DSN=GIS2;Description=SQL Server 2008 GIS database;UID=AdminUser;APP=MapInfo Professional®;WSID=DKMP12948""DATALINKToolKit" = "ODBC""CACHE" = "ON""MBRSEARCH" = "ON"end_metadata Every connection is a new opportunity™
  46. 46. MapInfo Pro: Linked vs Live tables Every connection is a new opportunity™
  47. 47. 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 Every connection is a new opportunity™
  48. 48. 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 Every connection is a new opportunity™
  49. 49. 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 Every connection is a new opportunity™
  50. 50. 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 Every connection is a new opportunity™
  51. 51. ConclusionsOnly 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 dayUse 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 Every connection is a new opportunity™
  52. 52. 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 Every connection is a new opportunity™
  53. 53. DAY 2 Every connection is a new opportunity™
  54. 54. Querying Every connection is a new opportunity™
  55. 55. 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 mapFor 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  … Every connection is a new opportunity™
  56. 56. Row filteringYou can specify which records to retrieve from the database by attributes “Like” and “not like” only available for text columns Do not use ”” around text values!And by geography “Selection” only available when a selection is active “Current_Mapper” only available when a map is active “Object” is only available for mappable tablesValue of Current_Mapper and Selection are static and not updated when the table is refreshed. Every connection is a new opportunity™
  57. 57. Querying - ExpertWrite your own SQL statementSyntax depends on the SQL dialect of the databaseMapInfo 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 Every connection is a new opportunity™
  58. 58. Metadata of a spatial query!table!version 650!charset WindowsLatin1Definition Table Type LINKED Charset "WindowsLatin1" Fields 3 MI_PRINX Integer ReadOnly ; NAME Char (50) ; TYPE Char (50) ;begin_metadata"IsReadOnly" = "FALSE“"DATALINK" = """DATALINKConnectionString" = "DSN=GIS;MARS_Connection=Yes""DATALINKQuery" = "select ""MI_PRINX"", ""NAME"", ""TYPE"", ""OBJECT"" from ""GIS"".""dbo"".""POI"" where (OBJECT within Rectangle( 628163.45078508,6112409.85175394,720526.19639343,6186305.28363101))""DATALINKSpatialObj" = "ST_Spatial(HG_Box(ST_Point(628163.451003735300, 6186305.285449981700),ST_Point(720526.200186016970,6112409.856650807900) ) ,ST_Point(674344.821471954000,6149357.566051412400))"end_metadata Every connection is a new opportunity™
  59. 59. Editing tables from SQL Server Every connection is a new opportunity™
  60. 60. EditingThe remote table must contain a primary unique index  In a view this column should be named MI_PRINXYou can edit the data with every tool available in MapInfo ProfessionalWhen editing coordinates of a XY-coordinate table, the coordinates are updated in the columns with the X and Y coordinates in the database tableWhen 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 Every connection is a new opportunity™
  61. 61. Editing – by multiple usersIf 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 Every connection is a new opportunity™
  62. 62. SavingClick Save Table to save the pending edits to the DBMS tableWhen 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 conflictIf 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 yesSaving 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 Every connection is a new opportunity™
  63. 63. Editing Every connection is a new opportunity™
  64. 64. 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 version You 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 Every connection is a new opportunity™
  65. 65. Editing – conflict resolution Every connection is a new opportunity™
  66. 66. Refreshing linked tables Every connection is a new opportunity™
  67. 67. RefreshingReloading 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 Every connection is a new opportunity™
  68. 68. Refreshing DBMS tables thru aworkspace!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. demodbmsBuildings.tab" InteractiveMap From BuildingsPrint “Refreshing the DBMS tables..."Server Refresh BuildingsClose Table BuildingsPrint “We are done!"Server nConn DisconnectUndim nConn Every connection is a new opportunity™
  69. 69. Files versus database Every connection is a new opportunity™
  70. 70. Files versus databaseThe 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. Every connection is a new opportunity™
  71. 71. Creating views in SQL Server Every connection is a new opportunity™
  72. 72. What is a view?Et view can be seen as a way to look at your dataWith 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 classesWith a view you can merge multiple columns to one column, for instance merge road name and house no to a address columnYou 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 attributesA view can also be used to merge multiple tables into one. Every connection is a new opportunity™
  73. 73. Creating views in SQL Server – mappableIf the views must be mappable from within MapInfo Pro, you need to make the view mappableYou can also manually add the view to the MapInfo_MapCatalog – if you know all the parametersOr 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 Every connection is a new opportunity™
  74. 74. Creating views Every connection is a new opportunity™
  75. 75. Making a DBMS table mappable Every connection is a new opportunity™
  76. 76. Making a DBMS table mappableThis will add a record of that table to the MapInfo MapCatalog specifying how MapInfo Professional should show this table in a mapYou 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 ProfessionalYou can do this thru Table > Maintenance > Make DBMS Table Mappable in MapInfo Professionalor by copying and modifying a record in the MapCatalog Every connection is a new opportunity™
  77. 77. Making DBMS tables mappable Every connection is a new opportunity™
  78. 78. A view that merges tablesThe statement below should be run from a Query-vindue – not thru View > Create New:Create View dbo.viewAddressesUnion AsSELECT * FROM dbo.ADDRESSES_AUNION ALLSELECT * FROM dbo.ADDRESSES_BAdd it to the MapCatalog if it is mappable Every connection is a new opportunity™
  79. 79. Improved performance with viewsIf you create a view that you want to search for specific records, it might be an idea to index the viewTo be able to index your views, you need to bind the views with the data used in the views, this is called SCHEMABINDINGYou also need a unique clustered index. Otherwise you can’t index other columnsNow 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/ Every connection is a new opportunity™
  80. 80. SCHEMABINDINGRight click on your view and select Scritp View As > Alter To > New Query WindowAdd ”WITH SCHEMABINDING” as shown belowHit F5 or click the Execute button to modify the viewOr set it while creating the view Every connection is a new opportunity™
  81. 81. Unique Clustered IndexRight click on the Index folder of your view and select Create New....Write a name, like ”PK_” + the name of your viewPick the primary key column using the Add buttonChoose Clustered and check UniqueHit OK Every connection is a new opportunity™
  82. 82. Creating indexed views Every connection is a new opportunity™
  83. 83. Introduction to Geometry type Every connection is a new opportunity™
  84. 84. Geometry vs GeographyThe 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. Collection Point Line Region Multi Region PointRead more: Pline• http://msdn.microsoft.com/en-us/library/bb964711.aspx Every connection is a new opportunity™
  85. 85. Geometry OGC methodsSTArea • STEquals • STNumPointsSTAsBinary • STExteriorRing • STOverlapsSTAsText • STGeometryN • STPointNSTBoundary • STGeometryType • STPointOnSurfaceSTBuffer • STInteriorRingN • STRelateSTCentroid • STIntersection • STSridSTContains • STIntersects • STStartPointSTConvexHull • STIsClosed • STSymDifferenceSTCrosses • STIsEmpty • STTouchesSTDifference • STIsRing • STUnionSTDimension • STIsSimple • STWithinSTDisjoint • STIsValid • STXSTDistance • STLength • STYSTEndpoint • STNumGeometriesSTEnvelope • STNumInteriorRing They are all case sensitive!!! Every connection is a new opportunity™
  86. 86. Invalid geometriesFind records with invalid geometriesSelect * From dbo.MYTABLE Where SP_Geometri.STIsValid() = 0Fix records with invalide geometries– pure magic!? Or not!?Update dbo.MYTABLE Set SP_Geometri = SP_Geometri.MakeValid() Every connection is a new opportunity™
  87. 87. Coordinate systems – EPSG codesQuerying EPSG codes for a table, også known as SRID: select distinct SP_GEOMETRY.STSrid from dbo.MYTABLEIf it isn’t ”right”, you can change it using this statement: Update dbo.MYTABLE Set SP_GEOMETRY.STSrid = 25832But 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 Euref89p25832“ , 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, 0Note that EasyLoader has its own projection file!! Every connection is a new opportunity™
  88. 88. Spatial SQL samplesAdding a column with the areaSelect *, SP_GEOMETRY.STArea() As Area From dbo.PLACESAdding a column with the lengthSelect *, SP_GEOMETRY.STLength() As Length From dbo.ROADS Every connection is a new opportunity™
  89. 89. Spatial SQL samplesFinding municipalities and their neighboursSelect 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 Every connection is a new opportunity™
  90. 90. Spatial SQL samplesAdding 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 roadsSelect R.*, P.PLACENAMEFROM dbo.ROADS AS R LEFT OUTER JOIN dbo.PLACES AS POn (R.SP_GEOMETRY.STIntersects(P.SP_GEOMETRY) = 1) Every connection is a new opportunity™
  91. 91. Some (spatial) join types of SQL ServerInner Join SELECT R.*, P.PLACENAME FROM dbo.ROADS AS R INNER JOIN dbo.PLACES AS P ON (R.SP_GEOMETRY.STIntersects(P.SP_GEOMETRY) = 1)Left Outer Join SELECT R.*, P.PLACENAME FROM dbo.ROADS AS R LEFT OUTER JOIN dbo.PLACES AS P ON (R.SP_GEOMETRY.STIntersects(P.SP_GEOMETRY) = 1)Cross Join SELECT R.*, P.PLACENAME FROM dbo.ROADS AS R CROSS JOIN dbo.PLACES AS P WHERE (R.SP_GEOMETRY.STIntersects(P.SP_GEOMETRY) = 1) Every connection is a new opportunity™
  92. 92. Inner JoinID NAME LASTNAME SELECT P.ID, P.NAME, L.LASTNAME FROM dbo.PERSONS AS P1 Peter 1 INNER JOIN dbo.LASTNAMES AS L2 Paul 3 ON (P.LASTNAME = L.ID)3 Mary 54 Ann 2ID LASTNAME1 Møller ID NAME LASTNAME2 Smith 1 Peter Møller3 McCartney 2 Paul McCartney4 Probert 4 Ann Smith Every connection is a new opportunity™
  93. 93. Left Outer JoinID NAME LASTNAME SELECT P.ID, P.NAME, L.LASTNAME FROM dbo.PERSONS AS P1 Peter 1 LEFT OUTER JOIN dbo.LASTNAMES AS L2 Paul 3 ON (P.LASTNAME = L.ID)3 Mary 54 Ann 2ID LASTNAME ID NAME LASTNAME1 Møller 1 Peter Møller2 Smith 2 Paul McCartney3 McCartney 3 Mary <NULL>4 Probert 4 Ann Smith Every connection is a new opportunity™
  94. 94. Cross JoinID NAME LASTNAME SELECT P.ID, P.NAME, L.LASTNAME FROM dbo.PERSONS AS P1 Peter 1 CROSS JOIN dbo.LASTNAMES AS L2 Paul 3 WHERE (P.LASTNAME = L.ID)3 Mary 5 ID NAME LASTNAME4 Ann 2 1 Peter Møller 2 Paul McCartneyID LASTNAME 4 Ann Smith1 Møller2 Smith Note: A Cross Join without condition will join every3 McCartney record in the first table with every record in the other table4 Probert Every connection is a new opportunity™
  95. 95. Creating spatial joins Every connection is a new opportunity™
  96. 96. Triggers i SQL Server Every connection is a new opportunity™
  97. 97. What are Triggers?A trigger can be called when something happens in the databaseIt can be called when records are inserted, updated, deletedIt can be called when a user logs onto the databaseA trigger can be used to stamp records with information on who changed them and whenA trigger can be used to copy changed records to a historic table Every connection is a new opportunity™
  98. 98. Temporary tables in triggersSQL 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 updatedeleted  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 Every connection is a new opportunity™
  99. 99. Trigger statementCREATE 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 [ ; ] > } Every connection is a new opportunity™
  100. 100. Create a timestamp trigger on updateCREATE TRIGGER dbo.trg_MY_TABLE_AfterUpdate ON dbo. MY_TABLEAFTER UPDATEASBegin Update dbo.MY_TABLE Set DATE_CHANGED = CURRENT_TIMESTAMP, USER_CHANGED = USER Where MI_PRINX In (Select MI_PRINX From inserted);EndGO Every connection is a new opportunity™
  101. 101. Create a timestamp trigger after insertCREATE TRIGGER dbo.trg_MY_TABLE_AfterInsert ON dbo. MY_TABLEAFTER INSERTASBegin Update dbo.MY_TABLE Set DATE_CREATED = CURRENT_TIMESTAMP, USER_CREATED = USER Where MI_PRINX In (Select MI_PRINX From inserted);EndGO Every connection is a new opportunity™
  102. 102. Create a ”history” triggerCREATE TRIGGER dbo.trgCopyToHistory ON dbo.ADM_KOMMUNE_2007 AFTER DELETE,UPDATEASBegin 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_STYLE From deletedEndGo Every connection is a new opportunity™
  103. 103. Trigger updating X and Y columnsCreate 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 Every connection is a new opportunity™
  104. 104. Creating triggers Every connection is a new opportunity™
  105. 105. DAY 3 Every connection is a new opportunity™
  106. 106. Using MapBasic to access SQL Server Every connection is a new opportunity™
  107. 107. ProcessCreate connection nConn = Server_Connect("ODBC“, "DSN=GIS")Do something Server Create Map Server Create Style Server Create Table Server Link Table Register Table Server Refresh Server Set Map Server_Execute Commit Table …Close Connection Server nConn Disconnect Every connection is a new opportunity™
  108. 108. Server_ExecuteYou can use the Server_Execute function to send SQL statements to the SQL Server to be executedMake sure that you have an connection to the database openPrint 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 Every connection is a new opportunity™
  109. 109. MapBasic applications - FindDBMSFind DBMS is a small utility showing how a search can be done using a spatial database on the back endThe 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 recordNote 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 Every connection is a new opportunity™
  110. 110. Find DBMS Every connection is a new opportunity™
  111. 111. Find DBMS Every connection is a new opportunity™
  112. 112. MapBasic applications - TableRefreshTableRefresh is a small utility that will search a file structure for tablesThe 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 specifiedThe tool is controlled by the configuration file Every connection is a new opportunity™
  113. 113. Table Refresh Every connection is a new opportunity™
  114. 114. Questions  Peter Horsbøll Møller  peter.moller@pb.com  www.pbinsight.com Every connection is a new opportunity™
  115. 115. ™Every connection is a new opportunity Every connection is a new opportunity™

×