Register  |  Login   Search
ThinkGeo - GPS Tracking and Mapping Solutions  |  Home  |  Cygnus Track  |  Blog
 
LivePerson Chat

Map Suite GIS Newsletter

Get monthly tech tips, sample code and ThinkGeo product news.

November 2006

Create the Ultimate Mapping Experience with Map Suite Web and AJAX

Map Suite Web, ThinkGeo's .NET-native GIS mapping control, has just gotten better! ThinkGeo has now implemented the power of AJAX into Map Suite Web to provide .NET developers with faster, more responsive mapping controls to better enhance their GIS Web applications. For example, with AJAX technology, Map Suite Web's mapping controls perform significantly better by allowing users to Track Zoom, Zoom In, Zoom Out, and Pan a map area without having to do post backs. This increases the performance of Map Suite Web's map controls in terms of both speed and efficiency.

Map Suite Web: Now AJAX Enabled

Moreover, AJAX is incredibly easy to implement into Map Suite Web as well as extremely flexible. ThinkGeo's implementation of AJAX into Map Suite Web involves having an AJAX event on the server side for the Map Control. This allows developers using Map Suite Web to experience all of the benefits of AJAX while keeping the majority of their coding on the server side of things.

Map Suite Web and AJAX combine in a powerful and unique way to offer C# and VB.NET developers an extremely fast map interface as well as an unparalleled amount of control over their Web mapping applications. Further, with Map Suite Web and AJAX, users will have the best possible mapping experience on the web. In order to see just how simple it is to implement AJAX into Map Suite Web, try our free evaluation version and online demo.

To learn more about how we've implemented AJAX into Map Suite Web, please try out our online demo. You can email our professional sales team at sales@thinkgeo.com, or call toll-free 1-866-847-7510 to speak directly to a sales representative.


Map Suite Geocode USA 2.0: Taking Geocoding to the Next Level!

Need a geocoder that is effortless to use, offers both geocoding and reverse geocoding functionalities, and is capable of transforming addresses into a multitude of valuable geographic data? Then Map Suite Geocode USA 2.0 is the solution for you!

Compiled against the .NET Framework 2.0, Map Suite Geocode USA is a powerful and feature-rich .NET geocoding component that is capable of more than simply finding latitude and longitude coordinates. With Map Suite Geocode USA 2.0, C# and VB.NET software developers will have access to a robust set of features that include geocoding, reverse geocoding, latitude, longitude, county, time zone, elevation, daylight savings, FIPS Codes, TIGER Line ID, and much, much more. Further, Geocode USA 2.0 features an easy-to-use object model that makes it a snap to integrate geocoding and reverse geocoding into your software applications.

Map Suite Geocode USABy entering a few lines of code, .NET developers will be able to convert U.S. addresses into a wealth of geographic data, which is far beyond the grasp of most geocoding applications. As for marketing and advertising efforts, just think of the knowledge and insight you will gain into your customer base with all the valuable geographic and demographic data that will be at your fingertips. Essentially, with Geocode USA 2.0, you will be able to plot your entire customer base on a map, which will positively affect the way you market, sell, and support your products and services.

With a highly optimized dataset encompassing the entire United States, geocoding and reverse geocoding functionality, the ability to associate addresses with a host of geographic data, updated TIGER 2005 SE data from the U.S. Census Bureau, Geocode USA 2.0 has all the features you will ever need. Map Suite Geocode USA 2.0—not your ordinary geocoder!

To find out just how fast and easy it is to geocode and reverse geocode addresses with Map Suite Geocode USA 2.0, please try out our free online demo.

For more information about Map Suite Geocode USA 2.0 and our online demo, please email our professional sales team at sales@thinkgeo.com, or call toll-free 1-866-847-7510 to speak directly to a sales representative.

Build Stunning World Maps in 3 Easy Steps with Render World 2.0!

Render World 2.0 is a complete collection of map rendering objects that will help you build great-looking world maps that can easily be integrated into any GIS application. Render World 2.0 automates the map building process to allow smooth, effortless map builds at many different levels of magnification, including everything from continents all the way down to the major road networks of any country in the world. In addition, Render World 2.0 is the perfect add-in component for ThinkGeo's Map Suite Desktop, Map Suite Web, and Map Suite Engine .NET components.

Built on the .NET Framework 2.0, Render World 2.0 was designed to save .NET developers the long months of development time and headaches commonly associated with building and integrating fully functional world maps into GIS projects. With Render World 2.0 in your toolbox, you will be able to save precious time and money. By simplifying the rendering process to just three easy steps, Render World 2.0 allows C# and VB .NET developers to integrate highly detailed, fully functional world maps into their GIS applications. With Render World 2.0, a stunning world map is just 3 simple steps away:

  1. Open a project with either a Map Suite Desktop or
    Map Suite Web map on it.
  2. Add the RenderWorld class to your project.
  3. Enter a few lines of code in the page load and BeforeLayersDraw event and click the play button.

Screenshot from Render World 2.0, showing Sydney, Australia

That's it! As you can see, Render World 2.0 is a fast and easy to use map rendering component. Render World 2.0 offers better rendering automation, more control, and more features than previous versions, and includes a RenderWorld class that handles map thresholds for nearly any zoom level. Further, the RenderWorld class also manages the rendering logic for the various map layers, such as countries, major roads, lakes, airports, and much more.

In addition to the robust RenderWorld class, which is in both the C# and VB.NET languages, the Render World 2.0 package includes a highly-optimized dataset covering the entire world and a powerful rendering logic that displays world maps at many different levels of magnification and detail. Finally, the product package includes helpful sample applications in both C# and VB.NET. So what are you waiting for? Try out Render World 2.0 today and see for yourself just how fast and easy it is to build the perfect world map!

