GTViewer version 9.0.x.14 is available.
Monday, August 23, 2010
GTViewer version 9.0.1.14 is Available
GTViewer version 9.0.x.14 is available.
Thursday, August 12, 2010
GT/Field Pro version 9.0.0.2 is Available

GTV .NET Control for Windows version 9.0.0.11 is Available

The GTViewer .NET Control for Windows version 9.0.0.11 is Available.
Tuesday, August 10, 2010
GT/Field for Windows Mobile version 9.0.0.1 is Available

Sunday, August 08, 2010
PGTV .NET Control version 9.0.0.6 is Available

Friday, July 23, 2010
GT/Metadata Explorer version 1.0.0.35 is Available
GTech Loader version 8.0.0.19 is Available

Saturday, July 10, 2010
GTViewer version 9.0.x.12 is Available
GTViewer version 9.0.x.12 is available.
Tuesday, July 06, 2010
GTech Loader version 8.0.0.18 is Available

Monday, June 14, 2010
TechEd 2010 in New Orleans
TechEd 2010 was held last week in New Orleans. There seemed to be a big turn out this year in the Big Easy, and the conference provided some good information.
Microsoft was definitely pushing the Cloud this year with its Windows Azure, SQL Azure, and AppFabric products. All looked interesting, but it was never clear to me how much it costs to have Microsoft host your apps and database.
Another topic of interest to me was Windows Phone 7 (WP7). Unfortunately, it is not capable of supporting sophisticated applications like Pocket GTViewer in its October debut. I wrote about what is missing from WP7 in another post. While we (GTI) should easily be able to interface with GTWeb from a WP7 device using a slick Silverlight app, WP7 is not capable of running Pocket GTViewer or GTField for Windows Mobile.WP7 cannot access large data files (such as a .gtx on a SD card), and it can’t use native code (our raster libraries are native as well as a good chunk of code shared with the desktop version of GTViewer). There are also issues with having to load apps through the Microsoft Marketplace, no interaction with the desktop via RAPI, and no custom TrueType font support. Microsoft admitted that WP7 was a rush job so that they could to get it to the market this year and may have more essential functionality rolled into it with later versions. Nevertheless, it is a radically different platform from Windows Mobile and may very well open up a door to new and different applications (while at the same time closing the door to applications we are using today).
On the pure development front, there are many good things that I saw like the Task Parallel Library that will make getting the most out of multi-core processors easier. Also, Silverlight 4, Expression Blend 4, and Visual Studio 2010 finally look good enough in respect to WPF to leave Windows Forms behind (at least for new development).
Mark Russinovich gave an excellent presentation on the Unexplained such as slow running machines and crashes. Anyone with unexplained machine problems would have benefited from this presentation (search his blog for some of the same information).
Next year, TechEd 2011 is in Atlanta.
Thursday, June 03, 2010
GTViewer version 9.0.0.11 is Available
GTViewer version 9.0.1.11 is available.
GTVX version 9.0.0.3 is Available

