Thursday, December 22, 2005

Happy Holidays - Looking Forward to 2006

The Holiday season and end of the year activities has slowed down the routine postings, but rest assured, the regular postings will resume in January.

There are many exciting things GTI has in store for 2006:

Pocket GTViewer 5.0 will be release early in the year. This version of Pocket GTViewer will contain a significant amount of new functionality, plus support for Windows Mobile 5.0.

GTViewer will provide an import and export capability via Safe’s FME Enablement. This functionality will allow redlines to be imported and exported in GTViewer to and from any FME support format as long as FME is installed on the same machine as GTViewer.

A new product called GT/Field will allow users to create data collection and inspection apps for GTViewer and Pocket GTViewer using a GUI interface (no coding or development required).

Thursday, December 08, 2005

Automated Vehicle Location in GTViewer using APRS

Years ago when the Global Positioning System (GPS) was just beginning to make its impact on GIS, I would opine that, “GPS was a solution in search of a problem.” Obviously, today GPS is the solution to many GIS and non-GIS problems and is used daily in hundreds of different applications. And since I consider myself a knowledgeable person in the GIS industry, I thought I already knew about all of them. But recently while making arrangements to create a sample dataset for a potential client, I was surprised to learn something new about the use of the Global Positioning System (GPS).

Apparently, there is widespread use of GPS within the amateur or ham radio community which includes businesses, utilities, and municipalities. My understanding is that ham radios can be a more reliable form of communications than other radio-based systems- especially under emergency conditions.

Briefly stated, vehicles with ham radios and certain GPS devices can transmit data such as their GPS coordinates, estimated speed, bearing, and more. This is accomplished through the Automatic Position Reporting System (APRS). APRS is a system developed by Bob Bruninga which uses amateur radio to transmit position reports, weather reports, and messages between users. This data are received and eventually collated and stored within a central database. This database is available and accessible through the internet. Vehicles transmitting this data are displayed as icons with their call signs next to them on web-based, interactive maps. If you are interested in APRS and want to know more about it, please visit .

If you are looking for a specific vehicle and you know its call sign, you can enter the call sign and the vehicle’s position will be automatically generated and displayed for you on a map on the web site. This intrigued me and I wondered if I could develop an application which would query the database, receive the data, and display the location and data on a map within GTViewer. The result was a small, customized .ocx application I wrote that works within the standard GTViewer product as an external application. Using the Data Monitor toolkit functionality within GTViewer was straightforward and a lot of fun.

The results of my application as you can see are simple but as you might imagine you could get carried away and practically create your own Automatic Vehicle Location system.

As these screenshots illustrate, you don’t necessarily need the power of GTVx to create customized and functional applications. Many of them could be designed simply as external applications using your own data and GTViewer right out of the box!

Wednesday, December 07, 2005

GTViewer 5.0.x.8 is Available

Version of GTViewer is available.

----------------------- - 12/08/05
- CHG - Evaluation Timeout extended.
- FIX - Overview Map did not display elements whose priority was not 1.
- FIX - Style Manager did not like Filter Id greater than the max (500).
It will now semi-ignore them.
- FIX - Label in View Extents was Xhigh Ylow when it should have said Xhigh Yhigh.

- FIX - The Smallworld Justification codes were conflicting with the Microstation codes, so the Smallworld justification values are shifted by 150 so that they do not overlap.
- NEW - Shapefile Export has been added under Draw/Export.
- FIX - Fit Session Graphics was not adjusting for deleted redline elements.
- NEW - New Methods:

Doc Object:
boolean SetIndicatorRefHeadingDisplay(long mode);

boolean SetIndicatorRefHeading(double bearing);
boolean GetGpsInfo(VARIANT* attrList, VARIANT* valueList, long* count);
boolean SetIndicatorDisplay(boolean value);
boolean SetIndicatorPosition(long mode, double x, double y);
boolean GetIndicatorPosition(long mode, double* x, double* y);
boolean GetIndicatorDisplay();
boolean SetIndicatorHeadingDisplay(long mode);
boolean SetIndicatorHeading(double bearing);
boolean DeleteSessionGraphicByKey(long key1, long key2);
double GetElementLength(long categoryId, long offset);
long GetAddElementRedrawMode();
boolean SetAddElementRedrawMode(long value);

