Bug fixes and feature additions

4.2.0.8 - Fixed a bug in all versions that was causing a GPF. Apparently, at the end of an EntityInfo cycle, something wasn't being set back properly. The execution path of the EntityInfo now more closely mirrors that of a normal regen cycle.

4.2.0.8 - Fixed up the JPEG handlers to more gracefully handle errors for tiled JPEGs. All TerraServer tiles now display properly. PocketTerra Desktop will now read tiles from TerraServer that display nicely on SylvanMaps as well.

4.2.0.7 - Added two new properties to allow the use of SYLVANDT.OCX directly in an ASP page, rather than using the VB intermediary app SylvanMaps.DLL. These are necessary since ASP doesn't allow you to handle events coming from an object. They are: 

[id(340), bindable, helpcontext(0), helpstring("The layers of the latest entityinfo or geoquery event.")] VARIANT EntityInfoLayers;
[id(341), bindable, helpcontext(0), helpstring("The EntityIDs of the latest entityinfo or geoquery event.")] VARIANT EntityInfoIDs;

They contain the same information as the event MapGeoQuery, namely variant arrays containing the entityIDs and Layers of all found entities.  In the case of the MapEntityInfo, these will contain arrays with a single entry. Example:

'ASP Code after a Circle query:
stuff = themapobject.EntityInfoLayers 
stuff1 = themapobject.EntityInfoIDs 
NumberofItems=UBound(themapobject.EntityInfoLayers)

4.2.0.7 - The new property MapUserHeight was returning incorrect values. Fixed.

4.2.0.6 - Added a new property to the main SYLVMA32.OCX called SymbolPolylineArrow. Set this to 1 to get an arrow head added to the end of each polyline using this symbol.

4.2.0.5 - Added a new method to the SYLVPROJ ChangeProjection Interface to handle change projections from scripts like ASP:

ProcessXYVariant(VARIANT *XCOORDVAR, VARIANT *YCOORDVAR)

This accepts any sort of input, integers, strings, double values. It always returns Double variants.

4.2.0.5 - In the ASP version, ADO recordsets were not being released at the end of a page. This resulted in orphan recordsets and memory leaks. This probably also occurs in the OCX version, but since the component usually sticks around for a while, it isn't so evident. Only fixed for ASP at this time.

4.2.0.5 - If an ADO point recordset was empty, a "phantom" point was being drawn at 0.0, 0.0. This has been fixed by testing for empty XCOORD and YCOORD and not drawing if this occurred.

4.2.0.5 - Fixed a bug in the Circle query - MeasureResult was not being multiplied by MeasureFactor on MouseUp. During the MouseMove, this worked correctly, but not at mouse up.

4.2.0.4 - Changed a couple of items in the DesignTime ASP generated code, namely, to save the syl file to a session variable at the proper time.

4.2.0.4 - Static cache was not being filled when empty.

4.2.0.4 - Fixed an error in exporting SHP files using in-memory recordsets. The recordset was being closed, and not released.

4.2.0.4 - Changed the GetRecordset method in the ASP SylvanMaps.DLL so that it doesn't return the LayerSelectedRecordset. Instead, it creates it's own recordset from the connection string etc. This is the way it used to work. Using the LayerSelectedRecordset seems to crash once in a while in IIS.

4.2.0.4 - Fixed a bug in the ImportExport control (SylvanImportExport.OCX) when converting coordinate systems. If Batch mode is checked, only the first record was converted. The problem was that the CursorLocation needs to be set to adUseClient when using Batch updates in ADO.

4.2.0.4 - Fixed a bug where point symbol metafile pen widths were not being scaled with the metafile size. For example, if a pen width were 100 (measured is in 10ths of a point), it should get thinner as the symbol is smaller. This really showed up when the metafile was displayed with very large OCX sizes. This may affect how your application looks, so please tell us if this is not being done correctly.

4.2.0.4 - The BlobToVertexArray would lock the array when too many vertices were specified for the buffer.

4.2.0.3 - The fix below (4th one down) was faulty. It was fixed. Only Sylvma32.OCX has this new build number, the rest are at 4.2.0.2.