Monday, May 31, 2010
Geometry Info in the GT/Metadata Explorer
GT/Metadata Explorer version 1.0.0.34 is Available
Wednesday, May 19, 2010
Coordinate Factors – What are They? How Do You Set Them?
The Coordinate Factors are 6 numeric values defined in the [General Info] section of the .GTM file using the following entries:
- CoordinateFactor1X
- CoordinateFactor1Y
- CoordinateFactor2X
- CoordinateFactor2Y
- CoordinateFactor3X
- CoordinateFactor3Y
The Coordinate Factor values are used to convert Real-World Coordinates (sometimes referred to as Computed Coordinates) to GTViewer’s Internal Coordinates (sometimes referred to as System Coordinates) and vice versa. Real-World Coordinates are coordinates in the data’s native coordinate system, such as State Plane, Latitude/Longitude, UTM, etc. These values are usually double precision floating point numbers. GTViewer’s internal coordinates are stored such that they require less storage space in the graphic files (.gtg) and the spatial index files (.gtn). Instead of storing coordinate values as double precision floating point values (which are 8 bytes each), they are instead stored as an unsigned 32 bit integers (which are 4 bytes each). This change of type brings an immediate 50% saving in the data size; however, the internal coordinate values no longer reflect their real-world positions. To get around this problem, the Coordinate Factors provide the necessary information to restore the internal coordinates to real-world coordinates.
There are really only two places where the effects of the Coordinate Factor values can be seen in GTViewer: the Coordinate Readout on the status bar and the GPS Functionality. Without the Coordinate Factors, the coordinate readout on the status bar would show GTViewer’s internal coordinate values which are likely meaningless to the users. With properly configured Coordinate Factors, the readout will show Real-World coordinates. The GPS functionality must be able to convert the Latitude/Longitude coordinate it gets from the GPS Receiver to GTViewer’s internals coordinates so that the GPS Indicator can be drawn at the right position. GTViewer’s coordinate transformation routines will convert points from Latitude/Longitude to one of the many Real-World coordinate projection systems it supports, then the Coordinate Factors are used to take the real-world coordinates to GTViewer’s internal coordinates system.
To understand how the Coordinate Factors work, there is some simple math involved. The Coordinate Factors are the variables used in the following formulas to convert Real-World coordinates to GTViewer’s internal coordinates:
GTViewerX = ( RealWorldX + CoordinateFactor1X) * CoordinateFactor2X + CoordinateFactor3X
GTViewerY = ( RealWorldY + CoordinateFactor1Y) * CoordinateFactor2Y + CoordinateFactor3Y
To convert GTViewer internal coordinates back to Real-World coordinates, the above formulas are simply rewritten as:
RealWorldX = ( GTViewerX – CoordinateFactor3X) / CoordinateFactor2X – CoordinateFactor1X
RealWorldY = ( GTViewerY – CoordinateFactor3Y) / CoordinateFactor2Y – CoordinateFactor1Y
It may not be obvious how the Coordinate Factors should be set just by looking at the formulas above, but the goal is simple. The coordinate factors are set so that any point in the dataset (Real-World coordinates) will map to a point whose X and Y are both unsigned (positive) 32 bit integer whose range is 0 to 4,294,967,296. There are many ways to figure out what the Coordinate Factors should be to meet this goal, and I will go through the simplest approaches below.
Think of GTViewer’s coordinate space as a window whose lower left is always (0,0) and whose upper right is always (4294967269,429967296). This coordinate space is very large even if it is somewhat smaller that a double precision floating point coordinate space. To map the real-world coordinate values into this window, we simply adjust the coordinate factors so that the real-world points are properly scaled and shifted.
The Coordinate Factor X2 and Y2 are the multipliers (which will scale the data), so they are used to get the precision you need for the GTViewer data. With Latitude/Longitude data, you need around 6 decimal places, so you can set the X2 and Y2 to 1,000,000. Then when the Real-World X or Y is multiplied by the X2 or Y2 Coordinate Factors, you will get 6 of the digits after the decimal place as part of the number. If your data is in Feet or Meters, then can you set the X2 and Y2 to 100 or 1000, which means that you will get precision to 100th or 1000th of a foot or meter.
Latitude/Longitude Example:
Real-World X=-86.4664839 (Longitude)
Real-World Y=34.6550175 (Latitude)
To preserve 6 decimal places, we set the X2 and Y2 Coordinate Factors to 1,000,000.
GTViewerX = -86.4664839 * 1000000 = -86466484
GTViewerY = 34.6550175 * 1000000 = 346550175
The Multipliers preserve the precision when the values are converted; however, in the example above, the GTViewerX value is negative. The X1/Y1 and the X3/Y3 Coordinate Factors are the Shift values and come in here to move the data back into the positive space. It is also possible that the GTViewer coordinate values may exceed the 4,294,967,296 maximum after the Multipliers are applied, so the Shift values can also be used to move the data back down into the desired coordinate space.
The difference between the X1/Y1 and the X3/Y3 Coordinate Factors is that one is applied before the Multipliers and the other is applied after the Multipliers. This difference also means that the X1/Y1 Coordinates factors will be in Real-World units, while the X3/Y3 Coordinate Factors are in GTViewer’s System units. It generally doesn’t matter if you use the X1/Y1 or the X3/Y3, and you would rarely use both at the same time.
For the Latitude/Longitude example it is more straight forward to use the X1/Y1 since they are in real-world coordinate units (degrees). We know that Latitude has a range of -90 to +90 and Longitude has a range of -180 to +180. In both cases, there can be negative values, and the X1 and Y1 Coordinate Factors need to account for possible negative values. In a meticulous world, we would simply say that X1=90 and Y1=180, and we would be guaranteed to have positive values before the multipliers are applied and the resulting values would always be positive. In practice, it is good to have a little buffer around the data and to prevent confusion on which Coordinate Factors needs to be 90 and which one needs to be 180, I use 200 for both X1 and Y1. The X3 and Y3 Coordinate factors are not needed and can be set to 0. So, for Latitude and Longitude data, the formulas look like this:
GTViewerX = ( RealWorldX + CoordinateFactor1X) * CoordinateFactor2X + CoordinateFactor3X
GTViewerX = ( -86.4664839 + 200) * 1000000 + 0
GTViewerX = 199999914
GTViewerY = ( RealWorldY + CoordinateFactor1Y) * CoordinateFactor2Y + CoordinateFactor3Y
GTViewerY = (34.6550175 + 200) * 1000000 + 0
GTViewerY = 234655018
The Converted Coordinates meet the criteria of being between 0 and 4294967296 and we preserve 6 decimal places of precision from the original values. It is a good idea to test the extreme values (lat: -90, long:-180) to ( lat:90 to lon: 190) through the formulas to make sure they still fit in the GTViewer coordinate space, but for brevity I will omit that from this posting.
Since most user data is probably in a State Plane coordinate space or similar, I will go through the process for determining the Coordinate Factors in this case as well. The Real-World Coordinates are generally in Feet or Meters and we typically do not need more than 2 or 3 decimal places for precision, so the X2 and Y2 Coordinate factors can be set to 100 or 1000. If your data range is positive, you may not need an X1/Y2 or X3/Y3 to shift the data. We can mathematically compute the perfect Multipliers and Shift values to maximize the amount of the GTViewer coordinate space, but this extra work usually causes problems in the long run. Just make sure the values are positive and there is a little buffer around the data. It is a good idea to know the approximate range of your dataset in Real-World coordinates. If you have any negative values, then you will have to shift the data into the positive space by setting X1/Y1 to at least the absolute values of the smallest negative value (plus a little more for a buffer). If your highest values after the Multiplies are applied are greater than the 4,294,967,296, then you can set your X1/Y1 or X3/Y3 values to a negative value to brings the values under the limit. This description is vaguer than my description for Latitude/Longitude data, but there are simple tests to see if your Coordinate Factors are good. If you look at the data in GTViewer and the data “wraps” around to the other side, then the data needs to be shifted.
The first example below shows the data with the Coordinate Factors properly set:

