ThinkGeo.com    |     Blog    |     Wiki    |     Support

Map Suite 6.0 Beta Features Now Available via the Daily Builds

Get a head-start on testing Map Suite 6.0!  The daily builds now contain several important new enhancements, including Out-Of-Browser support for Silverlight Edition, rendering speed and memory usage enhancements, XML serialization, support for the latest versions of the ECW and MrSid formats and more.  Try a daily build today and let us know what you think of the new features.                                                                                                                                                                 

Map Suite 6.0 Beta Features Now Available via the Daily Builds



As we recently revealed, there were some features that didn’t have a chance to be thoroughly tested enough to make it into last week’s Map Suite 5.5 release.  While those features have been rescheduled for the Map Suite 6.0 release due next spring, we’re excited to announce that you can begin testing them today by downloading a Map Suite daily build!



The following often-requested features and enhancements are available as of today, in any Daily Development Build of Map Suite from version 5.5.14.0 or higher.  To download a Daily Development Build, login to the ThinkGeo Customer Portal and then do one of the following:




  • To download an evaluation daily build, click the “Evaluation Daily Builds” link at the top of the screen, then select the product you want to download.

  • To download a full daily build for a product you have purchased, click the “My Product Downloads” link at the top of the screen, then click on the “Daily Development Builds” tab and select the product you want to download.




About The New Beta Features



Silverlight Out of Browser Support



We have extended the reach of our Silverlight client to utilize the Out-Of-Browser (OOB) feature.  This allows you to launch Silverlight applications either disconnected or connected without the browser as the container.  I would like to thank the community for the patience they have had with us over this feature, as I know it’s been something you’ve requested for some time!  The issue has always been securing our licensing model and as Silverlight is sandboxed it is hard to access information that is critical to our licensing system.  Luckily, with Silverlight 4.0 there were some new features introduced that helped us in that regard.



Important Points:




  1. To run application in out-of-browser mode, you have to right-click the project and show the “Project Properties” window, then select “Enable running application out of the browser”.  You must also click the button labeled “Out-of-Browser Settings…” and make sure the item “Require elevated trust when running outside the browser” is selected.

  2. To make sure the ServerLayerOverlay works properly in out-of-browser mode, the property “ConnectorHost” URL of the ServerLayerOverlay must be set.  This represents the URL of the page that is hosting the SilverlightMapConnector.




      Sample Code: Download from the ThinkGeo Wiki




      Serialization



      We have implemented XML serialization into the Map Suite framework.  This will allow you to serialize and deserialize Map Suite classes to and from XML, which gives you a great way to store layers, styles, etc. for long periods, even across Map Suite versions.  The serialization scheme is flexible and should work with user-created classes as long as they follow some simple guidelines.  As this is still in beta, we are still in the process of locking down the field names; however, this process should be complete in the next few weeks.



      Wiki Guide: Map Suite Serialization Guide




      Memory Usage Improvements



      For Shapefiles, we now chunk groups of records to draw, which has the effect of keeping the memory usage low and constant regardless of the size of the data you are rendering. In the past we would read all of the features we needed to render at a given extent into memory and pass them through to be drawn. This caused the memory to spike when you drew dense areas and in 32-bit environments it could also cause out-of-memory exceptions.




      MrSid & ECW Upgrade




    • MrSid Version: 8.0

    • ERDAS ECW Version: 4.2



    We have updated the MrSid and ECW decoder libraries to their latest versions. This will allow you to open the latest file versions for each of the libraries. You will also get lower memory utilization and added stability, which stems from bug fixes in these third-party libraries.  Additionally, we have fixed a memory leak; however, to take advantage of this you need to be using the latest daily build assemblies from version 5.5.14.0 or higher. In the next week or two we will incorporate these new dependencies into the Map Suite merge modules so they can be easily distributed.  Please consult the ReadMe.txt in the dependencies zipfile below to see how to update the dependencies.  We have also included the updated merge module in case you need to integrate it into your installer.  See the links below.



    Updated Dependencies: MapSuiteMrSidEcwUpdate2011-11-21.zip

    Updated Merge Module: MapSuiteMrSidEcwMergeModuleUpdate2011-11-21.zip




    Drawing Speed Improvements



    We have added a new Direct2D (D2D) option in addition to GDI+ in the Map Suite WPF, Winforms, server-side Silverlight and Web Editions.  The new drawing system, along with other enhancements, can improve drawing times by fifty percent or more, depending on the scenario.



    Because the new functionality requires the .NET Framework version 4.0, we have created an extension.  Our general policy is to stay one version behind the current framework so we could not upgrade our products to 4.0.  With the extension you can trial the new functionality that should roll out in the 6.0 version of Map Suite.  You can download the extension below along with detailed instructions on how to use it and some code samples using our various products.



    Download the Extension: MapSuiteWicBitmapExtension2011-11-24.zip



    As always, if you have any questions or feedback please feel free to post to the forums and let us know.



    Thanks for choosing Map Suite,

    The ThinkGeo Team