Don't take our word for it. Try out our free online demo and see for yourself just how easy it is to build a stunning world map.

For more information about Render World 2.0 and our online demo, please email our professional sales team at sales@thinkgeo.com, or call toll-free 1-866-847-7510 to speak directly to a sales representative.


Not Sure Which Products are Right For You?

No problem! Let our team of experts help you get the package that's right for you and your organization. Tell us what you want to accomplish and we will work with you to get the product that best fits your needs.

Email:
sales@thinkgeo.com
Phone:
(866) 847-7510 (Toll Free)
(785) 727-4133 (Outside the U.S.)
Fax:
(877) 250-7122
Web site:
http://thinkgeo.com

Tech Tip


An Example of using the ILabeler interface for special labeling needs

Have you ever wondered how to draw labels for a polygon at an angle based on the width-to-height ratio of the polygon? For instance, you may want to display the label horizontally if the polygon is wider than it is tall, and vertically if the polygon is taller than it is wide. With the ILabeler interface, you can create your own class implementing that interface and write your own logic to have the labels display accordingly. The following code will show you how.

VB

Public Class CustomLabelerForPolygon : Implements MapSuite.ILabeler

 

        Public Overloads Sub DrawLabels(ByVal g As Graphics, ByVal TextSymbolArrays() As Array, ByVal SymbolArray() As Array, ByVal MultiPoints() As MapSuite.Geometry.MultiPointF, ByRef LabeledAreas() As SimplePolygonF, ByVal CanvasWidth As Integer, ByVal CanvasHeight As Integer) Implements MapSuite.ILabeler.DrawLabels

            '-- This routine left blank intentionally

        End Sub

 

        Public Overloads Sub DrawLabels(ByVal g As Graphics, ByVal TextSymbols() As Array, ByVal SymbolArray() As Array, ByVal Points() As System.Drawing.PointF, ByRef LabeledAreas() As SimplePolygonF, ByVal CanvasWidth As Integer, ByVal CanvasHeight As Integer) Implements MapSuite.ILabeler.DrawLabels

            '-- This routine left blank intentionally

        End Sub

 

        Public Overloads Sub DrawLabels(ByVal g As Graphics, ByVal TextSymbolArrays() As Array, ByVal SymbolArray() As Array, ByVal MultiLines() As MapSuite.Geometry.MultiLineF, ByRef LabeledAreas() As SimplePolygonF, ByVal CanvasWidth As Integer, ByVal CanvasHeight As Integer) Implements MapSuite.ILabeler.DrawLabels

            '-- This routine left blank intentionally

        End Sub

 

        Public Overloads Sub DrawLabels(ByVal g As Graphics, ByVal TextSymbolArrays() As Array, ByVal SymbolArray() As Array, ByVal Polygons() As MapSuite.Geometry.PolygonF, ByRef LabeledAreas() As SimplePolygonF, ByVal CanvasWidth As Integer, ByVal CanvasHeight As Integer) Implements MapSuite.ILabeler.DrawLabels

            '-- Drawing labels for polygons

            Dim Format As New StringFormat

            Format.Alignment = StringAlignment.Center

            'Iterate though each polygon

            For i As Integer = 0 To Polygons.Length - 1

                Dim TextSymbols() As TextSymbol = CType(TextSymbolArrays(i), TextSymbol())

                For j As Integer = 0 To Polygons(i).Parts.Length - 1

                    'If the part of the Polygon is higher than wide, then display the label at a 90 degree angle.

                    If Polygons(i).Parts(j).Extent.Size.Width >= Polygons(i).Parts(j).Extent.Size.Height Then

                        For k As Integer = 0 To TextSymbols.Length - 1

                            g.DrawString(TextSymbols(k).TextValue, TextSymbols(k).Font, TextSymbols(k).Brush, Polygons(i).Parts(j).Centroid.X + TextSymbols(k).XOffset, Polygons(i).Parts(j).Centroid.Y + TextSymbols(k).YOffset, Format)

                        Next

                    Else

                        Dim cx As Single = (Polygons(i).Parts(j).Extent.Left + Polygons(i).Parts(j).Extent.Right) / 2

                        Dim cy As Single = (Polygons(i).Parts(j).Extent.Top + Polygons(i).Parts(j).Extent.Bottom) / 2

                        g.TranslateTransform(cx, cy)

                        g.RotateTransform(-90)

                        For k As Integer = 0 To TextSymbols.Length - 1

                            g.DrawString(TextSymbols(k).TextValue, TextSymbols(k).Font, TextSymbols(k).Brush, TextSymbols(k).XOffset, TextSymbols(k).YOffset, Format)

                        Next

                        g.RotateTransform(90)

                        g.TranslateTransform(-cx, -cy)

                    End If

                Next j

            Next i

        End Sub

    End Class

 

 

 

Dim Layer As New Layer("..\MyPolygonLayer.shp")

Dim T As New Threshold(Double.MaxValue, 0)

'Sets the CustomLabelerForPolygon to LabelerPlugin property, so that ‘the DefaultLabeler will no longer be used.

Dim CustomLabelerForPolygon As New CustomLabelerForPolygon

T.LabelerPlugin = CustomLabelerForPolygon

Dim Texts As New TextSymbolCollection

Texts.Add(New TextSymbol(New Font("Arial", 12, FontStyle.Bold), New SolidBrush(Color.Black)))

Texts.Add(New TextSymbol(New Font("Arial", 12, FontStyle.Bold), New SolidBrush(Color.Gainsboro), -2, -2))

 

T.LabelRenderers.Add(New LabelRenderer("name", Texts))

T.SymbolRenderers.Add(New SymbolRenderer(New AreaSymbol(Pens.Black, Brushes.Red)))

Layer.Thresholds.Add(T)