SlideShare une entreprise Scribd logo
1  sur  115
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™


                                            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




                                          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
                                          Every connection is a new opportunity™
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 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




                                            Every connection is a new opportunity™
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 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.

                                          Every connection is a new opportunity™
Creating a new schema




                        Every connection is a new opportunity™
Creating a ODBC Data source



               Data




               Data




                              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




                                          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.




                                                      Every connection is a new opportunity™
Creating a SQL Server 2008 data source




                             Every connection is a new opportunity™
The MapInfo Map Catalog




                          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



                                                  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
                                                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.

                                            Every connection is a new opportunity™
Creating the Map Catalog – EasyLoader




                            Every connection is a new opportunity™
Tables




         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.




                                               Every connection is a new opportunity™
Creating tables – data types
Exact 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™
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.


                                                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


                                                   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




                                                    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

                                                   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)




                                                     Every connection is a new opportunity™
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™
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
                                          Every connection is a new opportunity™
Uploading thru EasyLoader




                            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: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;Addresses
Upload 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.txt


Makes it easy to rerun the uploads!

                                                       Every connection is a new opportunity™
Uploading thru EasyLoader - batchmode




                           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


                                           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:DBMSBuildings.tab"
       Type ODBC Connection 1
       Table """dbo""."“Buildings"""
       Type SQLServerSpatial Geometry
       ConvertDateTime ON Interactive



Some of the parameters are optional



                                          Every connection is a new opportunity™
Uploading thru Save as




                         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_TABLE
   Where Str$(ObjectInfo(OBJ, 1)) In (”7”, ”8”, ”9”)
   And CartesianArea(OBJ, ”sq m”) < 1
   Into __POSSIBLE_ISSUES_REGIONS
Lines with a length of less than 1 meter
Select * 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™
Opening tables into MapInfo Professional




                             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.




                                        Every connection is a new opportunity™
Opening DBMS tables into MapInfo Pro




                            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


                                                      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" = ""
"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™
Meta data section - Live
!table
!version 500
!charset WindowsLatin1

Definition Table
  Type ODBC
begin_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™
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 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™
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™
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™
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™
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

                                                       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



                                                      Every connection is a new opportunity™
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 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
     …


                                                 Every connection is a new opportunity™
Row filtering

You 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
                                          tables

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

                                                              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



                                                   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" = ""
"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™
Editing tables from SQL Server




                             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


                                                     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


                                             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

                                                       Every connection is a new opportunity™
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 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™
Editing – conflict resolution




                                Every connection is a new opportunity™
Refreshing linked tables




                           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




                                                       Every connection is a new opportunity™
Refreshing DBMS tables thru a
workspace
!Workspace
!Version 950
!Charset WindowsLatin1
Dim nConn As Integer
nConn = Server_Connect( "ODBC", "DSN=GIS;UID=EditUser;PWD=Edit" )
Print “Connection opened as no: " + nConn
Print “Now opening tables..."
Open Table "D:3. demodbmsBuildings.tab" Interactive
Map From Buildings
Print “Refreshing the DBMS tables..."
Server Refresh Buildings
Close Table Buildings
Print “We are done!"
Server nConn Disconnect
Undim nConn


                                                Every connection is a new opportunity™
Files versus database




                        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.

                                                      Every connection is a new opportunity™
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 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.




                                                     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

                                           Every connection is a new opportunity™
Creating views




                 Every connection is a new opportunity™
Making a DBMS table mappable




                           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


                                         Every connection is a new opportunity™
Making DBMS tables mappable




                          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_A
UNION ALL
SELECT *
  FROM dbo.ADDRESSES_B

Add it to the MapCatalog if it is mappable



                                                  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/

                                                       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

                                                        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




                                                     Every connection is a new opportunity™
Creating indexed views




                         Every connection is a new opportunity™
Introduction to Geometry type




                                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.
                                                                               Collection
                          Point


                                  Line
                                            Region                                      Multi
                                             Region                                     Point
Read more:
                                                                        Pline
• http://msdn.microsoft.com/en-us/library/bb964711.aspx

                                                     Every connection is a new opportunity™
Geometry OGC methods
STArea         •   STEquals             •   STNumPoints