New Beta Features Available in Map Suite 5.5.33.0 and Higher



Today we're marking the release of the 5.5.33.0 daily builds of Map Suite with some very significant new or improved beta features.  See below for the details.




Drawing Speed Optimization


Available in Daily Development Build version 5.5.33.0 and above



"Drawing went from 30 seconds to 3.8 seconds!"



We are happy to announce that we have added a new speed optimization to the ShapeFileFeatureLayer.  The optimization dramatically decreases the drawing time required when drawing large Shapefiles to small portions of the screen.  As an example, a three million-plus-feature Shapefile drawn to an 800x800 screen previously took thirty seconds to draw.  With the new optimization the time has been cut to less than four seconds.



Though typically when designing the styles and appropriate scales for your data you would never need to draw a file this dense to the screen, there are some special scenarios where it is necessary.  An example of such would be designing a general purpose viewing application, or when you want to allow the user to load their own data files without restriction.  This optimization was designed for all manner of Shapefiles.






Map Suite Code Generator


Available in Daily Development Build version 5.5.33.0 and above



The Map Suite Code Generator allows you to generate C# source code (or other possible formats) from objects you have created in your projects.  This is very helpful in scenarios where you have a UI that allows users to add and modify layers, styles etc. and then want to export them into code to use in another project.  A feature similar to this will be available in ThinkGeo's upcoming Map Suite GIS Editor product.  This can also be used in conjunction with the new serialization tools by allowing you to create objects, serialize them and later generate code back from the XML.



Example usage of the Code Generator:



GeoCodeGenerator codeGenerator = new GeoCodeGenerator();
string sourceCode = codeGenerator.GenerateCode(layer);


Example output:



ShapeFileFeatureLayer shapeFileFeatureLayer = new ShapeFileFeatureLayer();
shapeFileFeatureLayer.ShapePathFileName = @"Data\Countries02.shp";
shapeFileFeatureLayer.IndexPathFileName = @"Data\Countries02.idx";
GeoColor geoColor = new GeoColor(255, 233, 232, 214);
shapeFileFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.FillSolidBrush.Color = geoColor;
GeoColor geoColor1 = new GeoColor(255, 118, 138, 69);
shapeFileFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color = geoColor1;
shapeFileFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;


Sample Code: Download from the ThinkGeo Wiki




Updates to XML Serialization


Available in Daily Development Build version 5.5.33.0 and above



Based on user feedback, we have enhanced our serialization framework to make it easier and more intuitive.  The redesign leads the user more naturally to the right classes to uses.  In addition we have made enhancements to dramatically cut down the size of the XML generated by no serializing objects and values that are the defaults for the object.  You still have the option, as a parameter, to serialize these defaults as it makes it easier to modify the XML in some scenarios.



Compatibility Note: We are still in the process of locking down the compatibility of the XML.  This is an ongoing process and it requires us to maintain compatibility of the serializable private members.  We are in the process of implementing the daily running utilities to ensure we do not break this compatibility.  By using serialization at this point, you are accepting that new builds may break the compatibility of the XML you generate.  We will try to prevent this from happening; however, until the XML structure is locked down, we cannot guarantee it.



Check the links below for updated documentation and sample code on the use of the serialization system here:




Updated Guide: Map Suite Serialization Guide

Updated Code Sample: Download from the ThinkGeo Wiki




You can download the Daily Development Build version 5.5.33.0 right now, so feel free to test out the new and updated features today.  To download a Daily Development Build, login to the ThinkGeo Customer Portal and then do one of the following:




  • To download an evaluation daily build, click the "Evaluation Daily Builds" link at the top of the screen, then select the product you want to download.

  • To download a full daily build for a product you have purchased, click the "My Product Downloads" link at the top of the screen, then click on the "Daily Development Builds" tab and select the product you want to download.



Thanks for choosing Map Suite,

The ThinkGeo Team



New Beta Feature Available in Map Suite 5.5.33.0 and Higher



New Events for Layer Exception Handling



