ibiMap001 Features

In this section:

You can utilize the custom filtering and aggregation capabilities of the Enable engine along with WebFOCUS integration to display data in Google Maps for multi-dimensional analysis and to provide geographic insight into business trends and opportunities. Google Maps are only available if you have a Google Maps API license key, for more information on obtaining a license key, see Google Maps API License Key.

WebFOCUS Enable Maps tree

The following image provides an example leveraging Google Maps through WebFOCUS Enable components.

Google Map through WebFOCUS Enable components

Google Maps is a web-based mapping service application provided by Google offering powerful, user friendly mapping technology that can be customized to show points on a map with drill-down capabilities and allows embedded maps on Flex applications through the Google Maps API for Flash. With Google Maps being a component inside WebFOCUS Enable engine, you can now develop geographical dashboards quickly with advanced visualization, guided navigation, and custom filters. You can customize the Google Maps properties and bind them to the data retrieved from WebFOCUS using WebFOCUS Enable engine. The Google Maps component is available in WebFOCUS Enable Maps folder. For more information on the Google Maps API for Flash, see the documentation located on the Google code site here: http://code.google.com/intl/en/apis/maps/documentation/flash/intro.html.

Note: In order to present points on a map using the data retrieved from WebFOCUS, data needs to be in geocode (enriched with geographical data). When binding data to Google Maps, the sources used to bind WebFOCUS Enable needs to be defined by latitude and longitude coordinates and a Marker value associated with a group of data.


Top of page

x
Google Maps API License Key

How to:

In order to use Google Maps with WebFOCUS Enable, you must sign up for a Google Account and generate a Google Maps API license key.



x
Procedure: How to Generate a Google Maps API License Key

There is no limit to the number of keys you may obtain under a single Google Account. It is recommend that you register your domain name. Your key will be valid for that domain, its subdomains, all URLs on hosts in those domains, and all ports on those hosts. Make sure it is registered for the domain from which the SWF is being served, not for the domain on which the SWF is embedded.

Note: You must have a Google Account to get a license key. If you do not have an account, create one from http://www.google.com.

  1. Log into your Google Account.
  2. Access the following site from your browser: http://code.google.com/apis/maps/signup.html
  3. The Sign Up for the Google Maps API page appears.
  4. Read the Google Maps API Terms of Use and select the check box to agree with the terms and conditions.
  5. Enter your base URL in the My web site URL: input field.
    http://machine_name.ibi.com

    This will work for any URL that starts with machine_name.ibi.com even if the Flex application with the Google Maps will be running under a different port number, for example machine_name.ibi.com:8080.

    Note: Do not use localhost.

  6. Click Generate API Key.

    Generate API Key button

    The Google Map API License key is generated.

  7. Copy the license key and save it to a text file.