STAsBinary     •   STExteriorRing       •   STOverlaps

STAsText       •   STGeometryN          •   STPointN
STBoundary     •   STGeometryType       •   STPointOnSurface
STBuffer       •   STInteriorRingN      •   STRelate
STCentroid     •   STIntersection       •   STSrid
STContains     •   STIntersects         •   STStartPoint
STConvexHull   •   STIsClosed           •   STSymDifference
STCrosses      •   STIsEmpty            •   STTouches
STDifference   •   STIsRing             •   STUnion
STDimension    •   STIsSimple           •   STWithin
STDisjoint     •   STIsValid            •   STX
STDistance     •   STLength             •   STY
STEndpoint     •   STNumGeometries
STEnvelope     •   STNumInteriorRing   They are all case sensitive!!!

                                              Every connection is a new opportunity™
Invalid geometries

Find records with invalid geometries

Select * From dbo.MYTABLE
   Where SP_Geometri.STIsValid() = 0

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

Update dbo.MYTABLE
   Set SP_Geometri = SP_Geometri.MakeValid()

                                       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 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, 0

Note that EasyLoader has its own projection file!!



                                                               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




                                         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




                                              Every connection is a new opportunity™
Spatial SQL samples

Adding city name to only those roads, that intersects a city
Select R.*, P.PLACENAME
FROM dbo.ROADS AS R
       CROSS JOIN dbo.PLACES AS P
WHERE (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.PLACENAME
FROM dbo.ROADS AS R
       LEFT OUTER JOIN dbo.PLACES AS P
On (R.SP_GEOMETRY.STIntersects(P.SP_GEOMETRY) = 1)



                                                     Every connection is a new opportunity™
Some (spatial) join types of SQL Server

Inner 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™
Inner Join

ID NAME LASTNAME   SELECT P.ID, P.NAME, L.LASTNAME
                   FROM dbo.PERSONS AS P
1   Peter     1
                   INNER JOIN dbo.LASTNAMES AS L
2   Paul      3    ON (P.LASTNAME = L.ID)
3   Mary      5
4   Ann       2

ID LASTNAME
1   Møller
                              ID NAME LASTNAME
2   Smith
                              1   Peter      Møller
3   McCartney
                              2   Paul       McCartney
4   Probert
                              4   Ann        Smith


                                    Every connection is a new opportunity™
Left Outer Join

ID NAME LASTNAME   SELECT P.ID, P.NAME, L.LASTNAME
                   FROM dbo.PERSONS AS P
1   Peter     1
                   LEFT OUTER JOIN dbo.LASTNAMES AS L
2   Paul      3    ON (P.LASTNAME = L.ID)
3   Mary      5
4   Ann       2

ID LASTNAME                   ID NAME LASTNAME
1   Møller                    1   Peter      Møller
2   Smith                     2   Paul       McCartney
3   McCartney                 3   Mary       <NULL>
4   Probert                   4   Ann        Smith



                                    Every connection is a new opportunity™
Cross Join

ID NAME LASTNAME         SELECT P.ID, P.NAME, L.LASTNAME
                         FROM dbo.PERSONS AS P
1   Peter     1
                         CROSS JOIN dbo.LASTNAMES AS L
2   Paul      3          WHERE (P.LASTNAME = L.ID)
3   Mary      5
                                         ID NAME LASTNAME
4   Ann       2
                                         1    Peter       Møller
                                         2    Paul        McCartney
ID LASTNAME
                                         4    Ann         Smith
1   Møller
2   Smith          Note: A Cross Join without condition will join every
3   McCartney      record in the first table with every record in the
                   other table
4   Probert



                                                Every connection is a new opportunity™
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
    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


                                           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


                                                    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 [ ; ] > }




                                                Every connection is a new opportunity™
Create a timestamp trigger on update

CREATE TRIGGER dbo.trg_MY_TABLE_AfterUpdate
    ON dbo. MY_TABLE
AFTER UPDATE
AS
Begin
    Update dbo.MY_TABLE
       Set      DATE_CHANGED = CURRENT_TIMESTAMP,
                USER_CHANGED = USER
       Where MI_PRINX In (Select MI_PRINX From inserted);