We have added two new events to the Layer class to help users handle exceptions that are thrown by Layers.  Previously you had the option to draw the exception on the map tile or have it raise up; this was through the Layer.DrawingExceptionMode.  The problem was that if you chose to draw the exception you had little control over how it was drawn.  We had a default implementation and provided the DrawExceptionCore protected virtual method that you could overload, but the issue was that this forced you to inherit and create a new class.  That made it hard to implement a unified error handling system across all the various kinds of layers in your system without having to do a bunch of inheritance work.



Our new solution raises events before and after the DrawExceptionCore method, which allows you to hook to these events and draw or process the error however you want.  You could do things such as log the error, draw different images based on the error type, etc.  In the event arguments, we pass in the exception that occurred and the canvas for that tile.  We also allow you to cancel the call into the DrawExceptionCore method so you can bypass our default implementation without using inheritance.



New Events:



Layer.DrawingException(Canvas, Exception, Cancel)
Layer.DrawnException(Canvas, Exception)


Quick Example:



// Hook up the event to all of the layers in the overlay.
foreach (Layer layer in layerOverlay.Layers)
{
layer.DrawingException += new EventHandler<DrawingExceptionLayerEventArgs>(layer_DrawingException);
}

// Draw an image to the tile.  You can also do anything with the canvas,
// such as draw the exception name, etc.
void layer_DrawingException(object sender, DrawingExceptionLayerEventArgs e)
{
e.Canvas.Clear(new GeoSolidBrush(GeoColor.FromArgb(128, 255, 192, 203)));
Bitmap tempImage = new Bitmap(@"C:\Somewhere\ErrorImage.png");
MemoryStream stream = new MemoryStream();
tempImage.Save(stream, ImageFormat.Png);
stream.Seek(0, SeekOrigin.Begin);
tempImage.Dispose();
e.Canvas.DrawScreenImageWithoutScaling(new GeoImage(stream), e.Canvas.Width / 2, e.Canvas.Height / 2, DrawingLevel.LabelLevel, 0, 0, 0);
e.Cancel = true;
}


You can download the Daily Development Build version 5.5.33.0 as of today, so feel free to test out the new layer transparency features and post your comments on how they work.  To download a Daily Development Build, login to the ThinkGeo Customer Portal and then do one of the following:




  • To download an evaluation daily build, click the "Evaluation Daily Builds" link at the top of the screen, then select the product you want to download.

  • To download a full daily build for a product you have purchased, click the "My Product Downloads" link at the top of the screen, then click on the "Daily Development Builds" tab and select the product you want to download.



Thanks for choosing Map Suite,

The ThinkGeo Team



New Beta Feature Available in Map Suite 5.5.36.0 and Higher



Support for ThinkGeo's TinyGeo (.tgeo) File Format



Map Suite 5.5.36.0, just released to the Developer Daily Builds, is the first version to support ThinkGeo's new TinyGeo format.  This vector data format has been designed in response to requests from our customers, who have asked us to provide a new and efficient spatial file format for GIS data.  The goals of the format were to supply a highly compressed, read-only, secure and easily distributable data file that our customers can use to disseminate spatial data to their own clients, and with TinyGeo we have done just that.



In many scenarios, TinyGeo (.tgeo) files offer numerous advantages over standard Shapefiles or other common vector storage formats.  It supports secure encryption of both vector and tabular data, is distributed as a single file (with no need for separate indexes, .dbf files and so forth), and is decompressed by Map Suite on the fly so that the entire datastore does not need to be extracted before use.  For all the details about how TinyGeo works, as well as a list of advantages and caveats, please see our release announcement about the TinyGeo format in the News and Announcements forum.



To start working with the TinyGeo format today, begin by downloading the TinyGeo code sample and Shapefile converter from the ThinkGeo Wiki.  This will allow you to easily convert your existing Shapefile data, and will show you the code you'll need to use your new TinyGeo data in Map Suite.



Additionally, you will need to update your Map Suite product to the latest Development Daily Build, version 5.5.36.0 or higher, in order to work with TinyGeo data in your Map Suite applications.  To download a Daily Development Build, login to the ThinkGeo Customer Portal and then do one of the following:




  • To download an evaluation daily build, click the "Evaluation Daily Builds" link at the top of the screen, then select the product you want to download.

  • To download a full daily build for a product you have purchased, click the "My Product Downloads" link at the top of the screen, then click on the "Daily Development Builds" tab and select the product you want to download.