4.2.0.2 - Fixed an error in SylvUtil. The ChangeCoverageProjection did not correctly change the projection of the CCL file. The YMax was incorrect.

4.2.0.2 - Deleted the BitmapBlob property from the OCX. Still in the ASP version. There seems to be a bug in MFC that causes a VARIANT property to crash when set, even though there is not set action. Since this is never used in the OCX version, it makes sense to delete it.

4.2.0.2 - Added two long overdue properties, MapWidthUser and MapHeightUser. These are read only, and not persisted. They indicate the width and height of the control in the current user units.

4.2.0.2 - A bug was discovered in ADO that causes strange effects when persisting recordsets. If the recordset is created by a clone and filtered using bookmarks (as in LayerSelectedRecordset), when this recordset is persisted to a file or a blob, it will persist an unknown number of records instead of just the filtered records. However, if the filter is put together using a string instead of bookmarks, then it works as expected. LayerSelectedRecordset has been changed internally to use a string instead of bookmarks.

4.2.0.2 - To support the simplified ImageMap, added a new method, ConvertPixelsToUserVariant. The same as  ConvertPixelsToUser, but modified so VBScript can use it from a web page (It turns out that VBScript cannot handle a ByVal Double, but can handle a ByVal Variant). This also uses VariantChangeType to convert any sort of possible numeric value into a Double Variant.

4.2.0.2 - Added a simplified ImageMap option to SylvanMaps.Net ASP. Dispenses with the VB ASP wrapper, and instantiates the SylvanDT.OCX directly. Eliminates the generation of image files on the disk. Two options, one with the state of the OCX saved in a session variable, and one that is sessionless. This scheme is simpler, more capable, and more reliable than previous versions.

4.2.0.2 - Updated the TIFF library to 3.5.7 of LibTiff.

4.2.0.2 - Added new functionality to the Polygon Utilities in SylvUtil.DLL. You can now pass an ADO recordset to PolygonLib in the PolygonRecordset Property, then combine all these polygons together using the DissolvePolygonRecordset() method. The resulting polygon is available in the usual OutputPolygon etc properties. Handy when trying to put a bunch of polygons together.

4.2.0.2 - Importing polygons creates red polygons when importing, instead of black when using the "Interpret Data" selection.

4.2.0.2 - Removed the creation of the unused "Hole" field when importing SHP and MIF files.

4.2.0.2 - Another minor ADO bug, if using a static ADO cache, the LayerSelectedRecordset would not work. Fixed.

4.2.0.2 - Added a new method, DestroyInternalObject. This destroys the object internally, releasing any recordsets, memory, handles etc. This turned out to be useful in ADO.NET since the .NET garbage collection tends to build up lots of open ADO recordsets.

4.2.0.2 - Fixed a bug where the LayerCacheEnable was being set to 1 when LayerRecordset was set to an ADO recordset. Also, fixed a problem where static ADO caches did not behave properly. Now, if you assign a recordset to a layer, and LayerCacheEnable is set to sylStaticCache (2), the cache will behave as a static cache, and never be erased or not used. Additionally, setting the LayerPersistCache to True will persist this cache to any of the various state saving routines like SaveOCXStateToBlob.

4.2.0.2 - Fixed CalculateMapExtent method to work properly when the control has not been used, as in first loading a form.

4.2.0.2 - Changed the name of the ASP DesignTime Library (IDL "library") in the TypeLib from SylvmapLib to SylvanMapsASP. This may cause an older version of SYLVANMAPS.DLL to not load properly. This was done to differentiate the typelibs in .NET. OCX-4 is still SylvmapLib.

4.2.0.2 - Added new method, SaveMapAsVectorBlob to support SVG in the ASP.NET version.

4.2.0.2 - Fixed SaveOcxStateToBlob and LoadOcxStateFromBlob so that they work properly with the new ASP.NET version.

4.2.0.2 - Removed all references to the Scripting.FilesystemObject in the ASP file generated from the ASP-4 DesignTime Control. Replaced using INSTRREV instead. We found that sometimes the FileSystemObject would not instantiate in IIS SP2. Perhaps this is a new security thing?

