User Tools

Site Tools


map_suite_mobile_for_ios_quick_start_guide

Map Suite Quick Start Guide For iOS

The Map Suite iOS Quickstart Guide will guide you through the process of creating a sample application and will help you become familiar with Map Suite. The Quickstart Guide supports Map Suite Mobile for iOS 10.0.0 and higher and will show you how to create an iOS application.


If you want to build an Android application, please see the Android Quickstart Guide instead.

Welcome to Map Suite™ from ThinkGeo, a full-featured mapping control that makes it easy for any Microsoft .NET developer to add mapping functionality to a Microsoft .NET application quickly and efficiently. Using the intuitive object model, even developers inexperienced with Geographic Information Systems (GIS) can have fully functional maps working in minutes.

This guide will help you quickly get started building your own spatially aware applications. Like any new software, there will be some learning along the way.

How do we begin taking advantage of the power of Map Suite? The best way to learn is to make a sample application with it.

Download the Sample

Setting up the Environment

Before start, please follow our Map Suite Mobile for iOS Installation Guide for Xamarin iOS development environment.

Let's start by creating a new iOS Universal project in Microsoft Visual Studio (2015 or newer) named QuickstartSample(see Figure 1). We can create the project with .NET Framework 4.5 or higher.


Figure 1. Creating a new project in the Visual Studio IDE.

The project QuickstartSample is created in a new solution called QuickstartSample. The wizard creates a single iOS Application.

Now let's open NuGet dialog and install the three Nuget packages.


Figure 2. Open NuGet Manager UI in the Visual Studio IDE.


Figure 3. Install iOS package.


Next we need to prepare our map data. Create an AppData folder and put the map data into it. Make sure the resources’ build action is Content (see Figure 6).


Figure 6. Add resources and set build action to Content.

Build Host Settings

In Windows for Visual Studio 2015 or newer, Go to Tools > Options in Visual Studio and open the Xamarin > iOS Settings panel to access the iOS Mac Build Host settings:


Figure 7. Accessing the iOS Mac Build Host settings.

You can change the Mac Build Host by clicking the Find Mac Build Host button. The following screen is displayed to update the Mac Build Host:


Figure 8. Updating the Mac Build Host.

Note: The version of Xamarin.iOS being used with Visual Studio must be the same as on the Mac. The simplest method to keep them in sync is to have both machines running on the same branch (e.g. both on the Stable release branch).

Our App can run on the Simulator we selected:

Add Map View to Controller

The next step is to create Map view in ViewController ViewDidLoad override method, and define it as “mapView”.

Every Content View Hierarchy has a corresponding View Controller to power user interaction. The role of the View Controller is to manage the Views in the Content View Hierarchy. The View Controller is not part of the Content View Hierarchy, and it's not an element in the interface. Rather, it provides the code that powers the user's interactions with the objects on the screen.

public override void ViewDidLoad()
{
     base.ViewDidLoad();
 
     MapView mapView = new MapView(View.Frame);
     View.AddSubview(mapView);
}

Map Suite Android "Quickstart Sample"

The first step in creating our “Quickstart Sample” application is to set references to the ThinkGeo.MapSuite.iOS , ThinkGeo.MapSuite and ThinkGeo.MapSuite.Shapes workspaces at the very top of our code, since we'll use many classes within them. Add the references like this:

using ThinkGeo.MapSuite;
using ThinkGeo.MapSuite.Drawing;
using ThinkGeo.MapSuite.iOS;
using ThinkGeo.MapSuite.Shapes;
using ThinkGeo.MapSuite.Styles;

Display World Map