The following example shows data where the coordinates have negative values and the data is wrapping around from the left to the other side of the design plane. The data needs to be shifted to the right, so the X1/Y1 need to be set to higher values.
When FME gets ready to write the GTViewer data as output, it has Real-World Coordinates (in the Coordinate System set for the destination). The Coordinate Factors are then applied to the Real-World coordinates to get GTViewer internal coordinates. Many users have asked why you have to set these values with FME. It is certainly possible get the range of the data and use this information to compute good values for the Coordinate Factors. However, there are many draw backs to making this part automatic:
- Setting the coordinate factors is a one-time thing, so expending a lot of computation effort to set them each time the data is converted is not practical.
- All of the data would have to be processed to get the range, then processed again for the conversion.
- Data is notoriously bad. One stray feature would corrupt the range and create a bad set of Coordinate Factors.
- You don’t want the Coordinate Factors to change from one run to the next. Adding new data to a dataset could change the range which would change the Coordinate Factors. Then data from previous runs and redlines would not overlay with the current data.
Using Coordinate Factors with Microstation/IGDS Data
Working with Microstation/IGDS data has a few interesting quirks that can be taken advantage of if you know what to do. A DGN file is also bound by a 32 bit integer Design Plane. However, the Global Origin concept is used to specify where in the Design plane (0,0) occurs allowing negative values to be used. By default, the global origin is in the middle (2147483648,2147483648) which allows the design plane to have a range of something like (-2147483648,-2147483648) to (2147483648,2147483648). The X3/Y3 Coordinate Factors can be set to 2147483648 to compensate for the origin. If the Global Origin is set to a specific location, then Coordinate Factors must reflect this configuration. GTData contains a utility called GTGetOffset that will attempt to get global origin info as well as the UORs per master unit from a DGN File and generate the CoordinateFactor entries for the .GTM file. While this utility is not always correct (depending on the configuration of the data), it can be very useful.
Thursday, May 13, 2010
PGTV .NET Control version 9.0.0.3 is Available