As always, please feel free to post your comments or questions about TinyGeo here in the discussion forums.  Your feedback can help us make TinyGeo even better.



Thanks for choosing Map Suite,

The ThinkGeo Team



New Beta Feature Available in Map Suite 5.5.62.0 and Higher



New Web Request Events and Methods



We have had many requests over the last year for the ability to customize various HTTP-based layers and overlays.  In many cases, users want to do things such as redirect the request, modify the query string, modify the request header, etc.  As the requests would typically target a product, we enhanced that layer or overlay to handle the new requirements.  After many of these requests we feel it is time to unify the work we have been doing and apply the enhancements across all of our HTTP-based layers and overlays.



To that end, we have added new events and some new protected virtual core methods to give you access to the web request as it happens on all of our applicable layers and overlays.  The two new events allow you to catch before and after the web request happens, enabling you to modify the request in ways such as using a custom URI, using a local server, etc.  We have also added a new SendWebRequestCore method that allows you to override the web request call, giving you ultimate control in inherited classes.



As we mentioned previously, we had been adding these events in a one-off fashion for the last year.  To clean up the API we are going to deprecate the old APIs.  Now, when using the old methods, you will get an obsolete message that points you to the new methods.  We will continue to support the old events until November of 2012, two official public releases away.



One important thing to note is that Map Suite Silverlight Edition functions a little differently than the rest of the products.  In this case we use a control which does not expose the WebRequest object, meaning that the events and methods below will not work.  If you find yourself wanting these features in Silverlight Edition and have a solid use case, please contact us and we would be happy to add support for it.




Enhanced Classes




MapSuiteCore


WfsFeatureSource

WfsFeatureLayer

TiledWmsRasterSource

TiledWmsLayer

WmsRasterSource

WmsRasterLayer

WorldMapKitWmsRasterSource

WorldMapKitLayer

BingMapsLayer

BingMapsTile

GoogleMapsLayer

OpenStreetMapLayer

YahooMapsLayer





WpfDesktopEdition


BingMapsOverlay

BingMapsTileOverlay

GoogleMapsOverlay

OpenStreetMapOverlay

TiledWmsOverlay

WmsOverlay

WorldMapKitWmsWpfOverlay

BingMapsTile

UriTile





DesktopEdition


GoogleMapsOverlay

OpenStreetMapOverlay

BingMapsOverlay

TiledWmsOverlay

WorldMapKitWmsDesktopOverlay








Concrete and Core Methods


For the concrete method SendWebRequest, we need to return a WebResponse so that the method should like:



protected void SendWebRequest(WebRequest webRequest)
{
SendingWebRequestEventArgs sendingWebRequestEventArgs = new SendingWebRequestEventArgs(webRequest);
OnSendingWebRequest(sendingWebRequestEventArgs);

WebResponse webResponse = SendWebRequestCore(sendingWebRequestEventArgs.WebRequest);

SentWebRequestEventArgs sentWebRequestEventArgs = new SentWebRequestEventArgs(webResponse);
OnSentWebRequest(sentWebRequestEventArgs);
}

protected virtual WebResponse SendWebRequestCore(WebRequest webRequest){return ...}



Events



public event EventHandler<SendingWebRequestEventArgs> SendingWebRequest;
public event EventHandler<SentWebRequestEventArgs> SentWebRequest;



EventArgs



public class SendingWebRequestEventArgs : EventArgs
{
public SendingWebRequestEventArgs()
public SendingWebRequestEventArgs(WebRequest webRequest)
public WebRequest WebRequest { get; set; }
}

public class SentWebRequestEventArgs : EventArgs
{
public SentWebRequestEventArgs();
public SentWebRequestEventArgs(WebResponse response);
public WebResponse Response { get; set; }
}



To start working with the new web request methods and events today, update your Map Suite product to the latest Development Daily Build, version 5.5.62.0 or higher.  To download a Daily Development Build, login to the ThinkGeo Customer Portal and then do one of the following:




  • To download an evaluation daily build, click the "Evaluation Daily Builds" link at the top of the screen, then select the product you want to download.

  • To download a full daily build for a product you have purchased, click the "My Product Downloads" link at the top of the screen, then click on the "Daily Development Builds" tab and select the product you want to download.



Thanks for choosing Map Suite,

The ThinkGeo Team



New Beta Feature Available in Map Suite 5.5.63.0 and Higher



LegendPrinterLayer Now Using Vector Graphics