x
Procedure: How to Add the Google Maps API Key to the ibiMap001 Component
  1. In Components pane inside Flex Builder, expand the WebFOCUSEnable Maps folder.
  2. Drag and drop an ibiMap001 component into your Flex application.

    Note: ibiCanvas is always required in order to use WebFOCUS Enable components in your Flex application.

    You will see gray box with a message indicating there is no Google Maps API Key assigned to the map.

    no Google Maps API Key error message

  3. With the ibiMap001 component selected, go to the Properties pane and expand the IBI Maps category. Locate the apiKey property and paste your Google Maps API Key there.

    Properties pane

  4. With the application in Design View, click the Refresh button.

    Refresh button

    You should now see the Google Maps in your application.

    Google Maps

    Note: The Debug Mode watermark may appear on the map because while you are developing on a local drive (file://), the Google Maps API Key check is skipped. Once you compile the application and run the SWF file that is Adobe Flash Player compatible under the application or web server where your API Key is registered, the map will run without the Debug Mode message. You may need to register a separate key for your development server machine name while developing the application.


Top of page

x
Creating a WebFOCUS Procedure for Google Maps

How to:

You must predefine the marker fields in the source file before binding Google Maps to data using WebFOCUS Enable.

Markers are presented at run time on the Google Map by placing a balloon image at specific geographical points. Clicking on the Google Map marker can result in a drill down report inside an info window that pops up above the marker. A tooltip can also be presented when hovering over a Google Map marker.

Markers are defined by latitude and longitude coordinates that are used to plot points for the marker on the Google Map. You also have the option to specify the fields that contain corresponding data to be used for the tooltips and specify the fields that contain data for drill downs in the info window.



x
Procedure: How to Create Google Map Latitude/Longitude Coordinates in the Source File

In order to plot points on the Google Map, you must define each point by its latitude and longitude coordinates geographically and associate a marker, or group assignment, to each point. The Source file must be XML format and must contain fields for LATITUDE and LONGITUDE. Additional fields can be included for tooltips or drill down reports in the info window.

Note: The following example creates a source file for a Google Map by:

Once the Latitude and Longitude coordinates for Google Maps have been set, this procedure will be selected as the source file for your application from Flex Builder.

  1. Join the Century Sales and Locale data sources.

    For further instructions on joining the data sources, see How to Join the Century Sales and Locale Data Sources .

  2. Group COSTOFGOODSSOLD and PROFIT fields.

    For further instructions on how to group fields, see How to Group the COSTOFGOODSSOLD and PROFIT Fields.

  3. Add a filter to easily show the data in the map with a more manageable number of records.

    For further instructions on adding a filter, see How to Add a Filter to the Report.

  4. With the Report created and modified following How to Add a Filter to the Report open, select Output from the Report menu.
  5. Select Standard XML (XML) from the Select Format drop-down list.

    Note: The XML output format is available from the Unstyled formats folder.

  6. Select Web browser from the Destination drop-down list.
  7. Click OK to close the Report Options dialog box.
  8. Save and close your report. It should appear in Report Painter in Developer Studio, as shown in the following image.

    Report Painter in Developer Studio



x
Procedure: How to Join the Century Sales and Locale Data Sources

The Century Sales and Locale data sources are available from the Master Files folder in the IBI Demonstration project of Developer Studio. You can copy these source files to the project directory of your choice.

  1. Open Developer Studio.
  2. With the Procedures folder selected, select File, then New/Procedure. The Add Procedure dialog box appears.
  3. Name the procedure flexgmap and select Open. The Procedure Viewer opens.
  4. Click and hold a component connector (yellow diamond) and select Join. The Open dialog box appears.
  5. Select centurysales.mas and click Open. The Join dialog box appears.
  6. Select the Add File button from the Join toolbar.
  7. From the File Description List, select locale.mas and click Open.

    Developer Studio automatically creates a Join between the data sources if they both have fields with the same formats. The Join tool displays both data sources and the default Joins, as shown in the following example image.

    Join tool

    For more information about using the Join tool, see the Creating Reports with Graphical Tools manual.

  8. Close the Join tool to save the Join and update the procedure. The Join will be added to the Procedure Viewer.


x
Procedure: How to Group the COSTOFGOODSSOLD and PROFIT Fields
  1. Open the Join created in How to Join the Century Sales and Locale Data Sources.
  2. From the Procedure Viewer, click and hold a component connector (yellow diamond) after the Join icon and select Report. The Open dialog box appears.
  3. Select centurysales.mas and select Open.
  4. Select By from the Columns toolbar and double click YEAR from the Object Inspector.
  5. Select By from the Columns toolbar and double click PLANTREGION, STATE, and CITY from the Object Inspector.

    Note: The LATITUDE and LONGITUDE data are based on CITY so you will assign the CITY field at the tooltips.

  6. Select By from the Columns toolbar and double click LATITUDE and LONGITUDE from the Object Inspector.
  7. Select By from the Columns toolbar and double click PRODUCTTYPE and PRODUCTCATEGORY from the Object Inspector.

    Note: You will drill down into PRODUCTTYPE and PRODUCTCATEGORY data in the info window.

  8. Select Sum from the Columns toolbar and double click COSTOFGOODSSOLD and PROFIT from the Object Inspector.
  9. Save the report. It should appear as shown in the following image.

    Report Painter output



x
Procedure: How to Add a Filter to the Report
  1. Open the Report created in How to Group the COSTOFGOODSSOLD and PROFIT Fields.
  2. Select Where/If from the Report menu. The Report Options window will appear.
  3. Select the Where tab.
  4. Enter COUNTRY EQ 'United States' in the Expressions window.
  5. Click OK.

Top of page

x
Customizing the Google Map Properties

You may customize the Google Maps by using the IBI Maps Properties. The Map properties consist of options for the type, position, and controls available on the Google Map. The settings applied define how the Google Map is initially rendered at run time.

The markerSets property consists of options for binding WebFOCUS data with the Google Map in order to define Google Map Layers and Markers. For a complete list of ibiMap001 component properties, see Mapping Components.

IBI Maps Properties pane


Top of page

x
Integrating WebFOCUS Enable With Google Maps

In this section:

How to:

Once you have created a WebFOCUS procedure to retrieve values to populate the marker, you can add the ibiMap001 component to interact with your Flex application.



x
Procedure: How to Bind Data from WebFOCUS on a Google Map Location
  1. With Adobe Flex Builder open, select File, New, Flex Project.
  2. Name the project My_GoogleMap and add the WebFOCUS Enable engine, following the procedure in How to Create a Flex Project, be sure to use the name My_GoogleMap, instead of the sample name in the procedure.
  3. Select the Design tab to switch to layout view, where you can drag and drop components onto the Flex Builder canvas.
  4. From the WebFOCUSEnable Controls folder in the Components pane, drag and drop the ibiCanvas component onto the My_GoogleMap.mxml canvas.

    Adjust the size and position of the canvas as desired.

  5. Drag and drop ibiDataGrid component from WebFOCUSEnable Controls folder into the canvas.

    Adjust the size and position of the data grid as desired.

  6. With the ibiDataGrid selected, expand the Common tree on the Flex Properties pane, and set id to MAIN01.
  7. With ibiDataGrid selected, expand the IBI Data tree on the Flex Properties pane, and set seturl to the following url:
    http://localhost:8080/ibi_apps/WFServlet?IBIF_ex=flexgmap&IBIAPP_app=ibidemo

    Note: The above URL points to the flexgmap.fex procedure created in How to Join the Century Sales and Locale Data Sources.

  8. Click the Run Run button button. If prompted, select OK to save and run the project.
  9. Verify that latitude and longitude are retrieved back into the data grid and close the page to return to the dashboard.
  10. Drag and drop ibiMap001 component from WebFOCUSEnable Maps folder onto the canvas.

    Adjust the size and position of the data grid as desired.

  11. With ibiMap001 selected, expand the IBI Maps tree on the Flex Properties pane, and set apiKey as described in How to Generate a Google Maps API License Key.
  12. Save and click the Refresh button to refresh your Design canvas.

    The Google Map appears, as shown below.

    Google Map

  13. Switch to the Source view.

    Your code should look similar to the following.

    Source view

  14. Add the following code after <ibi:apiKey> element inside ibiMap001 to populate the marker using LATITUDE and LONGITUDE data in the data grid MAIN01. ibiMarkerColor sets the color of the marker and ibiToolTip binds the data to show in the data tips as you mouse over the marker.
    <ibi:markerSets>
    <![CDATA[
    {
    ibiMarkersParent: MAIN01;
    ibiMarkerColor: #8F8FBC;
    ibiLatColumn: LATITUDE;
    ibiLongColumn: LONGITUDE;
    ibiToolTip: CITY;
    }
    ]]>
    </ibi:markerSets>
  15. Click the Run Run button button. If prompted, select OK to save and run the project.

    The markers are populated on the map and data tips show the CITY name, as shown below.

    Google map with CITY name

  16. Close the page and return to the dashboard.
  17. To populate the data inside info window and set the zoom levels for the map so the markers will stay on the map as you zoom in and out for 3 levels, add the following code to the codeblock you wrote in step 14.

    Note: The new code is bold.

    <ibi:markerSets>
      <![CDATA[
        {
          ibiMarkersParent: MAIN01;
          ibiMarkerColor: #8F8FBC;
          ibiLatColumn: LATITUDE;
          ibiLongColumn: LONGITUDE;
          ibiToolTip: CITY; 
          ibiMinZoom: 4;
          ibiMaxZoom: 6;
          ibiInfoWindowColumns: PRODUCTTYPE,Sum.COSTOFGOODSSOLD;
          ibiInfoWindowGroupBy: PRODUCTTYPE;
          ibiInfoWindowSize: 350,150;
        }
      ]]>
    </ibi:markerSets>
  18. Click the Run Run button button. If prompted, select OK to save and run the project.
  19. Zoom in one level and click the marker to drill down to the Product data displayed inside info window.

    Google map Product data

  20. Close the page and return to the dashboard.


x
Procedure: How to Customize the Google Map

You can customize the Google Map views by setting default values and add controls for the users to change settings at runtime.

  1. With My_GoogleMap.mxml open and ibiMap001 selected, expand the IBI Maps tree of the Flex Properties pane and set the following properties:
    • defaultMapCenter: 2 Penn Plaza, New York, NY
    • defaultMapType: hybrid
    • defaultMapZoom: 4

    IBI Maps tree of the Flex Properties pane

  2. Click the Run Run button button. If prompted, select OK to save and run the project.

    The map is now centered on New York.

    Google map output

  3. Close the page and return to the dashboard.
  4. Switch to the Source view.
  5. Place your cursor after the ending </ibi:markerSets> tag and before the </ibi:ibiMap001> tag.

    ibi:markerSets tag in Source view

  6. To add icons that will allow users to switch the map types and set the alignment of the icons to vertical, add the following code:
    <ibi:mapTypeControl>
      <![CDATA[
        {
          buttonAlignment: vertical;
        }
      ]]>
    </ibi:mapTypeControl>
  7. To add Google Maps arrow icons that will allow users to navigate the map and position them under mapTypeControl icons, add the following code directly after the code added in step 6.
    <ibi:positionControl>
      <![CDATA[
        {
          controlPosition: TR;
          paddingX: 15;
          paddingY: 90;
        }
      ]]>
    </ibi:positionControl>
  8. To add a flex slider as a zoom level bar and to position it in the top left corner of the map, add the following code directly after the code added in step 7.
    <ibi:flexZoomControl>
      <![CDATA[
        {
          top: 10;
          left: 10;
        }
      ]]>
    </ibi:flexZoomControl>
  9. Click the Run Run button button. If prompted, select OK to save and run the project.

    The map will have the new controls added in their specified positions.

    Google Map output

    Click different types of maps to change the map view or use the arrow icons and the slider to navigate and zoom in and out of the map.

  10. Close the page and return to the dashboard.


x
ibiMap001: Using the enableCrosshairs Property

The enableCrosshairs property in the ibiMap001 component, when set to true, places crosshairs (plus sign) on a Google map to mark its center. The default value for the enableCrosshairs property is false.

Property

Description

enableCrosshairs

True adds crosshairs (plus sign) to a map, marking its center. The default value is False.

The following image shows the use of the enableCrosshairs property on a Google map.

A Google map showing crosshairs.



x
ibiMap001: Using the refreshMapDisplay Method

By default, the map display does not reset when data is reloaded in the ibiMarkersParent grid of the ibiMap001 component. You can use the refreshMapDisplay method of the ibiMap001 component to refresh the map display back to the default settings in the ibiMap001 component properties that were originally specified.

The ibiMap001 component properties reset by calling the refreshMapDisplay method are:



Example: Using the refreshMapDisplay Method

In this example, the map is zoomed to zoom level 15, the map type is set to Hybrid, and NY is set as the map center. At run time, you can change the zoom level and map type, and move the map around within the viewer to change the location of the map.

Clicking the Refresh Map Display button, calls the refreshMapDisplay method and resets the map to its original default view (zoomed to level 15, Hybrid map type, and map centered on NY).

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
    xmlns:ibi="http://www.informationbuilders.com" >
  <ibi:ibiCanvas width="100%" height="100%" id="mycanvas" >
    <ibi:ibiDataGrid id="mainGrid" visible="false" width="0" height="0"
         seturl="http://localhost:8080/ibi_apps/WFServlet?
         IBIF_ex=flexgmall&amp;IBIAPP_app=ibiflexdemo" />
    <ibi:ibiMap001
         apiKey="ABQIAAAAgfsVoONjutQ6GCJ5tFZjQBQwp_g_
           yVhnk3bKMhLuJQbGXMeO3BSLE02tVxsE6RZyZmjjkbrjHH4v6A"
         id="map1"
         defaultMapZoom="15"
         defaultMapCenter="2 Penn Plaza, New York, NY"
         defaultMapType="hybrid"
         enableContinuousZoom="true"
         enableControlByKeyboard="true"
         enableScrollWheelZoom="true"
         enableCrosshairs="true"
         color="#000000" x="53" y="69" width="911" height="613" >
      <ibi:markerSets>
        <![CDATA[
          {
            ibiMarkersParent: mainGrid;
            ibiMarkerColor: #FF0000;
            ibiLatColumn: LATITUDE;
            ibiLongColumn: LONGITUDE;
            ibiToolTip: STATE;
            ibiMinZoom: 1;
            ibiMaxZoom: 17;
          }
        ]]>
      </ibi:markerSets>
      <ibi:mapTypeControl>
        <![CDATA[
          {
          }
        ]]>
      </ibi:mapTypeControl>
      <ibi:flexZoomControl>
        <![CDATA[
          {
          }
        ]]>
      </ibi:flexZoomControl>
    </ibi:ibiMap001>
    <mx:Button x="53" y="28" label="Refresh Map Display" 
        click="map1.refreshMapDisplay()" />
  </ibi:ibiCanvas>
</mx:Application>


x
Procedure: How to Add Filters to the Google Map

You can apply filters to the map to add interactivity to the map dashboard.

  1. With My_GoogleMap.mxml open switch to the Design view.
  2. From the Layout folder of the Components pane, drag and drop an ApplicationControlBar onto ibiCanvas, above ibiMap001. You may have to resize ibiMap001 so that the ApplicationControlBar can fit above it on ibiCanvas.
  3. From the Controls folder of the Components pane, drag and drop a Label onto the ApplicationControlBar.
  4. Double-click the Label and add the text Select Region To Filter.
  5. From the WebFOCUSEnable Controls folder of the Components pane, drag and drop an ibiComboBox onto the ApplicationControlBar.

    Notice that the ApplicationControlBar resizes automatically.

  6. With the ibiComboBox selected, expand the Common and IBI Data trees in the Flex Properties pane and set the following properties:
    • id: comboReg

    • ibiColumn: PLANTREGION
    • ibiParent: MAIN01
    • ibiFilterAble: true
  7. From the WebFOCUSEnable Controls folder of the Components pane, drag and drop a ibiDataGrid onto the ibiCanvas.

    This ibiDataGrid will be used for the filter.

  8. With the ibiDataGrid selected, expand the Common and IBI Data trees in the Flex Properties pane and set the following properties:
    • id: data01

    • ibiParent: MAIN01
    • ibiUseColumns: STATE,CITY,LATITUDE,LONGITUDE,PROFIT
    • ibiUseFiltered: true
  9. Set visibility to false in the ibiDataGrid, MAIN01.
  10. With ibiMap001 selected, expand the IBI Maps tree in the Flex Properties pane.
  11. Locate the markerSets property and change the parent to data01 by locating ibiMarkersParent: MAIN01; and changing it to ibiMarkersParent: data01;.

    IBI Maps tree in Flex Properties pane

  12. To hide LATITUDE and LONGITUDE from the data grid so that those columns will not be visible, directly after the semicolon of ibiMarkersParent: data01; add another property to markerSets called ibiHideLatLngCols and set it to true by inserting the following code:
     ibiHideLatLngCols: true;
  13. To set the combo box to be used as a map filter, locate the ibiMapFilters property and add the following value:
    {['comboReg']}

    Note: The property expects an array so that multiple filters can be specified. The following is an example of the syntax for more than one filter:

     {['comboReg','combo_2','combo_3']}
  14. Click the Run Run button button. If prompted, select OK to save and run the project.
  15. Select South Atlantic from the combo box. Only the markers for South Atlantic region appear on the map. The data in the data grid under map is also filtered.

    Select Region combo box

  16. Close the page and return to the dashboard.
  17. From the WebFOCUSEnable Charts folder of the Components pane, drag and drop an ibiBarChart onto ibiCanvas below ibiMap001.
  18. With the ibiBarChart expand the Common, Data, IBI Data, and IBI General trees of the Flex Properties pane and set the following properties:
    • id: bar01

    • ibiParent: MAIN01
    • ibiGroupBy: PRODUCTTYPE
    • ibiUseFiltered: true
    • showDataTips: true
    • ibiXField: Sum.PROFIT
    • ibiYField: PRODUCTTYPE
  19. With My_GoogleMap.mxml in plain text view, locate <ibi:ibiBarChart>, as shown in the following image.

    ibi:ibiBarChart tag in plain text view

  20. The <ibi:ibiBarChart> tag in step 14 is an empty element. In order to add a specialized chart style tag an end tag must be added. The code must be altered as follows:
    <ibi:ibiBarChart x="341" y="28" id="bar01" ibiParent="MAIN01"
         ibiGroupBy="PRODUCTTYPE" ibiUseFiltered="true" showDataTips="true"
         ibiXField="Sum.PROFIT" ibiYField="PRODUCTTYPE"/>

    must be changed to:

    <ibi:ibiBarChart x="341" y="28" id="bar01" ibiParent="MAIN01"
         ibiGroupBy="PRODUCTTYPE" ibiUseFiltered="true" showDataTips="true"
         ibiXField="Sum.PROFIT" ibiYField="PRODUCTTYPE"> 
     </ibi:ibiBarChart>
  21. Place your cursor in between the opening and closing <ibi:ibiBarChart> tags, as shown in the following image.

    ibi:ibiBarChart tags in plain text view

  22. Add the following code to that section:
     <ibi:ibiBarStyle>
      <![CDATA[
        {
          fillAlphas: 1, 1, 1, 1,1;
          fillRatios: 0,.2,.4,.75,1;
          fillColors: #5a40bc,#c9bbfc,#4930a5,#917ae9,#2b147e;
          fillAngle: 90;
          showDataEffect: zoom;
        }
      ]]>
    </ibi:ibiBarStyle>
  23. Place your cursor in between the closing ibiCanvas and Application tags, as shown in the following image.

    ibiCanvas and Application tags in plain text view

  24. Add the following flex data effect class code for zoom animation to that section:
    <mx:Zoom id="zoom" duration="1000"/>
  25. Click the Run Run button button. If prompted, select OK to save and run the project.

    The markers, data grid, and the bar chart are now all filterable.

    Google Map output

  26. Close the page and return to the dashboard.


x
Procedure: How to Add Scale Dependent Layers and Visualizations to Markers using ibiMap001

Scale Dependency means only certain layers are visible on the map, depending on the scale or the zoom level at which the map is being displayed. You can populate the markers for different zoom levels based on each aggregation level of the data so that the markers appear and reappear as the user changes the zoom level on the map. You can also add conditions on each aggregated set of data so that the markers appear in different colors based on the condition set.

Note: For this procedure, use locale2.mas and locale2.foc files included in the product download.

The locale2 master and focus files contain individual geocode data for each State, City in a specific state, and Zip code for the specific address in centurysales data. Each geocode value is generated by using free internet service to demonstrate the scale dependent layers of the markers in this example. The fields called ST_LAT and ST_LONG contain corresponding latitude and longitude data for the STATE, CT_LAT and CT_LONG for CITY, and PS_LAT and PS_LONG for POSTALCODE.

  1. Create a WebFOCUS procedure called localeall that joins the data in centurysales and locale2. For more information on creating the procedure, see How to Join the Century Sales and Locale Data Sources.
  2. Add BY and SUM columns as desired. For more information on adding columns, see How to Group the COSTOFGOODSSOLD and PROFIT Fields.
  3. Limit the amount of data retrieved by adding a condition to the procedure. For more information on how to add conditions, see How to Add Filters to the Google Map.
  4. The procedure should look similar to the following:
    JOIN
     CENTURYSALES.STORESEG.POSTALCODE IN centurysales TO MULTIPLE
    LOCALE2.SEG01.POSTALCODE
     IN locale2 AS J0
     END
    DEFINE FILE CENTURYSALES
    MONTHNAME/A20=IF MONTH EQ '01' THEN 'January'
    ELSE IF MONTH EQ '02' THEN 'February'
    ELSE IF MONTH EQ '03' THEN 'March'
    ELSE IF MONTH EQ '04' THEN 'April'
    ELSE IF MONTH EQ '05' THEN 'May'
    ELSE IF MONTH EQ '06' THEN 'June'
    ELSE IF MONTH EQ '07' THEN 'July'
    ELSE IF MONTH EQ '08' THEN 'August'
    ELSE IF MONTH EQ '09' THEN 'September'
    ELSE IF MONTH EQ '10' THEN 'October'
    ELSE IF MONTH EQ '11' THEN 'November'
    ELSE IF MONTH EQ '12' THEN 'December'
    ;
    END
    TABLE FILE CENTURYSALES
    SUM
      PRODUCTCATEGORY
      COST
      PRICE
      COSTOFGOODSSOLD
      PROFIT
    BY YEAR
    BY QUARTER
    BY MONTH
    BY MONTHNAME
    BY PLANTREGION
    BY STATE
    BY ST_LAT
    BY ST_LONG
    BY CITY
    BY CT_LAT
    BY CT_LONG
    BY POSTALCODE
    BY PS_LAT
    BY PS_LONG
    BY STORENAME
    BY ADDRESS
    BY PRODUCTTYPE
    WHERE ( COUNTRY EQ 'United States' ) AND ( REGION NE 'Web(R)' )
      AND ( POSTALCODE NE '065208332' OR '672033296' OR '941033185' );
    ON TABLE SET PAGE-NUM OFF
    ON TABLE NOTOTAL
    ON TABLE PCHOLD FORMAT XML
    ON TABLE SET HTMLCSS ON
    END
  5. With Adobe Flex Builder open select File, New, Flex Project.
  6. Name the project GoogleMap_Scale and add the WebFOCUS Enable engine, following the procedure in How to Create a Flex Project, be sure to use the name GoogleMap_Scale, instead of the sample name in the procedure.
  7. Select the Design tab to switch to layout view, where you can drag and drop components onto the Flex Builder canvas.
  8. From the WebFOCUSEnable Controls folder in the Components pane, drag and drop the ibiCanvas component onto the GoogleMap_Scale.mxml canvas.

    Adjust the size and position of the canvas as desired.

  9. Drag and drop ibiDataGrid component from WebFOCUSEnable Controls folder into the canvas.

    Adjust the size and position of the data grid as desired.

  10. With the ibiDataGrid selected, expand the Common tree on the Flex Properties pane, and set id to MAIN01.
  11. With ibiDataGrid selected, expand the IBI Data tree on the Flex Properties pane, and set seturl to the following url:
    http://localhost:8080/ibi_apps/WFServlet?IBIF_ex=localeall&IBIAPP_app=ibidemo

    Note: The above URL points to the localeall.fex procedure created in step 1 through step 4.

  12. Insert an ibiMap001 component onto the canvas. See How to Add the Google Maps API Key to the ibiMap001 Component.
  13. With ibiMap001 selected, expand the IBI Maps tree on the Flex Properties pane and set the following properties to true: enableScrollWheelZoom, enableContinuousZoom, enableDragging, enableControlByKeyboard.

    IBI Maps tree in Flex Properties pane

  14. To create markers that will be populated based on the aggregated data by STATE at the highest zoom level, then by CITY, and the lowest zoom level should display the markers based on the detailed data by POSTALCODE as the user zooms into the map, expand WebFOCUSEnable Controls on the Components pane and drag an ibiDataGrid onto the canvas.
  15. With the ibiDataGrid created in step 14 selected, expand the Common and IBI Data trees on the Flex Properties pane and set the following properties:
    • id: stateAgg
    • ibiParent: mainGrid
    • ibiGroupBy: STATE,ST_LAT,ST_LONG
    • ibiUseColumns: STATE,ST_LAT,ST_LONG,Sum.PROFIT
  16. Copy and paste the stateAgg data grid, and change the following properties:
    • id: cityAgg
    • ibiGroupBy: CITY,CT_LAT,CT_LONG
    • ibiUseColumns: CITY,CT_LAT,CITY_LONG,Sum.PROFIT
  17. Copy and paste the stateAgg data grid again (make sure you are copying stateAgg not cityAgg) and change the following properties:
    • id: postData
    • ibiUseColumns: POSTALCODE,PS_LAT,PS_LONG,PROFIT
  18. Switch to the Source view.
  19. Add the following code after <ibi:apiKey> element inside ibiMap001 to populate the first marker using the stateAgg data grid.
    <ibi:markerSets>
      <![CDATA[
        {
          ibiMarkersParent: stateAgg;
          ibiLatColumn: ST_LAT;
          ibiLongColumn: ST_LONG;
          ibiToolTip: STATE;
          ibiMinZoom: 3;
          ibiMaxZoom: 4;
          ibiInfoWindowColumns: PRODUCTTYPE,Sum.PROFIT;
          ibiInfoWindowGroupBy: PRODUCTTYPE;
          ibiInfoWindowSize: 250,150;
          ibiMarkerCenter: true;
          ibiHideLatLngCols: true; 
          ibiVisRanges: 1000000.00,5000000.00,10000000.00;
          ibiVisColors: red,yellow,blue,green;
          ibiVisColumn: Sum.PROFIT;
        }
      ]]>
    </ibi:markerSets>

    Instead of setting marker color using the ibiMarkerColor property, it is set using the ibiVisRanges, ibiVisColors, and ibiVisColumn properties (bold above). For more information on these properties, see Mapping Components.

  20. Click the Run Run button button. If prompted, select OK to save and run the project.

    Google Map output

    The map is now populated by red, blue, yellow, and green markers with the data tip for STATE.

  21. Close the page and return to the dashboard.
  22. In Source View, locate the block of code added in step 19 and add the following code for city markers directly after it:

    Note: Each marker set inside the CDATA section of <ibi:markerSets> should be separated by a comma after the brackets { } of the previous marker set.

    {
      ibiMarkersParent: cityAgg;
      ibiLatColumn: CT_LAT;
      ibiLongColumn: CT_LONG;
      ibiToolTip: CITY;
      ibiMinZoom: 5;
      ibiMaxZoom: 6;
      ibiInfoWindowColumns: PRODUCTTYPE,PRODUCTCATEGORY,Sum.PROFIT;
      ibiInfoWindowGroupBy: PRODUCTTYPE,PRODUCTCATEGORY;
      ibiInfoWindowSize: 400,300;
      ibiVisRanges: 1000000.00,5000000.00,10000000.00;
      ibiVisColors: #CA226B,#FDD017,#6960EC,#4E9258;
      ibiVisColumn: Sum.PROFIT;
      ibiMarkerCenter: true;
      ibiHideLatLngCols: true;
    }
  23. Click the Run Run button button. If prompted, select OK to save and run the project.
  24. Zoom into the map five or six levels to see the markers populated with the CITY name in the data tip.

    Google Map output

  25. Close the page and return to the dashboard.
  26. In Source View, locate the block of code added in step 22 and add the following code for post data directly after it:

    Note: Each marker set inside the CDATA section of <ibi:markerSets> should be separated by a comma after the brackets { } of the previous marker set.

    {
      ibiMarkersParent: postData;
      ibiLatColumn: PS_LAT;
      ibiLongColumn: PS_LONG;
      ibiToolTip: POSTALCODE;
      ibiMinZoom: 7;
      ibiMaxZoom: 8;
      ibiInfoWindowColumns: PRODUCTCATEGORY,PROFIT;
      ibiInfoWindowSize: 400,300;
      ibiVisRanges: 10000.00,50000.00,100000.00;
      ibiVisColors: #F5A9A9,#F4FA58,#58ACFA,#01DF74;
      ibiVisColumn: PROFIT;
      ibiMarkerCenter: true;
      ibiHideLatLngCols: true;
    }
  27. Click the Run Run button button. If prompted, select OK to save and run the project.
  28. Zoom into the map seven or eight levels to see the markers populated with the POSTALCODE name in the data tip.

    Google Map output



Example: Code for a Map With Scale Dependent Layers, Visualizations, Map Controls, and Combo Boxes

Below is the sample code for the map with scale dependent layers and visualizations created in How to Add Scale Dependent Layers and Visualizations to Markers using ibiMap001, with additional map controls and combo boxes for filtering data on the map.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
    xmlns:ibi="http://www.informationbuilders.com" backgroundColor="#ffffff">
  <ibi:ibiCanvas width="100%" height="100%" id="mycanvas" y="10" x="10" >
    <ibi:ibiDataGrid x="0" y="448" width="800" height="133"
         id="mainGrid"
         seturl="http://localhost:8080/ibi_apps/WFServlet?IBIF_ex=localeall" 
         visible="false"/>
    <mx:Label text="Region: " fontSize="12" width="57" x="10" y="11"/>
    <ibi:ibiComboBox x="66" y="11" width="180"
         id="combo1"
         ibiParent="mainGrid"
         ibiColumn="PLANTREGION"
         ibiFilterAble="true" />
    <mx:Label text="State: " fontSize="12" width="50" x="320" y="11"/>
    <ibi:ibiComboBox width="180" x="368" y="11"
         id="combo2"
         ibiParent="mainGrid"
         ibiColumn="STATE"
         ibiFilterAble="true"
         ibiFilterParent="combo1"
         ibiSortValues="true" />
    <ibi:ibiDataGrid width="257" height="134" y="505" x="10"		
         id="stateAgg"
         ibiParent="mainGrid"
         ibiGroupBy="STATE,ST_LAT,ST_LONG"
         ibiUseColumns="STATE,ST_LAT,ST_LONG,Sum.PROFIT"
         ibiUseFiltered="true" />
    <ibi:ibiDataGrid x="275" y="505" width="257" height="133"
         id="cityAgg"
         ibiParent="mainGrid"
         ibiGroupBy="CITY,CT_LAT,CT_LONG"
         ibiUseColumns="CITY,CT_LAT,CT_LONG,Sum.PROFIT"
         ibiUseFiltered="true" />
    <ibi:ibiDataGrid x="540" y="505" width="260" height="133"
         id="postData"
         ibiParent="mainGrid"
         ibiUseColumns="POSTALCODE,PS_LAT,PS_LONG,PROFIT"
         ibiUseFiltered="true"
         visible="true" />
    <ibi:ibiMap001 id="map1" width="790" height="456" left="10" top="41"
         apiKey="ABQIAAAAgfsVoONjutQ6GCJ5tFZjQBQe-mT3FM9t9C2z5-
            I8tFxEuXyfiRQ-Eeq88w-OvcjjE71W2bn3F6Megg"
         enableScrollWheelZoom="true"
         enableContinuousZoom="true"
         enableDragging="true"
        enableControlByKeyboard="true"
        ibiMapFilters="{['combo1','combo2']}" >
      <ibi:markerSets>
        <![CDATA[
          {
            ibiMarkersParent: stateAgg;
            ibiMarkerColor: ;
            ibiLatColumn: ST_LAT;
            ibiLongColumn: ST_LONG;
            ibiToolTip: STATE;
            ibiMinZoom: 3;
            ibiMaxZoom: 4;
            ibiInfoWindowColumns: PRODUCTTYPE,Sum.PROFIT;
            ibiInfoWindowGroupBy: PRODUCTTYPE;
            ibiInfoWindowSize: 250,150;
            ibiVisRanges: 1000000.00,5000000.00,10000000.00;
            ibiVisColors: red,yellow,blue,green;
            ibiVisColumn: Sum.PROFIT;
            ibiMarkerCenter: true;
            ibiHideLatLngCols: true;
          },
          {
            ibiMarkersParent: cityAgg;
            ibiMarkerColor: ;
            ibiLatColumn: CT_LAT;
            ibiLongColumn: CT_LONG;
            ibiToolTip: CITY;
            ibiMinZoom: 5;
            ibiMaxZoom: 6;
            ibiInfoWindowColumns: PRODUCTTYPE,PRODUCTCATEGORY,Sum.PROFIT;
            ibiInfoWindowGroupBy: PRODUCTTYPE,PRODUCTCATEGORY;
            ibiInfoWindowSize: 400,300;
            ibiVisRanges: 1000000.00,5000000.00,10000000.00;
            ibiVisColors: #CA226B,#FDD017,#6960EC,#4E9258;
            ibiVisColumn: Sum.PROFIT;
            ibiMarkerCenter: true;
            ibiHideLatLngCols: true;
          },
          {
            ibiMarkersParent: postData;
            ibiMarkerColor: ;
            ibiLatColumn: PS_LAT;
            ibiLongColumn: PS_LONG;
            ibiToolTip: POSTALCODE;
            ibiMinZoom: 7;
            ibiMaxZoom: 8;
            ibiInfoWindowColumns: PRODUCTCATEGORY,PROFIT;
            ibiInfoWindowGroupBy: ;
            ibiInfoWindowSize: 400,300;
            ibiVisRanges: 10000.00,50000.00,100000.00;
            ibiVisColors: #F5A9A9,#F4FA58,#58ACFA,#01DF74;
            ibiVisColumn: PROFIT;
            ibiMarkerCenter: true;
            ibiHideLatLngCols: true;
          }
        ]]>
      </ibi:markerSets>
      <ibi:flexZoomControl>
        <![CDATA[
          {
            top: ;
            bottom: 35;
            right: ;
            left: 10;
            animate: false;
          }
        ]]>
      </ibi:flexZoomControl>
      <ibi:positionControl>
        <![CDATA[
          {
            controlPosition: BR;
            paddingX: 10;
            paddingY: 110;
           }
        ]]>
      </ibi:positionControl>
      <ibi:mapTypeControl>
        <![CDATA[
          {
            hybrid: false;
            normal: true;
            physical: false;
            satellite: true;
            controlPosition: TR;
            paddingX: 10;
            paddingY: 10; 
            buttonAlignment: vertical;
            buttonSizeWidth: 67;
            buttonSizeHeight: 19;
          }
        ]]>
     </ibi:mapTypeControl>
     <ibi:overviewMapControl>
       <![CDATA[
         {
           controlPosition: BR;
           paddingX: 0;
           paddingY: 0;
         }
       ]]>
     </ibi:overviewMapControl>		
   </ibi:ibiMap001>
  </ibi:ibiCanvas>
</mx:Application>

Top of page

x
Changing Marker Icon Images

You can specify your own custom images to be used for the marker icons and replace the Google Maps marker images.

The image file has to be embedded into the application using Embed source function. The image files should be embedded and defined as class files in the script as follows.

[Embed(source=" bluepin.png")]
public var assign_class_name:Class;

For example:

public var blueClassName:Class;

or

private var assign_class_name:Class;

For example:

private var blueClassName:Class;

When the image file is declared as a PUBLIC class, you can call the image class name directly using ibiMarkerIcon property within markerSets property, as shown in the following code.

ibiMarkerIcon: assign_class_name;

For example:

ibiMarkerIcon: blueClassName;

When the image is declared as a PRIVATE class, first you need to define it in the ibiCustomMarkerIcons property in the ibiMap001 component using an array format, as shown in the following code.

ibiCustomMarkerIcons="{{'assign_image_name':image_class_name_defined, … }}"

For example:

<ibi:ibiMap001 …
ibiCustomMarkerIcons="{{'bluePinName':blueClassName,'greenPinName':greenClassName}}"

Then you can call the image name assigned in ibiCustomMarkerIcons property using ibiMarkerIcon property within markerSets property.

ibiMarkerIcon: image_name_assigned;

For example:

ibiMarkerIcon: bluePinName;

If the image name or class name does not exist then the default Google Maps marker icons are displayed over the map instead.



Example: Inserting Custom Marker Icons

The following six image files are defined to be embedded into the application.

<mx:Script>     
 <![CDATA[
  [Embed(source="bluepin.png")] 
     private var blueClassName:Class;
     
     [Embed(source="greenpin.png")] 
     private var greenClassName:Class;
     
     [Embed(source="pinkpin.png")] 
     private var pinkClassName:Class;
     
     [Embed(source="purplepin.png")] 
     public var purpleClassName:Class;
     
     [Embed(source="redpin.png")] 
     public var redClassName:Class;
     
     [Embed(source="yellowpin.png")] 
     public var yellowClassName:Class;
     
 ]]>   
</mx:Script>

The images, bluepin.png, greenpin.png, and pinkpin.png files, are defined as private classes. You need to assign image names to the private class files using the ibiCustomMarkerIcons property. Then the image file names can be accessed from the ibiMarkerIcon property in markerSets.

The images, purplepin.png, redpin.png, and yellowpin.png files, are defined as public classes. The class name can be referenced directly from the ibiMarkerIcon property in markerSets.

One of the image file referenced in ibiMarkerIcon property is missing in this example, so it is replaced by the default Google Maps marker image.

<ibi:ibiMap001 x="10" y="40" height="402" width="844" 
     id="map01" defaultMapZoom="3"
     ibiMapFilters="{['comboReg','comboSt','comboCity']}"
     ibiCustomMarkerIcons="{{
       'bluePinName':blueClassName,
       'greenPinName':greenClassName,
       'pinkPinName':pinkClassName
     }}"
     enableContinuousZoom="true" 
     enableControlByKeyboard="true" 
     enableDragging="true" 
     enableScrollWheelZoom="true" >
  <ibi:apiKey>ABQIAAAAgfsVoONjutQ6GCJ5tFZjQBQe-
       mT3FM9t9C2z5-I8tFxEuXyfiRQ-Eeq88w-OvcjjE71W2bn3F6Megg
  </ibi:apiKey>
  <ibi:markerSets>
    <![CDATA[
      {
        ibiMarkersParent: main01;                           
        ibiLatColumn: ST_LAT;
        ibiLongColumn: ST_LONG;
        ibiToolTip: STATE;
        ibiMinZoom: 3;
        ibiMaxZoom: 4;
        ibiMarkerIcon: bluePinName;
      },
      {
        ibiMarkersParent: main01;                           
        ibiLatColumn: ST_LAT;
        ibiLongColumn: ST_LONG;
        ibiToolTip: STATE;
        ibiMinZoom: 4;
        ibiMaxZoom: 5;
        ibiMarkerIcon: purpleClassName;
        ibiInfoWindowGroupBy: PRODUCTTYPE;
        ibiInfoWindowColumns: PRODUCTTYPE,Sum.PROFIT;
      },
      {
        ibiMarkersParent: main01;                           
        ibiLatColumn: CT_LAT;
        ibiLongColumn: CT_LONG;
        ibiToolTip: CITY;
        ibiMinZoom: 5;
        ibiMaxZoom: 6;
        ibiMarkerIcon: greenPinName;
        ibiInfoWindowGroupBy: PRODUCTCATEGORY;
        ibiInfoWindowColumns: PRODUCTCATEGORY,Sum.PROFIT;
      },
      {
        ibiMarkersParent: main01;                           
        ibiLatColumn: CT_LAT;
        ibiLongColumn: CT_LONG;
        ibiToolTip: POSTALCODE;
        ibiMinZoom: 6;
        ibiMaxZoom: 7;
        ibiMarkerIcon: noPin;
      },
      {
        ibiMarkersParent: main01;                           
        ibiLatColumn: PS_LAT;
        ibiLongColumn: PS_LONG;
        ibiToolTip: POSTALCODE;
        ibiMinZoom: 7;
        ibiMaxZoom: 8;
        ibiMarkerIcon: redClassName;
      }
    ]]>
  </ibi:markerSets>
  <ibi:zoomControl>
    <![CDATA[ 
      {
      } 
    ]]>
  </ibi:zoomControl>
  <ibi:mapTypeControl>
    <![CDATA[ 
      {
      }
    ]]>
  </ibi:mapTypeControl>
  <ibi:overviewMapControl>
    <![CDATA[ 
      {
      } 
    ]]>
  </ibi:overviewMapControl>
  <ibi:positionControl>
    <![CDATA[ 
      {
      } 
    ]]>
  </ibi:positionControl>