GTV .NET Control Version 9.0.0.8 is Available

The GTViewer .NET Control for Windows version 9.0.0.8 is Available.
Friday, May 07, 2010
Thursday, April 29, 2010
GTData version 9.0.0.3 is Available

Wednesday, April 28, 2010
GTViewer version 9.0.x.10 is Available
GTViewer version 9.0.x.10 is available.
GTVx version 9.0.x.2 is Available

Thursday, April 08, 2010
GTVx version 9.0.x.1 is Available

-----------------------
09.00.00.01 - 04/08/10
-----------------------
- NEW - #6266 - Filter Id is now supported by the Symbol entry definitions in the .GTM file.
- NEW - #6271 - Support for the "SW:" tag in the filter files.
- NEW - #6287 - Feature Tooltips will now support the GIS() notation for specifying filter ids.
- NEW - #6289 - Custom Attribute Info tabs are now supported.
- NEW - #6290 - Attribute Info dialog box now supports sorting rows when column is clicked.
- NEW - #6291 - The Attribute Info dialog now supports a Print button to print the current tab.
- NEW - #6292 - ConvertToSessionGraphicsMode data property has been added. When set to 0 (default), it will function as it always has. When set to a number greater than 0, it will use that value as the zoom level for scale dependent graphics. When set to -1, scale dependent graphics are omitted.
- NEW - #6293 - GIS Feature and GIS Component information are now read from the Filter Description field. This information is shown on the element tab of the
Attribute Info dialog.
- NEW - #6294 - Filter Info section added to Element tab.
- NEW - #6295 - Selecting a coordinate row on the element tab will now draw a highlight circle at the selected coordinate.
- NEW - #6297 - Copy Highlighted to Session Graphics functionality updated to
support conversion of symbols to text element to preserve symbol character in session category.
GTViewer version 9.0.x.9 is Available
GTViewer version 9.0.x.9 is available.
09.00.00.09 - 04/08/10
-----------------------
- NEW - #6265 - Filter Id is now supported by the Symbol entry definitions in the .GTM file.
- NEW - #6268 - XmlExportMode has been added to the Additional Properties section. Can be set to GTField to produce a GTField specfic XML export format.
- NEW - #6270 - Support for the "SW:" tag in the filter files.
- FIX - #6284 - With 2 or more Post Actions, if the first one failed, it would say no data to post even though it could post data on the next action.
- FIX - #6285 - Post Actions would say No data to post for each action when it should only give the message once.
- NEW - #6286 - Feature Tooltips will now support the GIS() notation for specifying filter ids.
- FIX - #6288 - Sorting a Custom Attribute table would cause problems. Sorting should not be allowed on custom attribute tabs.
- NEW - #6296 - Coordinate Indicator on the element tab will now support the Center and Origin coordinates as well as the Point coordinates.
Friday, March 12, 2010
GTViewer version 9.0.x.8 is Available
GTViewer version 9.0.x.8 is available.
09.00.00.08 - 03/12/10
-----------------------
- FIX - #6202 - If a Feature Tooltip label is blank and the value is blank, then the attribute is skipped.
- NEW - #6212 - All GTM paths will now accept a semicolon delimited list of paths. The first valid path will be used if more than one path is given.
- NEW - #6219 - Detail Range File now includes a coordinate mode parameter so that ranges can be specified as system or computed coordinates.
- NEW - #6223 - The filterId for CopyHighlightedToSession can now be set with the HighlightedToSessionFilterId Data Property.
- NEW - #6225 - LoadLinestyleDef method added.
- FIX - #6232 - Text elements containing empty strings would cause problems with Feature Counting.
- NEW - #6237 - The Element Tab on the Attribute Info dialog will now show detailed information for Dimension elements.
- CHG - #6238 - Post functionality will no longer post and empty .gtg file.
- NEW - #6239 - CategoryStyleScale support added to the category sections.
- FIX - #6244 - BGMask was sometime not getting filled depending on last style object used.
- NEW - #6245 - Selecting a coordinate row on the element tab will now draw a highlight circle at the selected coordinate.
- FIX - #6247 - RasterPath entry did not follow the alter path definitions added with #6211.
- FIX - #6248 - BorderColorValue was not working for Shape with Hole Elements.
- FIX - #6250 - The RasterPath entry in Raster Categories was not correctly handling the lack of a backslash at the end of the path in all cases.
- FIX - #6260 - TrueType fonts on UDLS definition were not correctly centered in the lines.
GTVx version 8.0.x.15 is Available