4.2.0.2 - A bug in SylvanMaps.Net ASP-4 Evaluation version caused this to malfunction within IIS. A dialog box saying "This is an evaluation copy etc" was being popped up within IIS. IIS doesn't like this and stops. This dialog is now suppressed. How come no one ever told us the eval didn't work? (Why didn't we test this before!!)

4.2.0.2 - Fixed Sylvma32.OCX so that it works properly within dialog boxes in VC++ during design time. This was broken with the new MapHimetricWidth/Height persistence. Apparently, VC++ does not call OnResize when the control is resized while designing a dialog.

4.2.0.1 - Updated the version to match the Typelib version. Also fixed problem with Typelib version not matching internal version. This made the control invisible to most containers like VB, VC++ etc.

4.2.0.1 - Fixed problem with SYLVJPEG2000.DLL not registering during install.

4.0.0.15 - MapHiMetricWidth and MapHiMetricHeight are now persisted to forms and SYL files. This should make it easier to make sure that a saved version works and acts the same across all OSs, display adapters etc. In order to make sure there are no problems with versions, the internal version that keeps track of persisted versioning has been bumped up to 4.0.2 instead of 4.0.1. 

4.0.0.15 - Behavior Change: A customer was having problems using multi-polygons (several polygons in a single polygon blob). This was simplified to use a SHP file scheme. If NUMPARTS is negative it uses this new scheme. Before, an extra vertex had to be inserted in each polygon group within a multi-polygon. This was difficult. This new scheme just requires the vertices of each polygon within the multi-polygon, with no extra vertex, just like in SHP files.

4.0.0.13 - Behavior change: A right click will now also trigger a MapEntityInfo search. If you need to differentiate 
between a right and left click, capture the MouseDown event and set a flag to use during the MapEntityInfo event.

4.0.0.13 - Sometimes when an empty polygon recordset is returned by a layer query, and certain on-the-fly 
coordinate transforms are done, a spurious polygon will be drawn, blanking out the screen. Fixed.

4.0.0.13 - Fixed irritating "flash" of screen everytime a mouseover fires.

4.0.0.13 - Fixed problem of single character string labels not displaying.

4.0.0.13 - Added JPEG2000 support to SylvRast. To use this, you must install the SylvJPEG2000.DLL (in builds after 4.0.0.14)

4.0.0.13 - Changed the behavior of HiMetricWidth and HiMetricHeight. These may now be set as well as read. This
allows the programmer to make the display look exactly the same across OSs.

4.0.0.13 - Added Unicode support for support of all languages. Involved changing the query building scheme to account for Unicode.

4.0.0.13 - Fixed the SHP importer to handle tables with dashes etc.

4.0.0.13 - Fixed the key to display font symbols, and show polylines with the proper width. Also show polygon borders with
the correct width.

4.0.0.13 - Fixed VertexArrayToBlobB and VertexArrayToBlob so that UseStringsInsteadOfArrays works properly with byref variants.

4.0.0.13 - //Creates an internal window so we don't need an OCX host.
void CSylvMapCtrl::CreateInternalWindow(short PixelWidth, short PixelHeight)

4.0.0.13 - Added a new scheme for the .NET platform. Added a new method that allows you to do a CreateObject, then
load a SYL file, then create the map, without the need for any sort of OCX host like VB. Note, to do a CreateObject, you
need the LIC file....

4.0.0.13 - Changed the behavior of LoadOCXState slightly - if the filename is "" then the state is cleared instead of popping 
up an error.

4.0.0.12 - In 4.0.0.10, a problem in Powerbuilder was fixed by removing a "release" within the RegisterWithROT routine. This
unfortunately had the side effect of not calling the destructor because a reference to the object was still live. This
release was put back in. Powerbuilder will need a special build.


4.0.0.12 Fixed an odd problem in Access97 concerning the StatusBar. An old MFC problem that resurfaced.


4.0.0.12 Added support for Font Symbols. This means you can use Font symbols just like the ESRI fonts etc. 
A new option called "Font Symbol" has been added to the drop down list on the symbol property page for point coverages.


4.0.0.12 Changed the Text Overlap checking so that it is global. This means that labels on all layers are compared and prevented
from overlapping. Note that labels on lower labels have a higher priority since they are drawn first.

4.0.0.12 Fixed a problem with the new GeoTIFF stuff- the Y tie point was at the bottom instead of at the top.

4.0.0.12 Selection sets were behaving oddly. If two layers had selection feedback turned on, and AddToSelectionSet was false
and the first layer was selected first, if an entity on the second layer was then selected, 
both would be shown on the screen as selected. This was fixed
by clearing all selection sets on all layers before doing an EntityInfo query, and AddToSelection set was false.

4.0.0.12 The fix in 4.0.0.10 for the dissapearing toolbar was incorrect. When panning, the toolbar and status bar
would appear, even if they were not enabled. This was corrected.

4.0.0.12 Fixed SYLVPROJ so that more than 9 parameters can be used in a custom projection.

4.0.0.12 Fixed GeoTIFF import to correctly handle In-Memory importation.

4.0.0.12 Added DXF Block importing to the DXF importer. Doesn't handle rotation however.

4.0.0.12 Fixed a problem with some map data causing faults when parts>1 but no parts data in ODBC.

4.0.0.11 Fixed a problem with exporting SHP files. Long file names (>8.3) would confuse it. No longer.

4.0.0.11 Fixed a bug in SylvRast that prevented the Multi-Resolution GeoTIFF from working properly. Also, the JPEG compressor
will return if it sees an HDIB with less than 24 bit color, instead of crashing.


4.0.0.11 Added a new feature to Tooltips, that of Multiline tooltips. As in multiline text, you can now have multiline
tooltips by adding a CR-LF between lines. For example:

Private Sub SylvMap1_MouseOverEntityInfo(ByVal Layer As Integer, ByVal EntityID As Long)

SylvMap1.ToolTipText1 = "This is a test" & vbCrLf & "of multi" & vbCrLf & "line tooltips"

End Sub
Note that the ToolTipText text box in the property page has been modified to accept multiline tooltips as well.

4.0.0.11 Modified a problem with tooltips. Apparently, VB has its own ToolTipText that overrides the SylvMap ToolTipText.
The name of the SylvanMaps ToolTipText has been changed to ToolTipText1. VB programs that previously used ToolTipText should
still work, since they were using the VB version already. Other containers may have to change their code to use 
ToolTipText1. We discovered this "feature" when debugging the multi-line tooltips.

4.0.0.11 Fixed a bug with BMP symbols causing GDI16 error in win98/me

4.0.0.11 Added dialog to control the new GeoTIFF import to ImportExport Property page.

Bug - ConvertTwipsToUser doesn't seem to work properly.

4.0.0.10 Fixed: Sometimes, when panning, the toolbar and status bar would dissapear. 

4.0.0.10 Added: Labels can be multi-line. Simply insert a CRLF between the lines. For example, LayerLabelSource = 
MYFIELD1 + chr(13) + chr(10)+ 'Amount is:' + chr(13) + chr(10)+ MYFIELD2 

4.0.0.10 Fixed: CenterX and CenterY of polygons was not being projected with on-the-fly projections. This showed up when trying
to display labels for polygons and using on the fly projections.

4.0.0.10 ADDED: New property, AddressFoundRecordset - a disconnected ADO recordset containing information about multiple address matches
so that pick lists can be easily formed.

4.0.0.10 The docs say that it is possible to change the names of all the address matching fields. This was never implemented.
Implemented.

4.0.0.10 Fixed an issue with ADO Address Matching not functioning due to SQL errors attempting to do a UCASE on all road names
road types, and pre/suffixes. Now it interrogates the database to see if the database is case sensitive, both in ODBC and ADO.
If the database is not case sensitive, then the query is much simpler.
This should also speed up the address queries.

4.0.0.10 If DrawNonStop was on, then a DrawMap during any event would not refresh the window after the event completed. To
reproduce this, try bringing up a form during a MapEntityInfo event, then calling drawmap after the form is hidden. Nothing
happens. This is now fixed.

4.0.0.10 Fixed a problem of the key crashing IE if a key control is embedded into a VB UserControl, then run in IE.

4.0.0.10 Fixed a problem of the MapClick Event not giving control to a pop-up window. For example, if you show a form 
during a MapClick event, it will show, but not be able to receive events.

4.0.0.9 Right click popup menu can be temporarily disabled for right click testing. Note, this only pops up during
designtime, and is intended when the control is used in a strange container such as Word or Excel.

4.0.0.9 Upgraded to SP5 of Visual Studio

4.0.0.9 UseIPLImaging is no longer the default since the Win2K rendering is better than it used to be.

4.0.0.9 The first entry in the Go Back list contains the MapCenterX, Y and scale of the control at design time. 
One way to get around this is to add the following two lines to the end of your map set up code:

mb = .SaveOCXStateToBlob
.LoadOCXStateFromBlob mb

This clears the GoBack stack.

4.0.0.9 Fixed: If a user starts to measure a distance (UIMode = sylUIModeMeasure), selects
the 'Pan' Function, and than moves the map content without first ending the
Measure Function with the Right Mouse click, the Measure Function can not be
used again until he unloads the OCX. 

4.0.0.9 Added much better support for importing GeoTIFF files. See technote for details.

4.0.0.9 Fixed problem with some locales using commas in numbers.

4.0.0.9 Fixed problem with Saving Enhanced Metafiles.

4.0.0.9 of SylvProj - converts NAD27 <-> NAD83 properly for UTMs and State Plane within continental USA using
NADCON conversion.

4.0.0.7 Bug in ADO fetching of Points. Points would dissappear if all the points in a layer went off the map, and then you
tried to pan them back in, only one point would show. This was a problem with the caching of the fields not
clearing the "bad field" bit internally within the OCX.


4.0.0.6 Fixed another possible crash with ADO2.6 Empty as well as NULL variants checked. Seems that SQL server returns vt_NULL,
but Access return vt_EMPTY if PARTS field not there.


4.0.0.6 When the BoundLowX is tested for data type, and when PARTS is tested for whether it exists or not, TOP 1 added to SELECT
statement to prevent ADO from trying to grab every single record. (Takes a long time). This may impact databases
that do not support TOP in the select statement.


4.0.0.6 Fixed a problem with caching, if a dynamic ADO cache is persisted, it wasn't being used. This was because the
query for determining the data type of the BR was run, even if during a cache hit. This is now bypassed if
a cache hit is seen.

4.0.0.6 Also, this query is now faster, as it only gets one row. (also other queries that are used to sense whether a field exists
are faster)

4.0.0.6 The ActiveX component now can bypass RDS and go directly through ASP. This makes it easy for WPPs to host the control, since
absolutely nothing besides ASP and ADO need be on the host. No DLLs, or RDS setup at all.


4.0.0.6 Fixed a problem with ASP Enterprise, CorrectUDLFiles was incorrectly placed in the imagemap ASP code.


4.0.0.6 Fixed another possible crash with ADO2.6 Empty as well as NULL variants checked. Seems that SQL server returns vt_NULL,
but Access return vt_EMPTY if PARTS field not there.


4.0.0.6 When the BoundLowX is tested for data type, and when PARTS is tested for whether it exists or not, TOP 1 added to SELECT
statement to prevent ADO from trying to grab every single record. (Takes a long time). This may impact databases
that do not support TOP in the select statement.



Pre-4.0 Fixes:

Added BeforeDrawMap Event. Also, tells you what kind of draw is happening, regular(0) or query(1).

Added new property called LayerShowInLegend.

Allow geoqueries to operate outside the current view. Done. All geoqueries, gon,pnt,line do this.
All are synchronous now.

Fixed a variety of problems with ADO layers.

1. Added the window filter for ADO dynamic layers back in. 
This made things a lot faster, but this caused some other problems to show
up.

2. Zooming out with a cache miss worked, but the window spatial filter was still in effect, 
therefore, the new stuff wouldn't show up.

3. The old problem of a user's recordset filter being erased by the window filter. A new layer property
was added "LayerUseADOSpatialFilter" was added. If this is set to TRUE, the window filter will
be used. If FALSE, it will not be used. The default will be TRUE for new projects, but
FALSE for old projects (to retain compatibility with 3.1).

Fixed problem with "flashing" after a query operation. A repaint after query was added in 3.0 so that the 
selection feedback stuff would work. This isn't desirable for many people. So, a check
for any selection stuff is made before the repaint. If no selection feedback symbols are
present, it won't repaint. If there are one or more, then it will.

The save to URL has been changed to use the new Internet Publishing OLEDB provider, which works better.

Added 3 band support to SylvRast to support Eosat

Fixed JPEG support in raster images, Compression is improved by 10X.

Added capability to test for available coverages and set up a default.

The UseEnhancedMetafile problem fixed.

Added PNG support to ASP version.

ADO Layers now bring up the ADO selection stuff instead of the ODBC ones. Allows easier use of other
providers. Note that ImportExport specifies ODBC, but ADO is always used.


Fixed Long Island State Plane NAD27. It was off by the false easting and northing 1000000 and 100000

Fixed DXF import to handle LWPOLYLINES. Fixed small problems in MIF, SHP and DXF import.

Fixed ADO LayerSelectedRecordset support to correctly handle different LockTypes (EG Batch)

Added MouseOver stuff. and Tooltips.

Added UseIPLImaging to turn IPL on and off.

Fixed Raster import for multiple imports into the same database. It was not making a unique TileID
properly, and adding multiple CCL records.

Added ?? type string matching.

Added 3 new numeric range matches. Key changed to display this.

AutoCreateSymbols has been improved to select better colors.

Icons and bitmaps now show up in the key, and are persisted properly from the prop page.

//New UIModes
sylUIModeDrawPoint = 12,// - Draw Point - V4.0
sylUIModeHideBars = 13,// - HideBars - V4.0
sylUIModeGoBack = 14// - Go Back - 4.0

Added the GoBack button

Fixed the ToolBarSettings dialog to be more user friendly.

Added a new event: ToolBarClick, triggered when clicking on a toolbar button. Possible to cancel it.

Check if Albers, Meters is in the list of projections.

FIxed persistence of ADO Recordsets. Problem: if the programmer used static, persisted caches in
an older version, then this static cache will not be used if ADO layer. The programmer must
refresh the cache into the new ADO persisted cache instead.

Added MouseOver

Added native SaveMapAsBitmapBlob support for JPEG and PNG

SaveMapAsBitmap PNG support added.

Fixed resource leak

Added bounding rectangle calculation

MultiThreading

Keep toolbar even if map loses focus - new property, KeepToolBarsVisible

Persist cache control

Fixed "Error 305" to report more information. Also, doesn't abort the entire redraw, continues
onto the next layer. Note: 62 layers open at one time problem.

CalculateMapExtent was not releasing ADO recordsets. Fixed.
Could not set LayerRecordset to Nothing - Fixed.

Added PersistPictures property to avoid leak in IIS temp files. (and make SYL files smaller).

Fixed bug in dT that caused IIS to fail when using Win2K server. Turned out that the ROT registration
was causing the problem.

Another problem in DT - Must be an ASP file, not an HTM!

Make sure the SYL file is in the same directory as the ASP

Seems that if one MDB is 97, and another is 2000 on separate layers, it doesn't work.

Fixed bug with MDAC26 - different handling of returning variants, caused crash when NumParts was
empty.

Fixed problem of requiring the LIC file when distributing an app using the ImportExport control.

Added ability to specify custom on-the-fly projections. Possible crash if using an old SylvProj.DLL. Make sure this is up-to-date
if needing this capability.

Added new SYLVUTIL.DLL containing utilities, such as Projection conversion of an existing coverage.

Added property page to ImportExport OCX to access the Projection conversion of an existing coverage.

Fixed the Toolbar dialog box in the General property page for more intuitive control of the Toolbar string.

Fixed the "Interpret Data" to properly bring in SHP files better for the Shape Tutorial.