</ibi:ibiMap001>

The following image shows the output.


Top of page

x
Adding Click Event On Markers

You can call custom user defined functions using the ibiOnMarkerClick property and onMapZoomChange property when using ibiMap001. For example, you can add drill downs to WebFOCUS reports when the marker is clicked or when the map zoom level has been changed. The event itself has to be manually coded in the Script section of the source code using ActionScript.

The ibiOnMarkerClick property is used to run a custom event when the user clicks on the marker. Currently if the info window options in the markerSets property are set, info window opens when the user clicks on the marker by default. You can have info window pop up and run a custom event when the marker is clicked. The info window can be turned off by not setting info window options in the markerSets property.

The onMapZoomChange property is used to run a custom event when the map zoom level is changed.



Example: Adding Events to the ibiMap001 Component

In the following example, the markerClicked function is defined to run a WebFOCUS report as a drill down procedure. The report should contain filtered result based on the location of the marker clicked. The LATITUDE and LONGITUDE information of the marker is sent to the procedure as parameters. Also zoomChanged is used to display the current zoom level of the map in the application.

<mx:Script>     
  <![CDATA[
    import com.google.maps.MapMouseEvent;  
    private function markerClicked(e:MapMouseEvent):void
    {
      var fexString:String = "";
      var drillpath:String = "http://localhost:8080/ibi_apps/WFServlet
         ?IBIF_ex=city_sales&IBIAPP_app=ibiflexdemo";
         fexString =  drillpath +
         "&LATITUDE =" + e.latLng.lat().toString() +
         "&LONGITUDE =" + e.latLng.lng().toString();
      navigateToURL(new URLRequest(fexString), '_blank');
    }
    import com.google.maps.MapZoomEvent;
    private function zoomChanged(e:MapZoomEvent):void
    {
      info.text = map01.mapContainer.getZoom().toString();
    }
  ]]>   
