ComponentOne Reports for WinForms帮助文档
地图使用演练

在本演练中,您将看到如何向报表添加一个地图,用来显示美国各州的订单总额,按照各州数据进行汇总。原本不带地图的报表非常简洁,仅列出每一个州的订单总额。以下是全部的数据:


订单总额州名称
16325.15 Alaska
3490.02 California
115673.39 Idaho
1947.24 Montana
52245.9 New Mexico
30393.93 Oregon
31001.65 Washington
12489.7 Wyoming


您将向该报表添加一个地图,并使用颜色范围从绿色(表示该州没有订单)到黄色和红色(取决于订单总额的具体数量)填充每一个州的区域。此外,每一个州还具有一个直径和总金额按比例相关的圆形标记,同时还有一个标签表示总金额。最后您还将添加两个小的插页地图,用来表示阿拉斯加和夏威夷。
注意,该演练将使用以下文件:

完成以下步骤:

  1. 创建基础报表。

    向设计器添加一个新的报表,将C1NWindMaps.mdb做为数据源,并使用以下SQL查询:   
      SELECT Orders.ShipRegion, Orders.ShipCountry, StateNamesGeo.StateName,   
      Sum([Order Details].UnitPrice*[Order Details].Quantity) AS OrderValue,   
      (select Longitude from StateNamesGeo where StateNamesGeo.Abbr = Orders.ShipRegion) as Longitude,   
      (select Latitude from StateNamesGeo where StateNamesGeo.Abbr = Orders.ShipRegion) as Latitude   
      FROM ((Categories INNER JOIN Products ON Categories.CategoryID = Products.CategoryID)   
      INNER JOIN (Orders INNER JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID)   
        ON Products.ProductID = [Order Details].ProductID)   
      INNER JOIN StateNamesGeo on Orders.ShipRegion = StateNamesGeo.Abbr   
      WHERE Orders.ShipCountry = "USA"   
      GROUP BY Orders.ShipRegion, Orders.ShipCountry, StateNamesGeo.StateName   
      ORDER BY Orders.ShipRegion;

    使用报表向导向内容节区域添加OrderValue和StateName字段,运行报表,确保其正确的显示了以上数据。

  2. 添加主地图

    请使用以下步骤向报表页眉区域添加一个地图:
    1.在报表设计器中,向下拖拽报表页眉区域底部边缘,以便留出足够的空间放置地图。
    2.单击Map自定义字段的图标(地球)并拖拽至报表页眉区域。
    3.设置地图的尺寸为12870 ×7620twips或者相似尺寸,按照需要对其进行排布。

  3. 调整地图的属性

    按照下面的列表设置地图的属性(仅列举了非默认值的属性):

    • AutoCenter: false
    • AutoZoom: false
    • CenterLatitude: 38
    • CenterLongitude: -103
    • ShowScale: false
    • TileSource: None
    • ZoomLevel: 3

    请注意因为我们要显示美国的地图,所以将按照需要手动设置坐标轴(因为我们要在右侧留出足够的空间以显示阿拉斯加和夏威夷两个插页地图)。

  4. 添加点标记样式。

    打开MarkerStyles集合,添加一个样式。其属性设置如下:

    • CaptionExpr: StateName & ":" & vbCr & "$" & OrderValue
    • FillColor: 120, 255, 128, 0
    • Name: msTotalSales
    • SizeExpr: sqr(OrderValue / 100)

    这个样式用来在每一个州的区域绘制一个圆形的标记,其尺寸大小表示订单总额。请注意填充的颜色为半透明,以便在本示例中达到更好的效果。同时请注意标记的尺寸和订单总值的平方根成正比。该样式的名称(msTotalSales)将被用来引用该样式。
    您同时也可以根据自己的喜好设置其他一些属性(字体、笔画以及文本颜色等等)。

  5. 添加KML项目样式

    将全部的州分成六组,按照不同的订单总金额范围:
    ? 没有任何订单的州
    ? 订单总金额超过1万美元的州
    ? 订单总金额介于1万到3万美元之间的州
    ? 订单总金额介于3万到5万美元之间的州
    ? 订单总金额介于5万到10万美元之间的州
    ? 订单总金额大于10万美元的州

    因此您需要为每一组创建一个KML项目样式。打开KmlItemStyles集合,添加六个具有不同的FillColor属性值以区分不同分组的州的样式。每个样式的命名大体如上面的分组列表:

    • Name: ksNoOrders, FillColor: 143, 188, 139
    • Name: ks0k10k, FillColor: 255, 250, 205
    • Name: ks10k30k, FillColor: 255, 222, 173
    • Name: ks30k50k, FillColor: 255, 160, 122
    • Name: ks50k100k, FillColor: 205, 92, 92
    • Name: ks100kup, FillColor: 178, 34, 34

    名称很重要,我们将在KML项目表达式中按照每一个州的订单总金额的值使用它们来选择一个样式。

  6. 添加KML图层。

    我们的地图最重要的部分就是这个KML图层,它将用来显示每一个州的边界并使用合适的颜色对其进行填充。打开地图的Layers集合编辑器并添加一个KML图层。设置其属性如下所示:

    • ? KmlFileName:us_states_abbr.kmz(指定不带路径的文件名将在报表定义文件所在的目录下搜索该文件);

    •  RecordSource:

    SELECT Orders.ShipRegion,
        Sum([Order Details].UnitPrice*[Order Details].Quantity) AS OrderValue
        FROM (Categories INNER JOIN Products ON Categories.CategoryID = Products.CategoryID)
        INNER JOIN (Orders INNER JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID)
        ON Products.ProductID = [Order Details].ProductID
        WHERE Orders.ShipCountry = "USA"
        GROUP BY Orders.ShipRegion
        ORDER BY Orders.ShipRegion;
    
    •  ItemFilterExpr: kmlItemName=ShipRegion(确保KML项目表达式,尤其是用来绘制KML项目的样式,市通过当前的KML项目相关的州的数据进行计算的);

    •  KmlVisibleExpr: kmlItemName<>"AK"(确保主地图不显示阿拉斯加);

    •  ItemStyleExpr:

    iif (OrderValue > 100000, "ks100kup", iif (OrderValue > 50000, "ks50k100k", iif (OrderValue > 30000, "ks30k50k", iif (OrderValue > 10000, "ks10k30k", iif (OrderValue > 0, "ks0k10k", "ksNoOrders" )))))

    以上表达式按照来自于RecordSource的每一条记录,按照不同的州计算出的OrderValue的值的合计,计算出相应的KML样式的名称(参见前一段中的样式名称定义)。之前指定的ItemFilterExpr属性的值确保某个州的数据已经从KML文件加载。

  7. 添加圆形标记。

    为了使地图数据更加直观,您也可以在标点层为每个州添加一些圆形标记,标记的大小和州的订单总金额成正比。您可以通过以下步骤做到这一点,首先向Layers集合添加一个PointsLayer,并移动到KML层的上方,使得在地图呈现时,该图层显示在KML图层的上方。设置该图层的属性如下所示:

    •  MarkerStyleExpr: "msTotalSales"(这将使用已经添加到地图的MarkerStyles集合的样式;按照比例确定尺寸的逻辑已经内建在该样式中,在这里我们不需要做其他额外的工作)
    •  Latitude: Latitude(使用记录源提供的空间坐标数据);
    •  Longitude: Longitude(使用记录源提供的空间坐标数据)。
  8. 添加图例:

    您需要向地图添加两个图例:一个仅仅是一个标题,位于右上角,另一个是KML项目的颜色列表,位于右下角。

    1. 打开Legends集合编辑器以添加这两个图例。
    2. 为了添加第一个标题,请添加一个项目,设置其Caption属性为“各州订单总金额”,同时保持LegendAlignment属性为其默认值TopRight。可以按照期望的效果调整其他你看到的属性。
    3. 为了显示颜色列表,请添加另一个图例,设置其对齐方式为BottomRight,之后打开Items集合添加以下项目:
      ? Text项目,设置文本为“颜色列表”-这将做为该图例区域的标题
      ? 六个LayerStyle项目,每一个之前添加的KML项目样式对应一个。对于每一个项目,从LayerStyle下拉列表选择其描述的样式-这将从选中的样式中获取相应的值,并自动地设置大部分其他属性。您唯一所需要动手设置的是项目的文本-为每一个样式设置合适的描述,从“无订单”,到“小于$10K”,再到“$10K-$30K”,等等,一直添加到“大于等于$100K”

  9. 添加插页地图。

