Reports for WinForms
マップのウォークスルー
C1Report デザイナの使い方 > レポート内のマップ > マップのウォークスルー

このウォークスルーでは、米国の州の注文合計を州別にまとめて表示するレポートにマップを追加します。マップを含まないレポートは非常に単純で、州ごとのすべての注文の合計をリストしているだけです。以下にその全体を示します。

注文 州名

16325.15 アラスカ

3490.02 カリフォルニア

115673.39 アイダホ

1947.24 モンタナ

52245.9 ニューメキシコ

30393.93 オレゴン

31001.65 ワシントン

12489.7 ワイオミング

マップをこのレポートに追加し、それぞれの州を、緑(注文のない州)から黄と赤の陰影(合計注文額で決定)までの色で塗りつぶします。さらに、各州は合計に比例する直径の円形マーク、およびこの合計を示すラベルを持ちます。最後に、アラスカとハワイを表示する2つの小さいインセット地図を追加します。

このウォークスルーでは次のファイルを使用することに注意してください。

以下の手順を実行します。

  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;

    レポートウィザードを使用し、OrderValueStateName フィールドを[詳細]セクションに追加します。レポートを実行し、上に示したデータを印刷することを確認します。

  2. メインマップを追加します。

    マップをレポートのヘッダーに追加します。

    • レポートデザイナで、ヘッダーの下端を下方向にドラッグして、マップ用のスペースを空けます。
    • マップカスタムフィールドアイコン(地球儀)をクリックし、ヘッダーにドラッグします。
    • マップのサイズを約 12870 x 7620 twips に設定し、必要に応じて調整します。
  3. マップのプロパティを調整します。

    マップのプロパティを次のように設定します(デフォルト以外のみを次に示します)。

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

    米国のマップを表示しているため、必要に応じて、座標を手動で設定する(特に、アラスカとハワイのインセット用に右側に十分なスペースを残す)ことに注意してください。

  4. ポイントマーカースタイルを追加します。

    MarkerStyles コレクションを開き、1つのスタイルを追加します。そのコントロールのプロパティを次のように設定します。

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

    このスタイルは、注文合計を示すサイズの円形マーカーを州上に描画するために使用されます。塗りつぶし色はこの場合に効果的な半透明であることに注意してください。また、マーカーのサイズが注文額(合計)の平方根に比例することにも注意してください。スタイル名(msTotalSales)はこのスタイルを参照するために使用されます。

    必要に応じて、他のプロパティ(フォント、ストローク、およびテキスト色)も設定できます。

  5. KML項目スタイルを追加します。

    注文合計に応じて、すべての州を6つのグループに分けます。

    • 注文が全くない州
    • 注文合計が最大1万ドルの州
    • 注文合計が1万ドル〜3万ドルの州
    • 注文合計が3万ドル〜5万ドルの州
    • 注文合計が5万ドル〜10 万ドルの州
    • 注文合計が 10 万ドルを超える州

    したがって、これらのグループのそれぞれに KML 項目スタイルを作成する必要があります。KmlItemStylesコレクションを開き、上記のグループに対応する名前を持つ6つのスタイル、およびマップ上の州を区別する 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どおり、1つの州の全注文の合計である現在の OrderValueに応じて、KML 項目スタイル名(上を参照)の1つに評価されます。前記の ItemFilterExprは、この式が KML ファイルから現在ロード中の州に対して評価されるようにします。

  7. 円形マーカーを追加します。

    マップの視覚的効果をさらに高めるには、州の合計注文に比例してサイズ変更して州上に配置されたた円形マーカーを含むポイントレイヤも追加します。それには、PointsLayerLayersコレクションに追加し、KML レイヤの上に移動して、マップがレンダリングされるときにポイントレイヤが KML レイヤの上に表示されるようにします。レイヤのプロパティを次のように設定します。

    MarkerStyleExpr: 「msTotalSales」(これは既にマップの MarkerStyles コレクションに追加したスタイルを使用します。比例的なサイズ変更はこのスタイルに含まれているため、ここでは他に何もする必要がありません)。

    Latitude: 緯度(レコードソースによって提供される空間データを使用します)。

    Longitude: 経度(レコードソースによって提供される空間データを使用します)。

  8. 凡例を追加します。

    タイトルを表す凡例(右上端)、および KML 項目スタイルへの色キー(右下)の2つの凡例をマップに追加します。

    • 凡例を追加するには、Legendsコレクションエディタを開きます。
    • タイトルを追加するには、項目を追加して、Captionを「州別の注文合計」に設定し、LegendAlignmentをデフォルトの TopRight値のままにします。他のプロパティを適当と思うように調整します。
    • 色キーを追加するには、凡例をもう1つ追加して、配置を BottomRightに設定し、その Itemsコレクションを開き、次の項目を追加します。

      • [Text]項目。テキスト「色キー」を含み、凡例のキャプションとなります。
      • 6[LayerStyle]項目。KML 項目スタイルのそれぞれに1つ追加します。項目ごとに、LayerStyleドロップダウンから、その項目が記述するスタイルを選択します。これにより、大部分の他のプロパティに選択されたスタイルからの値が自動的に入力されます。手動で設定する必要があるのは、項目のテキストだけです。「注文なし」から「3万ドル未満」、「1万ドル〜3万ドル」というように「10万ドル以上」までを、スタイルごとに適切に設定します。
  9. インセット地図を追加します。

    アラスカとハワイの2つのインセット地図を追加します。それには、次の手順を実行します。

    • [マップ]カスタムフィールドアイコンをクリックし、アラスカのメインマップの左上部分とハワイの左下部分に、2つの小さいマップを描画します。 

      インセット地図はどちらもメインマップで定義されたスタイルを再使用するため、スタイルをインセット地図のスタイルコレクションに追加する必要はありません。

    • レイヤはメインマップのレイヤを複製します。したがって、2つのレイヤを各インセット地図の Layers コレクションに追加します。

      • ポイントレイヤ。MarkerStyleExpr は「msTotalSales」に設定され、MarkerVisibleExpr は

        StateName = "Alaska"

        (ハワイインセットの場合は「Hawaii」)のように設定され、すべての他のプロパティはメインマップのポイントレイヤと同様です。

      • KMLレイヤ。すべてのプロパティ(RecordSource を含む)はメインマップの KML レイヤの対応するプロパティからコピーされますが、ItemVisibleExpr は

        kmlItemName="AK"

        (ハワイの場合は kmlItemName="HI")に設定されます。特に、ItemStyleExprは、評価されるスタイル名が別のマップのスタイルコレクション内のスタイルを参照する場合でも機能することに注意してください。

    • 最後に、州の名前を使用して、単一の固定テキストを持つ凡例を各インセット地図に追加します。

      これで完了です。では、レポートを実行して、正しく機能することを確認します。