</mx:Script>

The map calls markerClicked and zoomChanged functions in the ibiOnMarkerClick and onMapZoomChange properties.

<ibi:ibiMap001 x="10" y="162" height="440" width="836" id="map01"
     defaultMapZoom="5" ibiMapFilters="{['comboReg','listSt']}"
     ibiOnMarkerClick="{markerClicked}"
     onMapZoomChange="{zoomChanged}"
     enableContinuousZoom="true" enableControlByKeyboard="true"
     enableDragging="true" enableScrollWheelZoom="true" >
  <ibi:apiKey>ABQIAAAAgfsVoONjutQ6GCJ5tFZjQBQe-mT3FM9t9C2z5-
         I8tFxEuXyfiRQ-Eeq88w-OvcjjE71W2bn3F6Megg
  </ibi:apiKey>
  <ibi:markerSets>
    <![CDATA[
      {
        ibiMarkersParent: main01;                           
        ibiLatColumn: LATITUDE;
        ibiLongColumn: LONGITUDE;
        ibiToolTip: CITY;
        ibiMinZoom: 2;
        ibiMaxZoom: 8;
        ibiInfoWindowColumns: PRODUCTTYPE,PRODUCTCATEGORY,PROFIT;
      }
    ]]>
  </ibi:markerSets>
  <ibi:zoomControl>
    <![CDATA[ 
      {
      } 
    ]]>
  </ibi:zoomControl>
  <ibi:mapTypeControl>
    <![CDATA[ 
      {
      } 
    ]]>
  </ibi:mapTypeControl>
  <ibi:overviewMapControl>
    <![CDATA[ 
      {
      } 
    ]]>
  </ibi:overviewMapControl>
  <ibi:positionControl>
    <![CDATA[ 
      {
      } 
    ]]>
  </ibi:positionControl>
