Page tree
Skip to end of metadata
Go to start of metadata

一个地图可以具有若干相关联的图例,并在地图的区域范围内进行绘制。为了方便于将图例放置在地图的区域之外,图例可以关联到报表中的任意地图字段,因此您可以添加一个仅包含一个图例的地图,用于描述另一个地图的信息。
图例包含在Map字段的Legends集合中。向该集合中添加一个项目可以添加一个图例。图例在地图区域的位置由
LegendAlignment属性决定。Orientation属性决定图例中的项目垂直(默认值)或者水平放置。其他的几个属性可用来调整图例的外观。
图例中的项目由Items集合表示。如果图例的Automatic属性设置为True,该集合可以从当前地图中来自于非KML图层之外的数据自动产生。在这种情况下,Items集合无法被单独编辑。否则,必须手动添加图例项。
支持以下类型的图例项:
LegendLayerStyleItem:表示一个图层样式。设计器允许选择一个现有的图层或者样式做为图例项表示的目标。
按照选择图层样式的不同,图例项可以表示一个标记点(标点图层/样式),一条线(画线图层/样式)或者一个颜色块(KML项目样式)。
LegendColorSwatchItem:表示一个任意的颜色块样本。
LegendTextItem:代表任意的文本。

地图使用演练


在本演练中,您将看到如何向报表添加一个地图,用来显示美国各州的订单总额,按照各州数据进行汇总。原本不带地图的报表非常简洁,仅列出每一个州的订单总额。以下是全部的数据:
订单总额州名称
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
您将向该报表添加一个地图,并使用颜色范围从绿色(表示该州没有订单)到黄色和红色(取决于订单总额的具体数量)填充每一个州的区域。此外,每一个州还具有一个直径和总金额按比例相关的圆形标记,同时还有一个标签表示总金额。最后您还将添加两个小的插页地图,用来表示阿拉斯加和夏威夷。注意,该演练将使用以下文件:
C1NWindMaps.mdb: 添加了空间坐标以及其他相关数据的C1NWind 数据库; us_states_abbr.kmz: 一个包含了美国各州边界以及州名缩写的压缩KML文件。
完成以下步骤:
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字段,运行报表,确保其正确的显示了以上数据。


  1. 添加主地图

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

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

AutoCenter: false
AutoZoom: false
CenterLatitude: 38
CenterLongitude: -103
ShowScale: false
TileSource: None ZoomLevel: 3
请注意因为我们要显示美国的地图,所以将按照需要手动设置坐标轴(因为我们要在右侧留出足够的空间以显示阿拉斯加和夏威夷两个插页地图)。

  1. 添加点标记样式。

打开MarkerStyles集合,添加一个样式。其属性设置如下:
CaptionExpr: StateName & ":" & vbCr & "$" & OrderValue
FillColor: 120, 255, 128, 0
Name: msTotalSales
SizeExpr: sqr(OrderValue / 100)
这个样式用来在每一个州的区域绘制一个圆形的标记,其尺寸大小表示订单总额。请注意填充的颜色为半透明,以便在本示例中达到更好的效果。同时请注意标记的尺寸和订单总值的平方根成正比。该样式的名称(msTotalSales)将被用来引用该样式。您同时也可以根据自己的喜好设置其他一些属性(字体、笔画以及文本颜色等等)。

  1. 添加添加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文件加载。


  1. 添加圆形标记。

为了使地图数据更加直观,您也可以在标点层为每个州添加一些圆形标记,标记的大小和州的订单总金额成正比。您可以通过以下步骤做到这一点,首先向Layers集合添加一个PointsLayer,并移动到KML层的上方,使得在地图呈现时,该图层显示在KML图层的上方。设置该图层的属性如下所示:
MarkerStyleExpr: "msTotalSales"(这将使用已经添加到地图的MarkerStyles集合的样式;按照比例确定尺寸的逻辑已经内建
在该样式中,在这里我们不需要做其他额外的工作)
Latitude: Latitude(使用记录源提供的空间坐标数据);
Longitude: Longitude(使用记录源提供的空间坐标数据)。

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

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

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

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

    1. 图层分布和主地图一致,我们为每一个插页地图的Layers集合添加两个图层:

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

    1. 最后,为每一个插页地图添加一个图例,分别显示这两个州的名称。大功告成。现在可以运行报表,确保我们以上的设置能够正常工作。
  • No labels