NTXShape converts files from the CARIS NTX format into the widely
supported ESRI shapefile format. NTX is one of the standard formats
used to distribute digital maps in Atlantic Canada, and is also the
former standard for electronic charts from the Canadian Hydrographic
Service. It is presumably used elsewhere as well. The shapefile format
was popularized by ArcView GIS. It is now supported by all ESRI software
and by a large number of third-party GIS applications and data providers.
NTXShape preserves virtually all of the information found in a typical NTX file. This includes all feature types except for images and block text. Attributes such as feature code, source ID, index key, and flags are transferred over to the shapefile, as well as the information needed to have text placed exactly as it would appear in CARIS.
Although the NTX format does not store polygon features, NTXShape is able to determine which lines would have been appeared as polygon boundaries in CARIS, and which points would have been used as polygon labels, and regenerate polygon topology from those features.
NTXShape was initially developed at ESRI Canada Limited in 1995 and 1996. Between 1997 and 2000 it was sold as a commercial product. In 2000 we began making it available for free, under a license that permits redistribution. In 2002 we took the next step and began to make the source code available under an open source license. The license we chose for the open source release is the Mozilla Public License, version 1.1. (For more information, see history. For more about our choice of license, see here.)
This could be very interesting both for the continued development of NTXShape, and also as a source of useful GIS routines. NTXShape consists of about 11,000 lines of code - not a huge application, but not a trivial one either - and aside from being the only open source NTX reader implementation, it includes a pretty fast implementation of the polygon build algorithm and numerous other GIS / geometric routines that were required make it work.
Users of NTXShape may wish to visit the discussion forums hosted on SourceForge. There is a forum where you can get Help with the tool, and an Open Discussion forum which you can use for any topic related to NTXShape.
Those who are interested in working with the source code should visit the project site hosted at SourceForge.net. Among other things, the latest source code is found there. Of course my hope is that, if you correct a bug, add a feature, or improve the documentation, you will contribute your enhancements to the project. If you do that, you will receive as many free copies of NTXShape as you want <grin>, and my thanks.
Upcoming Sub-ProjectsNTXShape now compiles and runs on Linux and Solaris in addition to Win32. However, most of the testing has been on Win32. It would be nice to get the Unix targets tested as thoroughly as the Win32 target. It would also be nice to get support for a wider variety of POSIX-ish operating systems, perhaps using autoconf. Also, to provide cross-platform scriptable access, it would be a nice touch to create SWIG / Python / GTK bindings in addition to the Visual Basic and ArcView bindings that are exported on Win32.
A graphical user interface for ArcGIS has been developed. This was done initially as a VBA macro, for a client demonstration, but it has since been converted to Visual Basic 6. This will serve not only as an ArcGIS GUI for NTXShape, but also as a developer sample for the VB-callable API. The ArcGIS graphical interface was initially published in the SourceForge package called "NTXShape UI" package. An enhanced version is been incorporated into the setup wizard and source archives for NTXShape 1.4a.
In 1.4a, we added support for true 3d-line output, with a Z value for each vertex. This new feature should be considered experimental; if you use it, I hope you will examine the results carefully and let me know (by way of a bug report on the SourceForge tracker) about any discrepancies. It works for me, though.
Another feature which is planned for a future release is some form of projection support. Probably this will amount to reading the coordinate reference information from the NTX header and converting that to OGC well known text format in order to write it to a .prj file to go with each shapefile. This would be a little easier to get right with access to the ArcGIS coordinate reference APIs, so it might initially be built into NTXShape UI, and only later integrated into the core. This functionality will require volunteer support; I don't need this feature personally, so I will only do it with the help of people who will actually be using it.
As an area for future improvement, we may build an "Annotate NTX" command for ArcGIS, like the one for ArcView 3. This command takes a shapefile generated by NTXShape, looks for the features that would display as text in CARIS, and generates positioned labels / annotation on the map. The ArcGIS / ArcView 8 version of this command could be written be written entirely in Visual Basic.
Until that enhancement is done, the easiest way to get the text into ArcMap is probably to use the NTXShape NAME option at the command line. This exports the NTX name (text) features as line shapes, where the text is in a TEXT attribute, and the line indicates how the text was positioned and oriented in the NTX file. In ArcMap you can load this shapefile, label the lines based on the TEXT attribute, and hide the line symbols. Because the ArcMap label engine is able to move text around within tolerances in order to avoid overstrikes, the text will not appear in exactly the same position as in CARIS - but it will be close. (With ArcGIS 8.3 there are some enhancements to annotation and labeling that will make it an even closer match - for example, you can control the label font size based on an attribute.)
Finally, an ambitious improvement would be to add direct-read support for NTX to ArcGIS. That's actually not so difficult - ArcGIS exposes all the necessary APIs - but it would require exposing more APIs to do things like return all of the feature-type-specific attributes, and the geometry as arrays of vertices or WKB geometry format. I don't intend to make NTXShape dependent on ArcObjects, or on COM in general, so these APIs would also be available for other purposes.