End
GO




                                                 Every connection is a new opportunity™
Create a timestamp trigger after insert

CREATE TRIGGER dbo.trg_MY_TABLE_AfterInsert
    ON dbo. MY_TABLE
AFTER INSERT
AS
Begin
    Update dbo.MY_TABLE
       Set      DATE_CREATED = CURRENT_TIMESTAMP,
                USER_CREATED = USER
       Where MI_PRINX In (Select MI_PRINX From inserted);
End
GO




                                                 Every connection is a new opportunity™
Create a ”history” trigger

CREATE TRIGGER dbo.trgCopyToHistory
   ON dbo.ADM_KOMMUNE_2007
   AFTER DELETE,UPDATE
AS
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_STYLE
       From deleted
End
Go




                                           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




                                           Every connection is a new opportunity™
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™
Process
Create 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™
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



                                                 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

                                                     Every connection is a new opportunity™
Find DBMS




            Every connection is a new opportunity™
Find DBMS




            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




                                                         Every connection is a new opportunity™
Table Refresh




                Every connection is a new opportunity™
Questions


   Peter Horsbøll Møller
   peter.moller@pb.com
   www.pbinsight.com




                            Every connection is a new opportunity™
™
Every connection is a new opportunity




                                        Every connection is a new opportunity™

Contenu connexe

Tendances

ARC VIEW GEOGRAPHICAL INFORMATION SYSTEM (GIS)
ARC VIEW GEOGRAPHICAL INFORMATION SYSTEM (GIS)ARC VIEW GEOGRAPHICAL INFORMATION SYSTEM (GIS)
ARC VIEW GEOGRAPHICAL INFORMATION SYSTEM (GIS)
Hussain Majid
 
Manual to basic gis
Manual to basic gisManual to basic gis
Manual to basic gis
Qust04
 
Hadoop in sigmod 2011
Hadoop in sigmod 2011Hadoop in sigmod 2011
Hadoop in sigmod 2011
Bin Cai
 

Tendances (20)

Using MapBasic to modify your user interface
Using MapBasic to modify your user interfaceUsing MapBasic to modify your user interface
Using MapBasic to modify your user interface
 
MapInfo Pro v2019: Improving the Way You Query
MapInfo Pro v2019: Improving the Way You QueryMapInfo Pro v2019: Improving the Way You Query
MapInfo Pro v2019: Improving the Way You Query
 
Introduction to MapBasic
Introduction to MapBasicIntroduction to MapBasic
Introduction to MapBasic
 
Hive and HiveQL - Module6
Hive and HiveQL - Module6Hive and HiveQL - Module6
Hive and HiveQL - Module6
 
QGIS Module 2
QGIS Module 2QGIS Module 2
QGIS Module 2
 
Advance Hive, NoSQL Database (HBase) - Module 7
Advance Hive, NoSQL Database (HBase) - Module 7Advance Hive, NoSQL Database (HBase) - Module 7
Advance Hive, NoSQL Database (HBase) - Module 7
 
Be A Hero: Transforming GoPro Analytics Data Pipeline
Be A Hero: Transforming GoPro Analytics Data PipelineBe A Hero: Transforming GoPro Analytics Data Pipeline
Be A Hero: Transforming GoPro Analytics Data Pipeline
 
ARC VIEW GEOGRAPHICAL INFORMATION SYSTEM (GIS)
ARC VIEW GEOGRAPHICAL INFORMATION SYSTEM (GIS)ARC VIEW GEOGRAPHICAL INFORMATION SYSTEM (GIS)
ARC VIEW GEOGRAPHICAL INFORMATION SYSTEM (GIS)
 
Qgis tutorial compiled
Qgis tutorial compiledQgis tutorial compiled
Qgis tutorial compiled
 
Performing Data Science with HBase
Performing Data Science with HBasePerforming Data Science with HBase
Performing Data Science with HBase
 
Manual to basic gis
Manual to basic gisManual to basic gis
Manual to basic gis
 
Hadoop in sigmod 2011
Hadoop in sigmod 2011Hadoop in sigmod 2011
Hadoop in sigmod 2011
 