</ibi:ibiMap001>

The map and marker are shown in the following image.

When the marker is clicked, WebFOCUS active report opens with the filtered data for the location clicked. In this case, Jacksonville, Florida, as shown in the following image.


Top of page

x
Map Zoom and Centering Properties

The component called ibiMapCenterControl is available in the WebFOCUSEnable Maps folder to center the map and change the zoom level automatically based on the values selected in ibiComboBox and ibiList components.

You can drag and drop the ibiMapCenterControl component anywhere outside of the ibiMap001 component. The following properties are available in ibiMapCenterControl component.

Property

Description

ibiComponentID

Required. Set the ID of the combo box or list box or data grid that will be used to move the map.

ibiMapParent

Required. Specify the ID of the map component to center and zoom.

ibiMapLatCol

Required. Specify the column name that contains Latitude values to direct the map.

ibiMapLongCol

Required. Specify the column name that contains Longitude values to direct the map.

ibiMapCenterAll

Optional. Specify where to center the map when the value [ALL] is selected in the combo box or list box. This property can be a name of the Country, State, City, or an address or a specific Latitude/Longitude value separated by comma or space. For example, ibiMapCenterAll="Australia" or ibiMapCenterAll="Memphis, KY" or ibiMapCenterAll="35.22, 138.44" If nothing is set, the map will not move and stays at the last location it was directed.

ibiMapZoomLevel

Optional. Specify the zoom level to direct the map to zoom in and/or out based on the value selected in the combo box or list box. If nothing is set, the map stays at the last zoom level used.



Example: Using the ibiMapCenterControl Component

Using the ibiComboBox named combo1, the user is able to select a value from the field such as REGION, and the map will move to the location selected based on the corresponding values in LATITUDE and LONGITUDE columns. The map will also zoom into level 5. The map will center its location to New York when the user selects the value [ALL] from the combo box.

<ibi:ibiMapCenterControl x="964" y="70"
 ibiComponentID="combo1"
 ibiMapLatCol="LATITUDE"
 ibiMapLongCol="LONGITUDE"
 ibiMapParent="map1"
 ibiMapZoomLevel="5"
 ibiMapCenterAll="2 Penn Plaza, New York, NY" >
</ibi:ibiMapCenterControl>

WebFOCUS