我们将为阿拉斯加和夏威夷添加两个额外的插页地图。按照以下步骤:

  1. 单击Map自定义字段图标,在主地图的左上角绘制两个小一些的地图,上面是阿拉斯加,紧挨着下面一点是  夏威夷。

    两个新增的地图将重用主地图定义的样式,因此我们不必添加新的样式到插页地图的样式集合。

  2. 图层分布和主地图一致,我们为每一个插页地图的Layers集合添加两个图层:
    •  一个标点层,MarkerStyleExpr设置为“msTotalSales”,同时MarkerVisibleExpr设置为StateName = "Alaska"(在夏威夷的插页图中,设置为“Hawaii”),其他的属性和主地图保持一致。
    •  一个KML图层,全部的属性(包括RecordSource属性)从主地图的KML图层复制过来,最后将ItemVisibleExpr属性设置为kmlItemName="AK"(对于夏威夷,设置kmlItemName="HI")。特别需要提到的是,即使ItemStyleExpr计算出的样式名称引用自其他地图的样式集合,该样式依然能够正常工作。 
  3. 最后,为每一个插页地图添加一个图例,分别显示这两个州的名称。

    大功告成。现在可以运行报表,确保我们以上的设置能够正常工作。

 

 


产品网站:http://www.gcpowertools.com.cn  |  咨询热线:4006576008   |   ©2015 西安葡萄城