Arc catalog introduction
Arc catalog introductionArc catalog introduction
Arc catalog introduction
 
Hive(ppt)
Hive(ppt)Hive(ppt)
Hive(ppt)
 
03 hive query language (hql)
03 hive query language (hql)03 hive query language (hql)
03 hive query language (hql)
 
das-wiz-spec
das-wiz-specdas-wiz-spec
das-wiz-spec
 
Gis arc map& georeferencing-arcgis
Gis arc map& georeferencing-arcgisGis arc map& georeferencing-arcgis
Gis arc map& georeferencing-arcgis
 
Arcgis training day_2
Arcgis training day_2Arcgis training day_2
Arcgis training day_2
 
Arcgis training day_1
Arcgis training day_1Arcgis training day_1
Arcgis training day_1
 
IFSM 201 Learn/newtonhelp.com
IFSM 201 Learn/newtonhelp.comIFSM 201 Learn/newtonhelp.com
IFSM 201 Learn/newtonhelp.com
 

Similaire à Muguki session on MapInfo Professional 11 and SQL Server 2008

Vb.net session 16
Vb.net session 16Vb.net session 16
Vb.net session 16
Niit Care
 
data-spread-demo
data-spread-demodata-spread-demo
data-spread-demo
Bofan Sun
 

Similaire à Muguki session on MapInfo Professional 11 and SQL Server 2008 (20)

Sql server lesson5
Sql server lesson5Sql server lesson5
Sql server lesson5
 
"If I knew then what I know now"
"If I knew then what I know now""If I knew then what I know now"
"If I knew then what I know now"
 
02 data warehouse applications with hive
02 data warehouse applications with hive02 data warehouse applications with hive
02 data warehouse applications with hive
 
Building Applications for SQL Server 2008
Building Applications for SQL Server 2008Building Applications for SQL Server 2008
Building Applications for SQL Server 2008
 
Vb.net session 16
Vb.net session 16Vb.net session 16
Vb.net session 16
 
Data Analytics with R and SQL Server
Data Analytics with R and SQL ServerData Analytics with R and SQL Server
Data Analytics with R and SQL Server
 
Arches Getty Brownbag Talk
Arches Getty Brownbag TalkArches Getty Brownbag Talk
Arches Getty Brownbag Talk
 
Afternoons with Azure - Power BI and Azure Analysis Services
Afternoons with Azure - Power BI and Azure Analysis ServicesAfternoons with Azure - Power BI and Azure Analysis Services
Afternoons with Azure - Power BI and Azure Analysis Services
 
Metadata crosswalks
Metadata crosswalksMetadata crosswalks
Metadata crosswalks
 
Data Modeling with Neo4j
Data Modeling with Neo4jData Modeling with Neo4j
Data Modeling with Neo4j
 
Tutorial On Database Management System
Tutorial On Database Management SystemTutorial On Database Management System
Tutorial On Database Management System
 
SQL Server 2008 for Developers
SQL Server 2008 for DevelopersSQL Server 2008 for Developers
SQL Server 2008 for Developers
 
data-spread-demo
data-spread-demodata-spread-demo
data-spread-demo
 
Data analytics online training
Data analytics online trainingData analytics online training
Data analytics online training
 
7. SQL.pptx
7. SQL.pptx7. SQL.pptx
7. SQL.pptx
 
Hive : WareHousing Over hadoop
Hive :  WareHousing Over hadoopHive :  WareHousing Over hadoop
Hive : WareHousing Over hadoop
 
Bigdata analytics K.kiruthika 2nd M.Sc.,computer science Bon secoures college...
Bigdata analytics K.kiruthika 2nd M.Sc.,computer science Bon secoures college...Bigdata analytics K.kiruthika 2nd M.Sc.,computer science Bon secoures college...
Bigdata analytics K.kiruthika 2nd M.Sc.,computer science Bon secoures college...
 
01 Microsoft Access
01 Microsoft Access01 Microsoft Access
01 Microsoft Access
 
Flight on Zeppelin with Apache Spark & Cassandra
Flight on Zeppelin with Apache Spark & CassandraFlight on Zeppelin with Apache Spark & Cassandra
Flight on Zeppelin with Apache Spark & Cassandra
 