App Object:
long GetAppHandle();
boolean GetSize(long* xSize, long* ySize);
boolean GetPosition(long* x, long* y);

View Object:
long GetViewHandle();

boolean SetAddElementRedrawMode(long value);
boolean IsIndicatorInView();
boolean GetSize(long* xSize, long* ySize);
boolean GetPosition(long mode, long* x, long* y);

Dialog Object:
boolean SetPosition(long x, long y);

long GetDialogHandle();
boolean GetPosition(long mode, long* x, long* y);

Friday, December 02, 2005

Sessions 101 and New versus Open in GTViewer and GTVx

GTViewer and GTVx both offer the same two dialogs for New and Open and there is sometimes confusion about what the difference between these two commands. The differences are minor, but there are some differences. This blog posting will try to clarify these two commands and explain how a Session relates to them.

GTViewer and GTVx are session based. When you are viewing your GIS data, you are always in a session. The session information is separate from the GIS data in that it contains only the user-specific information such as the current view extents, display filter settings, and redlines. The GIS data is generally represented by a .GTM file (unextracted GTViewer data), and the session it uses is a .GTS file. A single .GTM file can have any number of sessions created against it, and these sessions can all be open simultaneously by one or more users.

This separation between the GIS data and the session info is straightforward until you consider an Extract File (.GTX) which contains both the GIS data and the session information in a single file. The .GTX file was initially designed to be single-user since its primary purpose was to provide data for Pocket GTViewer (a single-user environment). However, user affinity for managing their data with a single, self-contained .GTX file on the desktop guided product development to support simultaneous users each with their own session from a single .GTX file. By extending the .GTS session file to support .GTX files as well as .GTM files, multi-user support is provided for both .GTM and .GTX files. For more info, see: Unextracted versus Extracted Data, Creating Extract Files

This convoluted introduction to sessions is the key to understanding the difference between New and Open.

  • You will always be in a session if you are viewing GIS data from a .GTM file or a .GTX file.
    If you are using a .GTX file in single-user mode, the session information is embedded in the .GTX file (along with the GIS data, but only the session information is modifiable by the user).
  • If you use File/Open to open a .GTX file, the embedded session is used.
  • If you use File/Open to open a .GTM file, a new session is created using the .GTM file as the source. When you exit the session, you will be asked if you want to save the session. The session will be saved as a .GTS file.
  • If you use File/New and specify a .GTX file, a new session is created. When you exit the session, you will be asked if you want to save the session as a .GTS file.
  • If you use File/New and specify a .GTM file, a new session is created. When you exit the session, you will be asked if you want to save it or not.
  • With a .GTM file, File/Open and File/New are identical.
  • Double-clicking a file in the File Exploring is identical to File/Open.
  • Select a file from the Most Recently Used (MRU) list under the File menu is identical to using File/Open.
  • The File/Open command does provide a fancier dialog for creating a session. A history of the last ten source files is listed along with their descriptions (from inside the .GTM or .GTX files). You can select a file in the history list to create a session from or you can browse for a source file. (The Browse button will also take the path typed into the prompt as a starting point to speed along browsing)

The difference between File/New and File/Open are really pretty trivial; however, know the differences between the two command can help you get even more use out of your data, especially if you are wanting to share a .GTX file amongst multiple users. I have noticed from observing users that the File/New command is sometimes never used. There is nothing wrong with this approach, but the File/Open’s history list is sometimes very useful if you deal with several different datasets.

Creating sessions from .GTW and .GTG files is also supported, but this will be another blog posting at a later date.

See Also: Sessions 102

Thursday, December 01, 2005

GTVx is Available

Version of GTVx is available.

----------------------- - 12/01/05

- FIX - If a font character contains a single polygon stroke, it could appear to dissappear at certain zoom levels (when the polygon points all end up at the same point). If this condition occures, the points of the characters polygon are spread so that they are not all in the same spot.

- NEW - New properties for SetDataProperty and new entries for Additional Properties section of GTM file:
  • GPSIndicatorColor
  • GPSHeadingColor
  • GPSRefHeadingColor
  • GPSIndicatorWeight
  • GPSIndicatorSize
- NEW - New Methods:
  • boolean SetIndicatorRefHeadingDisplay(long mode);
  • boolean SetIndicatorRefHeading(double bearing);