As many of you have experienced, the previous LegendPrinterLayer, when printed, did not appear as crisp as other graphics on the printed page.  This was due to the LegendPrinterLayer being drawn as a raster image instead of using the vector drawing system.  We originally released it this way to save time and to get the legend out in the printing system.



Now, beginning with Map Suite 5.5.63.0, we use vector graphics to draw the legend so that it is crisp and also scales well to all paper sizes.  There is no need to change anything in your code; the effect should take place automatically.  If you have any questions or comments please feel free to let us know.



To get the latest daily build of Map Suite that includes vector-based legend printing, login to the ThinkGeo Customer Portal and then do one of the following:




  • To download an evaluation daily build, click the "Evaluation Daily Builds" link at the top of the screen, then select the product you want to download.

  • To download a full daily build for a product you have purchased, click the "My Product Downloads" link at the top of the screen, then click on the "Daily Development Builds" tab and select the product you want to download.



Thanks for choosing Map Suite,

The ThinkGeo Team



New Beta Feature Available in Map Suite 5.5.69.0 and Higher



Label Formatting Enhancements



We have added a powerful new way to format the value on your TextStyle.  In the past you had to set the TextStyle's TextFormat, NumericFormat, or DateFormat property to apply a format which used the built-in .NET Format API.  The problem was that it was tough to do advanced formatting such as using your own text manipulating functions to change the values.  What we have introduced are two new events (see below) that allow you to get the labels before and after they have been formatted the traditional ways and programmatically change them.  This puts you right before the label placement algorithm, so any changes you make to a label's length will be honored by the labeling placement system.  If you prefer to enhance formatting using inheritance, we have also added the FormatCore protected virtual method that you can override in your new class.




Code Sample



In the sample below, we set up a layer to label as per usual, and then we hook to one of the new events.  In the hooked method we change the road label text from the real value to "Hello Streets".  As you can see in the event, we have the original label and the shape that goes with it, enabling us to write any sort of custom logic in the event to change the label itself.  This is great for taking column data that might be simply "Y" or "N" and format it as "Yes" or "No".  With the shape passed in, you can also label the data by area, location, etc.



C# Code:



//Setup the label layer
ShapeFileFeatureLayer austinStreetsLabelLayer = new ShapeFileFeatureLayer(@"..\..\SampleData\Data\austinstreets.shp");
austinStreetsLabelLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.LocalRoad1("FENAME");
austinStreetsLabelLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

//Hookup the new event
austinStreetsLabelLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.Formatting += new EventHandler<FormattingPositionStyleEventArgs>(DefaultTextStyle_Formatting);

//In the event, change the text.  You also have the e.Shape as well in the event arguments
void DefaultTextStyle_Formatting(object sender, FormattingPositionStyleEventArgs e)
{
     e.Text = "Hello Streets";
}


End Result:








Before

 



After





New Events on TextStyle



public event EventHandler<form>attingPositionStyleEventArgs> Formatting;

public event EventHandler<form>attedPositionStyleEventArgs> Formatted;


New Event Arguments



namespace ThinkGeo.MapSuite.Core
{
  [Serializable]
  public class FormattedPositionStyleEventArgs : EventArgs
    {
        public FormattedPositionStyleEventArgs()
        public FormattedPositionStyleEventArgs(string text, BaseShape shape)

        public string Text
        {
            get {}
            set {}
        }
 
        public BaseShape Shape
        {
            get {}
            set {}
        }
    }
}

namespace ThinkGeo.MapSuite.Core
{
    [Serializable]
    public class FormattingPositionStyleEventArgs : EventArgs
    { 
        public FormattingPositionStyleEventArgs()      
        public FormattingPositionStyleEventArgs(string text, BaseShape shape)
      
        public string Text
        {
            get {}
            set {}
        }
 
        public BaseShape Shape
        {
            get {}
            set {}
        } 
    }
}



New Inheritable Methods



protected string Format(string text, BaseShape shape)
protected virtual string FormatCore(string text, BaseShape labeledShape)



To take advantage of the new label formatting events today, update your Map Suite product to the latest Development Daily Build, version 5.5.69.0 or higher.  To download a Daily Development Build, login to the ThinkGeo Customer Portal and then do one of the following:




  • To download an evaluation daily build, click the "Evaluation Daily Builds" link at the top of the screen, then select the product you want to download.

  • To download a full daily build for a product you have purchased, click the "My Product Downloads" link at the top of the screen, then click on the "Daily Development Builds" tab and select the product you want to download.



Thanks for choosing Map Suite,

The ThinkGeo Team