Introduction to ms access database
Introduction to ms access databaseIntroduction to ms access database
Introduction to ms access database
 

Plus de Peter Horsbøll Møller

Plus de Peter Horsbøll Møller (20)

MapInfo Pro v12.5 to v2021.1 Overview
MapInfo Pro v12.5 to v2021.1 OverviewMapInfo Pro v12.5 to v2021.1 Overview
MapInfo Pro v12.5 to v2021.1 Overview
 
MapInfo Pro Tips & Tricks med Geograf
MapInfo Pro Tips & Tricks med GeografMapInfo Pro Tips & Tricks med Geograf
MapInfo Pro Tips & Tricks med Geograf
 
Eksklusivsmagning - 10 års jubilæum, Oksenvad Whiskylaug
Eksklusivsmagning - 10 års jubilæum, Oksenvad WhiskylaugEksklusivsmagning - 10 års jubilæum, Oksenvad Whiskylaug
Eksklusivsmagning - 10 års jubilæum, Oksenvad Whiskylaug
 
Llinking Spectrum dataflows to MapInfo Pro
Llinking Spectrum dataflows to MapInfo ProLlinking Spectrum dataflows to MapInfo Pro
Llinking Spectrum dataflows to MapInfo Pro
 
Clynelish - Oksenvad Whiskylaug
Clynelish - Oksenvad WhiskylaugClynelish - Oksenvad Whiskylaug
Clynelish - Oksenvad Whiskylaug
 
Getting Started with the Ribbon library - MUGUKI User Group Meeting 2016
Getting Started with the Ribbon library - MUGUKI User Group Meeting 2016Getting Started with the Ribbon library - MUGUKI User Group Meeting 2016
Getting Started with the Ribbon library - MUGUKI User Group Meeting 2016
 
MapInfo Discover 3D: From 2D to 3D
MapInfo Discover 3D: From 2D to 3DMapInfo Discover 3D: From 2D to 3D
MapInfo Discover 3D: From 2D to 3D
 
Whiskysmagning: Samaroli
Whiskysmagning: SamaroliWhiskysmagning: Samaroli
Whiskysmagning: Samaroli
 
Hvad sker der hos Pitney Bowes
Hvad sker der hos Pitney BowesHvad sker der hos Pitney Bowes
Hvad sker der hos Pitney Bowes
 
MapInfo Discover 2015.2 64 bit
MapInfo Discover 2015.2 64 bitMapInfo Discover 2015.2 64 bit
MapInfo Discover 2015.2 64 bit
 
MapInfo Pro 64 bit og MapInfo Pro Advanced 64 bit
MapInfo Pro 64 bit og MapInfo Pro Advanced 64 bitMapInfo Pro 64 bit og MapInfo Pro Advanced 64 bit
MapInfo Pro 64 bit og MapInfo Pro Advanced 64 bit
 
MapInfo Pro Raster og de danske højdedata
MapInfo Pro Raster og de danske højdedataMapInfo Pro Raster og de danske højdedata
MapInfo Pro Raster og de danske højdedata
 
64 bits of MapInfo Pro - Danish version
64 bits of MapInfo Pro - Danish version64 bits of MapInfo Pro - Danish version
64 bits of MapInfo Pro - Danish version
 
Blend, Single Grain og Single Malt Whisky
Blend, Single Grain og Single Malt WhiskyBlend, Single Grain og Single Malt Whisky
Blend, Single Grain og Single Malt Whisky
 
MapInfo Pro og SQL Server - Uden opgaver
MapInfo Pro og SQL Server - Uden opgaverMapInfo Pro og SQL Server - Uden opgaver
MapInfo Pro og SQL Server - Uden opgaver
 
Nyheder i MapInfo Pro 12.5 Dansk 32 bit
Nyheder i MapInfo Pro 12.5 Dansk 32 bitNyheder i MapInfo Pro 12.5 Dansk 32 bit
Nyheder i MapInfo Pro 12.5 Dansk 32 bit
 