-----------------------
08.00.00.15 - 03/12/10
-----------------------
- NEW - #6242 - ExtractDataByShape method has been added.
- FIX - #6243 - BGMask was sometime not getting filled depending on last style object used.
- FIX - #6246 - RasterPath entry did not follow the alter path definitions added with #6211.
- FIX - #6249 - BorderColorValue was not working for Shape with Hole Elements.
- FIX - #6251 - The RasterPath entry in Raster Categories was not correctly handling the lack of a backslash at the end of the path in all cases.
- FIX - #6261 - TrueType fonts on UDLS definition were not correctly centered in the lines.
Monday, February 01, 2010
GTViewer version 9.0.x.7 is Available
GTViewer version 9.0.x.7 is available.
-----------------------
09.00.00.07 - 02/01/10
-----------------------
- NEW - #6175 - Attribute Info dialog will now show the first 25 characters of embedded data instead of just saying it is present.
- NEW - #6178 - Attribute Info dialog will now support the MeasureFactor, MeasurePrecision, and MeasureUnitLabel properties.
- FIX - #6180 - The MeasurePrecision data property was not spelled correctly. MeasurePrecision and MeasurePrecison are both accepted now.
- CHG - #6192 - The %DATE% token in the GTField Post user name will now replace all blanks with an underscore.
- NEW - #6193 - If
- FIX - #6195 - QueryActivate always returned True even if the dialog were cancelled.
- NEW - #6196 - RasterFile display instruction has been added to the ToolBoxes.
Friday, January 15, 2010
GT/Metadata Explorer version 1.0.0.32 is Available
-----------
01.00.00.32 - 01/15/10
-----------
- NEW - #6188 - Set to be a 32bit app for easier compatibility with Oracle
Drivers on 64 bit machines.
-----------
01.00.00.31 - 09/09/09
-----------
- NEW - #6016 - Support for the different Legend structure in G/Tech 9.4.3.
- CHG - #6018 - Evaluation Keys changed to use a different mechanism.
- FIX - #6019 - About tab was disabled when application expired.
Wednesday, December 23, 2009
GTViewer version 9.0.x.6 is Available
GTViewer version 9.0.x.6 is available.
-----------------------
09.00.00.06 - 12/23/09
-----------------------
- FIX - #6170 - Raster range computation for MrSID file would have problem with large images using lat/long projections because of roundoff error.
- FIX - #6171 - Problem introduced with #6166 where the application menu does not clear out the default entries when no query or app menus exists.
Monday, December 21, 2009
GTViewer version 9.0.x.5 is Available
GTViewer version 9.0.x.5 is available.
-----------------------
09.00.00.05 - 12/21/09
-----------------------
- FIX - #6165 - Maximum Priority count was not initialized for dataset that did not use style rules.
- FIX - #6166 - Application menu would not update in some cases such as when a document was opened then closed, then another document was opened.
Friday, December 04, 2009
GTViewer version 9.0.x.4 is Available
GTViewer version 9.0.x.4 is available.
-----------------------
09.00.00.04 - 12/04/09
-----------------------
- FIX - #6121 - On Break at Vertex would be enabled and would work when on the first or last point of a line string.
- NEW - #6123 - LogRedlineEdits has been added to the [Additional Properties] section. If set to 1, all Move, Rotates, and Scales will be logged to a file.
- FIX - #6128 - Disclaimer would hide GTViewer when opening a file wit the Open Last File option on.
- FIX - #6130 - Category Level Display and Print Thresholds for Style, Weight, and Priority were not working correctly. If defined and false, they were using the default setting for the dataset instead of an off value.
- NEW - #6133 - GetPrintProperty and SetPrintProperty methods have been added.
- FIX - #6141 - Force Black and White was not converting colors for elements using a style rule with a BorderColorValue specified.
- NEW - #6144 - GetElementText will now work with Dimension Elements.
- NEW - #6146 - GetElementFontId will now work with Dimension Elements.
- NEW - #6148 - GetElementTextSize will now work with Dimension Elements.
- NEW - #6150 - GetElementDimensionInfo method added.
- NEW - #6151 - DrawDimension32 method added.
- FIX - #6154 - The X prompt will now have the focus when the dialog displays.
- FIX - #6155 - The ExportSessionGraphics method was not properly handling the mode parameter.
- FIX - #6156 - Problem was introduced with #5880 where the active indicator is shown by an active user preset.
Thursday, November 19, 2009
GTech Loader version 8.0.0.15 is Available