Now, Let's add a base overlay to display the world map which is called “WorldStreetAndImageryOverlay”.

        public override void ViewDidLoad()
        {
            base.ViewDidLoad();
 
            MapView mapView = new MapView(View.Frame);
            View.Add(mapView);
 
            // Set the Map Unit to DecimalDegrees, the Shapefile’s unit of measure. 
            mapView.MapUnit = GeographyUnit.DecimalDegree;
 
            // Create a WorldStreetAndImageryOverlay.
            WorldStreetAndImageryOverlay worldStreetAndImageryOverlay = new WorldStreetAndImageryOverlay();
 
            // Add a WorldStreetAndImageryOverlay .
            mapView.Overlays.Add("WorldStreetAndImageryOverlay", worldStreetAndImageryOverlay);
 
            // Set a proper extent for the map. The extent is the geographical area you want it to display.
            mapView.CurrentExtent = new RectangleShape(-134, 70, -56, 7);
            mapView.Refresh();
        }

Now the project is ready, Map Suite Runtime license is required for running and debugging your product. Please open the Product Center, then generate your license. For more details, please refer to (http://wiki.thinkgeo.com/wiki/map_suite_runtime_license_guide_for_mobile).

If we compile and run what we have now, our map should look like the one below. (see Figure 9).


Figure 9. A sample map of Europe.

Map Suite iOS "Quickstart Sample"

In creating our “Quickstart Sample” application, our first step is to set references to the ThinkGeo.MapSuite, ThinkGeo.MapSuite.Shapes and ThinkGeo.MapSuite.iOS workspaces at the very top of our code, since we'll use many classes within them. Set the reference like this:

using ThinkGeo.MapSuite;
using ThinkGeo.MapSuite.Drawing;
using ThinkGeo.MapSuite.iOS;
using ThinkGeo.MapSuite.Layers;
using ThinkGeo.MapSuite.Shapes;
using ThinkGeo.MapSuite.Styles;

Now let's look at a code sample to bring this concept to fruition. We'll look at ShapeFiles relating to the entire world. In our example, we have one such ShapeFile:

*world wide country borders (cntry02.shp)

(NOTE: The data used here can be found in the attached sample above in the “\AppData” folder. The data files' build action should be “Content”.)

Our next step is to define and add our layers. All of the following code can be placed in the “ViewDidLoad”​ event of the form. Here is the code to use for our example.

public override void ViewDidLoad()
{
    base.ViewDidLoad();
 
    MapView mapView = new MapView(View.Frame);
    View.Add(mapView);
 
    // Set the Map Unit to DecimalDegrees, the ShapeFile’s unit of measure.
    mapView.MapUnit = GeographyUnit.DecimalDegree;
    WorldStreetAndImageryOverlay worldStreetsAndImageryOverlay = new WorldStreetAndImageryOverlay();
 
    // Add a WorldStreetsAndImageryOverlay.
    mapView.Overlays.Add("WorldStreetsAndImageryOverlay", worldStreetsAndImageryOverlay);
 
    // Create a new Layer and pass the path to a ShapeFile into its constructor. 
    ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer("AppData/cntry02.shp");
 
    // Set the worldLayer with a preset Style, as AreaStyles.Country1 has YellowGreen background and black border, our worldLayer will have the same render style.  
    AreaStyle areaStyle = new AreaStyle();
    areaStyle.FillSolidBrush = new GeoSolidBrush(GeoColor.FromArgb(255, 233, 232, 214));
    areaStyle.OutlinePen = new GeoPen(GeoColor.FromArgb(255, 118, 138, 69), 1);
    areaStyle.OutlinePen.DashStyle = LineDashStyle.Solid;
    worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = areaStyle;
 
    // This setting will apply from ZoomLevel01 to ZoomLevel20, which means the map will be rendered in the same style, no matter how far we zoom in or out. 
    worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
 
    LayerOverlay layerOverlay = new LayerOverlay();
 
    // Add the ShapeFile layer to the layer overlay
    layerOverlay.Layers.Add(worldLayer);
 
    // Add the layerOverlay to map.
    mapView.Overlays.Add(layerOverlay);
 
    // Set a proper extent for the map. The extent is the geographical area you want it to display.
    mapView.CurrentExtent = new RectangleShape(-134, 70, -56, 7);
 
    // We now need to call the Refresh() method of the Map view so that the Map can redraw based on the data that has been provided.
    mapView.Refresh();
} 

If you compile and run what you have now, your map should look like the one below. (see Figure 10).


Figure 10. A Sample map of Europe.

So what has occurred here? We've created a layer and added it to the map and the map has rendered it according to its default style parameters. Also, We have used ZoomLevel to display the map the way that we want.

NOTE: It is important that the “MapUnit” property of a map object be set using the “GeographyUnit” enumeration. This is because the coordinates stored in a ShapeFile can be in DecimalDegrees (a format of latitude and longitude), feet, meters, or another unit system. Our map has no way to know what the ShapeFile's unit of measurement is until we set it. This information is normally found somewhere in the ShapeFile's documentation (also referred to as its metadata), or within its supplemental data file, as discussed in the section on ShapeFiles. It may also come as a separate .txt, .xml, or .html file that begins with the same file name as the main ShapeFile.

With the code above, you can both display a map and navigate it. You can pan by touch on the device and move finger around; zoom in/out by pinch on the screen with two fingers; double tap to zoom in to the next zoom level. Very powerful for just couple lines of code, isn’t it?

That was an easy start! Now, let's add another Shapefile to the sample so that we will have a total of two layers:

  1. World country borders (“cntry02.shp”)
  2. World capitals (“capital.shp”)
public override void ViewDidLoad()
{
    base.ViewDidLoad();
 
    MapView mapView = new MapView(View.Frame);
    View.Add(mapView);
 
    // Set the Map Unit to DecimalDegrees, the ShapeFile’s unit of measure.
    mapView.MapUnit = GeographyUnit.DecimalDegree;
    WorldStreetAndImageryOverlay worldStreetsAndImageryOverlay = new WorldStreetAndImageryOverlay();
 
    // Add a WorldStreetsAndImageryOverlay.
    mapView.Overlays.Add("WorldStreetsAndImageryOverlay", worldStreetsAndImageryOverlay);
 
    // Create a new Layer and pass the path to a ShapeFile into its constructor. 
    ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer("AppData/cntry02.shp");
 
    // Set the worldLayer with a preset Style, as AreaStyles.Country1 has YellowGreen background and black border, our worldLayer will have the same render style.  
    AreaStyle areaStyle = new AreaStyle();
    areaStyle.FillSolidBrush = new GeoSolidBrush(GeoColor.FromArgb(255, 233, 232, 214));
    areaStyle.OutlinePen = new GeoPen(GeoColor.FromArgb(255, 118, 138, 69), 1);
    areaStyle.OutlinePen.DashStyle = LineDashStyle.Solid;
    worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = areaStyle;
 
    // This setting will apply from ZoomLevel01 to ZoomLevel20, which means the map will be rendered in the same style, no matter how far we zoom in or out. 
    worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
 
    ShapeFileFeatureLayer capitalLayer = new ShapeFileFeatureLayer("AppData/capital.shp");
    // Similarly, we use the presetPointStyle for cities.     
    PointStyle pointStyle = new PointStyle();
    pointStyle.SymbolType = PointSymbolType.Square;
    pointStyle.SymbolSolidBrush = new GeoSolidBrush(GeoColor.StandardColors.White);
    pointStyle.SymbolPen = new GeoPen(GeoColor.StandardColors.Black, 1);
    pointStyle.SymbolSize = 6;
 
    PointStyle stackStyle = new PointStyle();
    stackStyle.SymbolType = PointSymbolType.Square;
    stackStyle.SymbolSolidBrush = new GeoSolidBrush(GeoColor.StandardColors.Maroon);
    stackStyle.SymbolPen = new GeoPen(GeoColor.StandardColors.Transparent, 0);
    stackStyle.SymbolSize = 2;
 
    pointStyle.CustomPointStyles.Add(stackStyle);
    capitalLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = pointStyle;
    // This setting also applies from ZoomLevel01 to ZoomLevel20, so city symbols will be rendered in the same style, no matter how far we zoom in or out. 
    capitalLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
 
    LayerOverlay layerOverlay = new LayerOverlay();
 
    // Add the ShapeFile layer to the layer overlay
    layerOverlay.Layers.Add(worldLayer);
    layerOverlay.Layers.Add(capitalLayer);
 
    // Add the layerOverlay to map.
    mapView.Overlays.Add(layerOverlay);
 
    // Set a proper extent for the map. The extent is the geographical area you want it to display.
    mapView.CurrentExtent = new RectangleShape(-134, 70, -56, 7);
 
    // We now need to call the Refresh() method of the Map view so that the Map can redraw based on the data that has been provided.
    mapView.Refresh();
}

And the result is as following (Figure 11):


Figure 11. A map of Europe with the additional borders and capitals layers displayed.

How to Use TextStyle

A TextStyle ​is used to label items on map. As every ShapeFile ​has a relative .dbf file that includes descriptions for every record, the most common way to use TextStyles is for labeling. For example, WorldCapital Shapefile'​s corresponding .dbf file contains the field “​CITY_NAME”​. We can use this field to label the cities on our map.

Map Suite includes several built-in TextStyles to help us quickly apply attractive city labels. We can simply pick the TextStyle we like and use it.

public override void ViewDidLoad()
{
    base.ViewDidLoad();
 
    MapView mapView = new MapView(View.Frame);
    View.Add(mapView);
 
    // Set the Map Unit to DecimalDegrees, the ShapeFile’s unit of measure.
    mapView.MapUnit = GeographyUnit.DecimalDegree;
    WorldStreetAndImageryOverlay worldStreetsAndImageryOverlay = new WorldStreetAndImageryOverlay();
 
    // Add a WorldStreetsAndImageryOverlay.
    mapView.Overlays.Add("WorldStreetsAndImageryOverlay", worldStreetsAndImageryOverlay);
 
    // Create a new Layer and pass the path to a ShapeFile into its constructor. 
    ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer("AppData/cntry02.shp");
 
    // Set the worldLayer with a preset Style, as AreaStyles.Country1 has YellowGreen background and black border, our worldLayer will have the same render style.  
    AreaStyle areaStyle = new AreaStyle();
    areaStyle.FillSolidBrush = new GeoSolidBrush(GeoColor.FromArgb(255, 233, 232, 214));
    areaStyle.OutlinePen = new GeoPen(GeoColor.FromArgb(255, 118, 138, 69), 1);
    areaStyle.OutlinePen.DashStyle = LineDashStyle.Solid;
    worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = areaStyle;
 
    // This setting will apply from ZoomLevel01 to ZoomLevel20, which means the map will be rendered in the same style, no matter how far we zoom in or out. 
    worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
 
    ShapeFileFeatureLayer capitalLayer = new ShapeFileFeatureLayer("AppData/capital.shp");
    // Similarly, we use the presetPointStyle for cities.     
    PointStyle pointStyle = new PointStyle();
    pointStyle.SymbolType = PointSymbolType.Square;
    pointStyle.SymbolSolidBrush = new GeoSolidBrush(GeoColor.StandardColors.White);
    pointStyle.SymbolPen = new GeoPen(GeoColor.StandardColors.Black, 1);
    pointStyle.SymbolSize = 6;
 
    PointStyle stackStyle = new PointStyle();
    stackStyle.SymbolType = PointSymbolType.Square;
    stackStyle.SymbolSolidBrush = new GeoSolidBrush(GeoColor.StandardColors.Maroon);
    stackStyle.SymbolPen = new GeoPen(GeoColor.StandardColors.Transparent, 0);
    stackStyle.SymbolSize = 2;
 
    pointStyle.CustomPointStyles.Add(stackStyle);
    capitalLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = pointStyle;
    // This setting also applies from ZoomLevel01 to ZoomLevel20, so city symbols will be rendered in the same style, no matter how far we zoom in or out. 
    capitalLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
 
    // We create a new Layer for labeling the capitals.
    ShapeFileFeatureLayer capitalLabelLayer = new ShapeFileFeatureLayer("AppData/capital.shp");
    // We use the preset TextStyle. Here we pass in "CITY_NAME", the name of the field containing the values we want to label the map with.
    GeoFont font = new GeoFont("Arial", 9, DrawingFontStyles.Bold);
    GeoSolidBrush txtBrush = new GeoSolidBrush(GeoColor.StandardColors.Maroon);
    TextStyle textStyle = new TextStyle("CITY_NAME", font, txtBrush);
    textStyle.XOffsetInPixel = 0;
    textStyle.YOffsetInPixel = -6;
    capitalLabelLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = textStyle;
    capitalLabelLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
    // Since the map is drawn with tiles, the label needs to draw on the margin to make sure the text is complete after joining the tiles together.
    // Create a new Layer Overlay to hold the layer we just created
    LayerOverlay layerOverlay = new LayerOverlay();
 
    // Add the ShapeFile layer to the layer overlay
    layerOverlay.Layers.Add(worldLayer);
    layerOverlay.Layers.Add(capitalLayer);
    layerOverlay.Layers.Add(capitalLabelLayer);
 
    // Add the layerOverlay to map.
    mapView.Overlays.Add(layerOverlay);
 
    // Set a proper extent for the map. The extent is the geographical area you want it to display.
    mapView.CurrentExtent = new RectangleShape(-134, 70, -56, 7);
 
    // We now need to call the Refresh() method of the Map view so that the Map can redraw based on the data that has been provided.
    mapView.Refresh();
}

The result should look like this (Figure 12):


Figure 12. Map of Europe with TextStyle applied.

Now that we know how to render text and symbols, let's create customized Styles and TextStyles. We'll also specify different ranges of ZoomLevels, and apply varying customized Styles and TextStyles to the same layer at different ZoomLevel ranges.

public override void ViewDidLoad()
{
    base.ViewDidLoad();
 
    MapView mapView = new MapView(View.Frame);
    View.Add(mapView);
 
    // Set the Map Unit to DecimalDegrees, the ShapeFile’s unit of measure.
    mapView.MapUnit = GeographyUnit.DecimalDegree;
    WorldStreetAndImageryOverlay worldStreetsAndImageryOverlay = new WorldStreetAndImageryOverlay();
 
    // Add a WorldStreetsAndImageryOverlay.
    mapView.Overlays.Add("WorldStreetsAndImageryOverlay", worldStreetsAndImageryOverlay);
 
    // Create a new Layer and pass the path to a ShapeFile into its constructor. 
    ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer("AppData/cntry02.shp");
 
    // Set the worldLayer with a preset Style, as AreaStyles.Country1 has YellowGreen background and black border, our worldLayer will have the same render style.  
    AreaStyle areaStyle = new AreaStyle();
    areaStyle.FillSolidBrush = new GeoSolidBrush(GeoColor.FromArgb(255, 233, 232, 214));
    areaStyle.OutlinePen = new GeoPen(GeoColor.FromArgb(255, 118, 138, 69), 1);
    areaStyle.OutlinePen.DashStyle = LineDashStyle.Solid;
    worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = areaStyle;
 
    // This setting will apply from ZoomLevel01 to ZoomLevel20, which means the map will be rendered in the same style, no matter how far we zoom in or out. 
    worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
 
    ShapeFileFeatureLayer capitalLayer = new ShapeFileFeatureLayer("AppData/capital.shp");
    // Similarly, we use the presetPointStyle for cities.     
    PointStyle pointStyle = new PointStyle();
    pointStyle.SymbolType = PointSymbolType.Square;
    pointStyle.SymbolSolidBrush = new GeoSolidBrush(GeoColor.StandardColors.White);
    pointStyle.SymbolPen = new GeoPen(GeoColor.StandardColors.Black, 1);
    pointStyle.SymbolSize = 6;
 
    PointStyle stackStyle = new PointStyle();
    stackStyle.SymbolType = PointSymbolType.Square;
    stackStyle.SymbolSolidBrush = new GeoSolidBrush(GeoColor.StandardColors.Maroon);
    stackStyle.SymbolPen = new GeoPen(GeoColor.StandardColors.Transparent, 0);
    stackStyle.SymbolSize = 2;
 
    pointStyle.CustomPointStyles.Add(stackStyle);
    // We can customize our own Style. Here we pass in a color and a size.
    capitalLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimpleCircleStyle(GeoColor.StandardColors.White, 7, GeoColor.StandardColors.Brown);
    // The Style we set here is available from ZoomLevel01 to ZoomLevel05. That means if we zoom in a bit more, it will no longer be visible.
    capitalLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level05;
    capitalLayer.ZoomLevelSet.ZoomLevel06.DefaultPointStyle = pointStyle;
    // This setting also applies from ZoomLevel01 to ZoomLevel20, so city symbols will be rendered in the same style, no matter how far we zoom in or out. 
    capitalLayer.ZoomLevelSet.ZoomLevel06.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
 
    // We create a new Layer for labeling the capitals.
    ShapeFileFeatureLayer capitalLabelLayer = new ShapeFileFeatureLayer("AppData/capital.shp");
    // We use the preset TextStyle. Here we pass in "CITY_NAME", the name of the field containing the values we want to label the map with.
    GeoFont font = new GeoFont("Arial", 9, DrawingFontStyles.Bold);
    GeoSolidBrush txtBrush = new GeoSolidBrush(GeoColor.StandardColors.Maroon);
    TextStyle textStyle = new TextStyle("CITY_NAME", font, txtBrush);
    textStyle.XOffsetInPixel = 0;
    textStyle.YOffsetInPixel = -6;
    // We can customize our own TextStyle. Here we pass in the font, size, style and color.
    capitalLabelLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.CreateSimpleTextStyle("CITY_NAME", "Arial", 8, DrawingFontStyles.Italic, GeoColor.StandardColors.Black, 3, 3);
    // The TextStyle we set here is available from ZoomLevel01 to ZoomLevel05. 
    capitalLabelLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level05;
    capitalLabelLayer.ZoomLevelSet.ZoomLevel06.DefaultTextStyle = textStyle;
    capitalLabelLayer.ZoomLevelSet.ZoomLevel06.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
    // Since the map is drawn with tiles, the label needs to draw on the margin to make sure the text is complete after joining the tiles together.
    // Create a new Layer Overlay to hold the layer we just created
    LayerOverlay layerOverlay = new LayerOverlay();
 
    // Add the ShapeFile layer to the layer overlay
    layerOverlay.Layers.Add(worldLayer);
    layerOverlay.Layers.Add(capitalLayer);
    layerOverlay.Layers.Add(capitalLabelLayer);
 
    // Add the layerOverlay to map.
    mapView.Overlays.Add(layerOverlay);
 
    // Set a proper extent for the map. The extent is the geographical area you want it to display.
    mapView.CurrentExtent = new RectangleShape(-134, 70, -56, 7);
 
    // We now need to call the Refresh() method of the Map view so that the Map can redraw based on the data that has been provided.
    mapView.Refresh();
}

Can you imagine what the map will look like now? Below is the result. At first it looks like Figure 7, then like Figure 8 as you zoom in further.


Figure 7. A map of Europe with two ZoomLevels, before zooming in.


Figure 8. The same map with two ZoomLevels, after zooming in.

Summary

You now know the basics of using the Map Suite Map control and can start adding this functionality to your own applications. Let's recap what we've learned about the object relationships and how the pieces of Map Suite work together:

  1. It is of the utmost importance that the units (feet, meters, decimal degrees, etc.) be set properly for the Map control, based on the requirements of your data.
  2. Shapefiles provide the data used by a Map control to render a map.
  3. A Map is the basic control that contains all the other objects used to indicate how the map should be rendered.
  4. A Map has one-to-many Layers. A Layer correlates one-to-one with a Shapefile (.shp).
  5. A Layer can have one-to-many ZoomLevels. ZoomLevels help to define ranges (upper and lower scales) of when a Layer should be shown or hidden.
map_suite_mobile_for_ios_quick_start_guide.txt · Last modified: 2017/03/14 10:25 by tgwikiupdate