Understanding Precision in MapInfo Pro - MapInfo_Pro - 2023

MapInfo Pro Help

Product type
Software
Portfolio
Locate
Product family
MapInfo
Product
MapInfo > MapInfo Pro
Version
2023
ft:locale
en-US
Product name
MapInfo Pro
ft:title
MapInfo Pro Help
First publish date
1985
ft:lastEdition
2023-09-12
ft:lastPublication
2023-09-12T16:39:16.995000

MapInfo Pro is a very good application for working at a high precision level. But the onus is on the user to discover the practical limits of the program in various circumstances and how to set the work environment in order to obtain the desired precision level. Millimeter level precision can be easily attained and maintained with projected maps in the metric system.

The most basic component of any GIS is the spatial data that defines the map features. This spatial data could not exist without the coordinate systems that are used to specify the location information. Coordinate precision is a measure of storing spatial data as accurately as possible. Of course, this can be no more precise than the original data provided. Precision is a measurement of how accurately you can store and retrieve the spatial data and has nothing to do with the quality of the data. The number of reliable digits in your coordinate is termed significant digits. Precision is measured in terms of these significant digits.

The Quest For Superior Map Precision

One question that is raised again and again is "How can I obtain a higher level of precision from MapInfo Pro?". This questions is usually followed by, "Why not use 64-bit data precision like some other systems?". To answer these questions, it is first necessary to understand how MapInfo software stores spatial data.

You would think it was just a case of writing out numbers such as 153.34125 and -26.21435 to a file. This method would work but it would be very inefficient and slow. What MapInfo Pro does is store all data written to file in single-precision 32 bit integers. A 32-bit integer is able to hold a whole number from 0 to well over 2 billion. When a table is read back in, MapInfo Pro converts this integer data back into its real world coordinates and stores it in memory as 64 bit floating point numbers. This may sound like a lot of work but it is in fact how most systems that deal with large numbers work.

The precision is affected by what coordinate system the data is read in to. For example, when using Latitude/Longitude coordinates, you have to be able to store numbers in the range of -180 to +180 and from -90 to +90. This means the largest number we need is 360. Actually, for mathematical reasons (for example faster calculations), MapInfo Pro uses the range -1000 to +1000 which makes 2000 the largest number. If you then divide this range by the 2 billion possible from the 32bit integer, you get 0.000001 of a degree (about 4 inches).

The point to remember here is that this is the default world coordinate system. As will be explained below, MapInfo Pro has a method by which you can improve this level of precision. Very few applications of GIS ever need the entire World down to sub millimeter accuracy. Typically, GIS users work within a much smaller area such as a state, local government area or even a single town. We refer to this as "bounded coordinates".

All MapInfo spatial data layers are bounded. As we saw above, the default World projection is bounded by +/- 1000. MapInfo Pro calls this "implicit bounding" as there is no mention of the coordinate range. In fact, when you use any of the projections MapInfo Pro supports, these all use "implicit bounding".

Take the UTM projection which is commonly used in Australia. It is a 6 degree wide band that wraps around the world. When you select the projection from a dialog, you select a particular zone (for example, a 6 degree band) for either the northern or southern hemisphere. The bounds here are 10,000,000m to the north (the Equator) and 0m at the 80 degrees south latitude. The projection is also 1,000,000 metres wide with a centre at 500,000m.

Using the same method as above, this projection has a numerical range of 10,000,000. When divided by 2 billion the precision is 0.005 of a metre (half a centimeter).

Eureka - There Is A Way!

To obtain higher precision, MapInfo Pro also supports "explicit bounding" where the user can manually specify the coordinate bounds. You get a glimpse of this when you create a Non-Earth table where you are prompted to specify the minimum and maximum coordinate extents. You can also use "explicit bounding" to modify any of the standard MapInfo projections. When you do this you specify a smaller range for your coordinates. The smaller the range, the higher the precision. For example, Brisbane is bounded by the coordinates 7,000,000 (North), 6,930,000 (South), 470,000 (West) and 530,000 (East). The maximum range here is 70,000m. Divide this by 2 billion and you get 0.000035 of a metre accuracy. This is 0.034 of a millimeter accuracy. Applying bounds in a similar manner to cover all of Australia equates to approximately 10 centimeter accuracy.

You can use explicit bounding whenever you want to store spatial data to a higher level of accuracy. However, you cannot add bounds to an existing layer and expect the data to become more accurate. The same coordinate will be there after you add the Bounds. Only when you add new data or edit existing data will you be able to use the higher precision.

Show Me The Way

So, how do you create a table with explicit bounding? The first thing you need to do is determine the coordinate range that meets your requirements. Remember that once bounds are set for a layer, that layer cannot store spatial data outside the bounds. If for example you were a local government authority, you might set the layer bounds to be 10km outside your authority boundary.

Even if you set the layer bounds to be 100km larger, you would still obtain a much higher level of coordinate precision. If you where a state government department, you may use a Lat/Long projection with bounds set to just outside the state boundary.

Next you create your tables as normal setting the desired projection. To apply the bounds to the table, run the MapBasic application CoordSys Bounds Manager. This application shows a list of the currently opened layers. The selected layer's bounds are displayed as shown below.



Note: Run the CoorSys Bounds Manager from the Tools menu. If it is not available, then see Working with MapInfo Pro Tools.

You can manually key in bounds or use the Optimize CoordSys Bound button to read it from the data already in the layer. Finally, you save a new copy of the table. A good approach is to create a new empty table with explicit bounds set. Then for any new tables you create, make them from a copy of this empty file.

Tip: Use the Create New Table command.

Sometimes you may receive data from other systems in MIF/MID format. Depending on the source, this data may have more precision than can be handled by the standard implicit projection. For example, the MIF/MID exported from Microstation in GDA projection may have 3 decimal places. If you just import it into MapInfo Pro you will end up with data to 2 decimal places. An alternative, enabling full precision to be retained, is to open the MIF file in any text editor and add the appropriate projection settings (including Bounds) to the header section. Then, when the data is imported, you will have 3 decimal place precision as in the original data.

Precisely has chosen to use the 32bit integer for external storage instead of 64-bit integer because it offers a good balance between efficiency and precision. As discussed above, if you want higher precision, then MapInfo Pro can provide it the through the use of explicit bounding, this will however have a performance impact when working with the spatial data so implement this judiciously. Experience shows that for the vast majority of users, the default implicit bound projections provide ample precision. The use of 32bit integers for storage also means that MapInfo spatial data is stored in half the space as the equivalent 64-bit data. Not only is this more efficient, it also means that data loads and displays much quicker.

Storing data with a higher level of precision is only appropriate when the source data is supplied with a comparable level of precision. In any case, MapInfo Pro can handle higher precision data if the user desires, the user needs to be fully aware of the options available and how to implement them in order to make full use of it.

Some Constants

  • x and y coordinates should be given with the same number of decimal digits (unless ending in zeros)
  • The number of decimals varies within a certain range with the level of internal precision.