08.00.00.15 - 11/19/09
-----------
- FIX - #6129 - If a Legend entry did not have a default style rule defined, the loader would stop. Now, the last style rule in the list will be used as a default, and a message is written to the log file.
- FIX - #6134 - Elements whose ESEQ value did not reset between elements were incorrectly grouped together.
Thursday, October 29, 2009
GTData version 9.0.0.1 is Available

- FIX - #5990 - GTQuery - GTQuery was not displaying the version number in the output header.
- NEW - #6086 - GTCompact - All deleted elements are not omitted.
- NEW - #6094 - GTLabelGtg - The LabelAttribute entry can now be set to "\n" to allow carriage returns to be placed between attributes.
- FIX - #6122 - GTIndex - The TrueType font list was not show when the application ran.
- NEW - #6124 - Support for Redline Edit Logfiles with the -editFile parameter.
- CHG - #6125 - InstallShield Setup change to allow upgrade if installing a newer version instead of requiring the previous version to be removed.
Friday, October 23, 2009
GTVx 8.0.x.12 is Available

- NEW - #5904 - The GetFilterIdFromGisInfo method has been added to return a list of Filter ids from a GIS Feature and GIS Component information stored in the Filter Description field.
GTViewer version 9.0.x.3 is Available
GTViewer version 9.0.x.3 is available. The Release Candidate and Released version held up the normal flow of updates for the last month. We will now resume our normal schedule.
-----------------------
09.00.00.03 - 10/23/09
-----------------------
- FIX - #6110 - Add, Delete, and Break at Vertex were causing the ElementSelected event to be fired too many times as the old element was deleted and the new element was added.
- FIX - #6111 - Attribute Info dialog now uses a default width that includes the Count button.
- NEW - #6112 - Count Detail dialog will now show coordinate values in Lat/Long if one of the Lat/Long coordinate readout modes is used.
- CHG - #6113 - Tip of the Day no longer shown at startup.
- FIX - #6117 - Hatch Fill on Shape with Hole elements would not use the correct fill color.
- FIX - #6118 - Print to Scale with Center of View was not getting all of the graphics in the print (it was still using center point as the lower left corner of the spatial query).