The Macallan - Oksenvad Whiskylaug
The Macallan - Oksenvad WhiskylaugThe Macallan - Oksenvad Whiskylaug
The Macallan - Oksenvad Whiskylaug
 
WMS, WFS og alle deres venner
WMS, WFS og alle deres vennerWMS, WFS og alle deres venner
WMS, WFS og alle deres venner
 
Hvad påvirker en whisky
Hvad påvirker en whiskyHvad påvirker en whisky
Hvad påvirker en whisky
 
The strength of a spatial database
The strength of a spatial databaseThe strength of a spatial database
The strength of a spatial database
 

Dernier

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Dernier (20)

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 

Muguki session on MapInfo Professional 11 and SQL Server 2008

  • 1. 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™ Every connection is a new opportunity™
  • 2. 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 Every connection is a new opportunity™
  • 3. 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 Every connection is a new opportunity™
  • 4. Every connection is a new opportunity™
  • 5. DAY 1 Every connection is a new opportunity™
  • 6. Creating database, login and users Every connection is a new opportunity™
  • 7. 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 Every connection is a new opportunity™
  • 8. Creating database, login and users Every connection is a new opportunity™
  • 9. Schemas Every connection is a new opportunity™
  • 10. 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. Every connection is a new opportunity™
  • 11. Creating a new schema Every connection is a new opportunity™
  • 12. Creating a ODBC Data source Data Data Every connection is a new opportunity™
  • 13. 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 Every connection is a new opportunity™
  • 14. 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. Every connection is a new opportunity™
  • 15. Creating a SQL Server 2008 data source Every connection is a new opportunity™
  • 16. The MapInfo Map Catalog Every connection is a new opportunity™
  • 17. 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 Every connection is a new opportunity™
  • 18. 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 Every connection is a new opportunity™
  • 19. 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. Every connection is a new opportunity™
  • 20. Creating the Map Catalog – EasyLoader Every connection is a new opportunity™
  • 21. Tables Every connection is a new opportunity™
  • 22. 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. Every connection is a new opportunity™
  • 23. Creating tables – data types Exact 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. 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. Every connection is a new opportunity™
  • 25. 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 Every connection is a new opportunity™
  • 26. 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 Every connection is a new opportunity™
  • 27. 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 Every connection is a new opportunity™
  • 28. 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) Every connection is a new opportunity™
  • 29. Creating tables thru Management Studio Every connection is a new opportunity™
  • 30. Creating tables thru MapInfo Pro Every connection is a new opportunity™
  • 31. Uploading tables to SQL Server Every connection is a new opportunity™
  • 32. 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 Every connection is a new opportunity™
  • 33. Uploading thru EasyLoader Every connection is a new opportunity™
  • 34. Using EasyLoader as a batch uploader Samples on how to pass parameters to EasyLoader for doing batch uploads Upload 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;Addresses Upload 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.txt Makes it easy to rerun the uploads! Every connection is a new opportunity™
  • 35. Uploading thru EasyLoader - batchmode Every connection is a new opportunity™
  • 36. 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 Every connection is a new opportunity™
  • 37. MapBasic syntax for Save as The 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 Interactive Some of the parameters are optional Every connection is a new opportunity™
  • 38. Uploading thru Save as Every connection is a new opportunity™
  • 39. 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_TABLE Where Str$(ObjectInfo(OBJ, 1)) In (”7”, ”8”, ”9”) And CartesianArea(OBJ, ”sq m”) < 1 Into __POSSIBLE_ISSUES_REGIONS Lines with a length of less than 1 meter Select * 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. Opening tables into MapInfo Professional Every connection is a new opportunity™
  • 41. 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. Every connection is a new opportunity™
  • 42. Opening DBMS tables into MapInfo Pro Every connection is a new opportunity™
  • 43. 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 Every connection is a new opportunity™
  • 44. 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" = "" "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. Meta data section - Live !table !version 500 !charset WindowsLatin1 Definition Table Type ODBC begin_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. MapInfo Pro: Linked vs Live tables Every connection is a new opportunity™
  • 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. 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. 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. 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. 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 Every connection is a new opportunity™
  • 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. DAY 2 Every connection is a new opportunity™
  • 54. Querying Every connection is a new opportunity™
  • 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 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  … Every connection is a new opportunity™
  • 56. Row filtering You 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 tables Value of Current_Mapper and Selection are static and not updated when the table is refreshed. Every connection is a new opportunity™
  • 57. 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 Every connection is a new opportunity™
  • 58. 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" = "" "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. Editing tables from SQL Server Every connection is a new opportunity™
  • 60. 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 Every connection is a new opportunity™
  • 61. 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 Every connection is a new opportunity™
  • 62. 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 Every connection is a new opportunity™
  • 63. Editing Every connection is a new opportunity™
  • 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. Editing – conflict resolution Every connection is a new opportunity™
  • 66. Refreshing linked tables Every connection is a new opportunity™
  • 67. 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 Every connection is a new opportunity™
  • 68. Refreshing DBMS tables thru a workspace !Workspace !Version 950 !Charset WindowsLatin1 Dim nConn As Integer nConn = Server_Connect( "ODBC", "DSN=GIS;UID=EditUser;PWD=Edit" ) Print “Connection opened as no: " + nConn Print “Now opening tables..." Open Table "D:3. demodbmsBuildings.tab" Interactive Map From Buildings Print “Refreshing the DBMS tables..." Server Refresh Buildings Close Table Buildings Print “We are done!" Server nConn Disconnect Undim nConn Every connection is a new opportunity™
  • 69. Files versus database Every connection is a new opportunity™
  • 70. 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. Every connection is a new opportunity™
  • 71. Creating views in SQL Server Every connection is a new opportunity™
  • 72. 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. Every connection is a new opportunity™
  • 73. 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 Every connection is a new opportunity™
  • 74. Creating views Every connection is a new opportunity™
  • 75. Making a DBMS table mappable Every connection is a new opportunity™
  • 76. 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 Every connection is a new opportunity™
  • 77. Making DBMS tables mappable Every connection is a new opportunity™
  • 78. 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_A UNION ALL SELECT * FROM dbo.ADDRESSES_B Add it to the MapCatalog if it is mappable Every connection is a new opportunity™
  • 79. 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/ Every connection is a new opportunity™
  • 80. 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 Every connection is a new opportunity™
  • 81. 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 Every connection is a new opportunity™
  • 82. Creating indexed views Every connection is a new opportunity™
  • 83. Introduction to Geometry type Every connection is a new opportunity™
  • 84. 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. Collection Point Line Region Multi Region Point Read more: Pline • http://msdn.microsoft.com/en-us/library/bb964711.aspx Every connection is a new opportunity™
  • 85. Geometry OGC methods STArea • STEquals • STNumPoints STAsBinary • STExteriorRing • STOverlaps STAsText • STGeometryN • STPointN STBoundary • STGeometryType • STPointOnSurface STBuffer • STInteriorRingN • STRelate STCentroid • STIntersection • STSrid STContains • STIntersects • STStartPoint STConvexHull • STIsClosed • STSymDifference STCrosses • STIsEmpty • STTouches STDifference • STIsRing • STUnion STDimension • STIsSimple • STWithin STDisjoint • STIsValid • STX STDistance • STLength • STY STEndpoint • STNumGeometries STEnvelope • STNumInteriorRing They are all case sensitive!!! Every connection is a new opportunity™
  • 86. Invalid geometries Find records with invalid geometries Select * From dbo.MYTABLE Where SP_Geometri.STIsValid() = 0 Fix records with invalide geometries – pure magic!? Or not!? Update dbo.MYTABLE Set SP_Geometri = SP_Geometri.MakeValid() Every connection is a new opportunity™
  • 87. 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 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, 0 Note that EasyLoader has its own projection file!! Every connection is a new opportunity™
  • 88. 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 Every connection is a new opportunity™
  • 89. 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 Every connection is a new opportunity™
  • 90. Spatial SQL samples Adding city name to only those roads, that intersects a city Select R.*, P.PLACENAME FROM dbo.ROADS AS R CROSS JOIN dbo.PLACES AS P WHERE (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.PLACENAME FROM dbo.ROADS AS R LEFT OUTER JOIN dbo.PLACES AS P On (R.SP_GEOMETRY.STIntersects(P.SP_GEOMETRY) = 1) Every connection is a new opportunity™
  • 91. Some (spatial) join types of SQL Server Inner 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. Inner Join ID NAME LASTNAME SELECT P.ID, P.NAME, L.LASTNAME FROM dbo.PERSONS AS P 1 Peter 1 INNER JOIN dbo.LASTNAMES AS L 2 Paul 3 ON (P.LASTNAME = L.ID) 3 Mary 5 4 Ann 2 ID LASTNAME 1 Møller ID NAME LASTNAME 2 Smith 1 Peter Møller 3 McCartney 2 Paul McCartney 4 Probert 4 Ann Smith Every connection is a new opportunity™
  • 93. Left Outer Join ID NAME LASTNAME SELECT P.ID, P.NAME, L.LASTNAME FROM dbo.PERSONS AS P 1 Peter 1 LEFT OUTER JOIN dbo.LASTNAMES AS L 2 Paul 3 ON (P.LASTNAME = L.ID) 3 Mary 5 4 Ann 2 ID LASTNAME ID NAME LASTNAME 1 Møller 1 Peter Møller 2 Smith 2 Paul McCartney 3 McCartney 3 Mary <NULL> 4 Probert 4 Ann Smith Every connection is a new opportunity™
  • 94. Cross Join ID NAME LASTNAME SELECT P.ID, P.NAME, L.LASTNAME FROM dbo.PERSONS AS P 1 Peter 1 CROSS JOIN dbo.LASTNAMES AS L 2 Paul 3 WHERE (P.LASTNAME = L.ID) 3 Mary 5 ID NAME LASTNAME 4 Ann 2 1 Peter Møller 2 Paul McCartney ID LASTNAME 4 Ann Smith 1 Møller 2 Smith Note: A Cross Join without condition will join every 3 McCartney record in the first table with every record in the other table 4 Probert Every connection is a new opportunity™
  • 95. Creating spatial joins Every connection is a new opportunity™
  • 96. Triggers i SQL Server Every connection is a new opportunity™
  • 97. 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 Every connection is a new opportunity™
  • 98. 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 Every connection is a new opportunity™
  • 99. 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 [ ; ] > } Every connection is a new opportunity™
  • 100. Create a timestamp trigger on update CREATE TRIGGER dbo.trg_MY_TABLE_AfterUpdate ON dbo. MY_TABLE AFTER UPDATE AS Begin Update dbo.MY_TABLE Set DATE_CHANGED = CURRENT_TIMESTAMP, USER_CHANGED = USER Where MI_PRINX In (Select MI_PRINX From inserted); End GO Every connection is a new opportunity™
  • 101. Create a timestamp trigger after insert CREATE TRIGGER dbo.trg_MY_TABLE_AfterInsert ON dbo. MY_TABLE AFTER INSERT AS Begin Update dbo.MY_TABLE Set DATE_CREATED = CURRENT_TIMESTAMP, USER_CREATED = USER Where MI_PRINX In (Select MI_PRINX From inserted); End GO Every connection is a new opportunity™
  • 102. Create a ”history” trigger CREATE TRIGGER dbo.trgCopyToHistory ON dbo.ADM_KOMMUNE_2007 AFTER DELETE,UPDATE AS 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_STYLE From deleted End Go Every connection is a new opportunity™
  • 103. 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 Every connection is a new opportunity™
  • 104. Creating triggers Every connection is a new opportunity™
  • 105. DAY 3 Every connection is a new opportunity™
  • 106. Using MapBasic to access SQL Server Every connection is a new opportunity™
  • 107. Process Create 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. 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 Every connection is a new opportunity™
  • 109. 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 Every connection is a new opportunity™
  • 110. Find DBMS Every connection is a new opportunity™
  • 111. Find DBMS Every connection is a new opportunity™
  • 112. 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 Every connection is a new opportunity™
  • 113. Table Refresh Every connection is a new opportunity™
  • 114. Questions  Peter Horsbøll Møller  peter.moller@pb.com  www.pbinsight.com Every connection is a new opportunity™
  • 115. ™ Every connection is a new opportunity Every connection is a new opportunity™