マップに多角形レイヤーを追加する

この記事では、多角形レイヤーを使用してマップ上に Polygon および MultiPolygon フィーチャー ジオメトリの領域をレンダリングする方法を示します。 Azure Maps の Web SDK では、拡張 GeoJSON スキーマで定義されている円のジオメトリの作成もサポートしています。 これらの円は、マップ上にレンダリングされるときに多角形に変換されます。 atlas.Shape クラスでラップされている場合は、すべてのフィーチャー ジオメトリを簡単に更新できます。

多角形レイヤーを使用する

多角形レイヤーがデータ ソースに接続されていると、マップに読み込まれるときに、Polygon および MultiPolygon フィーチャーを含む領域がレンダリングされます。 多角形を作成し、データ ソースに追加し、PolygonLayer クラスを使用して多角形レイヤーでレンダリングします。

次のサンプル コードは、ニューヨーク市のセントラル パークを赤い多角形で覆う多角形レイヤーの作成を示しています。

 
function InitMap()
{
  var map = new atlas.Map('myMap', {
    center: [-73.97, 40.78],
    zoom: 11,
    view: "Auto",
    
    //Add authentication details for connecting to Azure Maps.
    authOptions: {
      authType: 'subscriptionKey',
      subscriptionKey: '{Your-Azure-Maps-Subscription-key}'
    }
  });

  //Wait until the map resources are ready.
  map.events.add('ready', function () {

    /*Create a data source and add it to the map*/
    var dataSource = new atlas.source.DataSource();
    map.sources.add(dataSource);

    /*Create a rectangle*/
    dataSource.add(new atlas.Shape(new atlas.data.Feature(
    new atlas.data.Polygon([[
      [-73.98235, 40.76799],
      [-73.95785, 40.80044],
      [-73.94928, 40.7968],
      [-73.97317, 40.76437],
      [-73.98235, 40.76799]
    ]])
    )));

    /*Create and add a polygon layer to render the polygon to the map*/
    map.layers.add(new atlas.layer.PolygonLayer(dataSource, null,{
    fillColor: "red",
    fillOpacity: 0.7
    }), 'labels')
  });
}

塗りつぶしの色を赤に設定し、塗りつぶしの不透明度を 0.7 に設定して、セントラル パークを覆うポリゴン レイヤーを示すニューヨーク市の地図のスクリーンショット。

多角形と線レイヤーを同時に使用する

線レイヤーを使用して、多角形のアウトラインをレンダリングします。 次のコード サンプルでは、前の例のように多角形がレンダリングされますが、今度は線レイヤーが追加されます。 この線レイヤーは、データ ソースに接続される 2 番目のレイヤーです。

function InitMap()
{
  var map = new atlas.Map('myMap', {
    center: [-73.97, 40.78],
    zoom: 11,
    view: "Auto",
    
    //Add authentication details for connecting to Azure Maps.
    authOptions: {
      // Get an Azure Maps key at https://azuremaps.com/.
      authType: 'subscriptionKey',
      subscriptionKey: '{subscription key}'
    }
  });

  //Wait until the map resources are ready.
  map.events.add('ready', function () {

    /*Create a data source and add it to the map*/
    var dataSource = new atlas.source.DataSource();
    map.sources.add(dataSource);

    /*Create a rectangle*/
    dataSource.add(new atlas.data.Polygon([[
    [-73.98235, 40.76799],
    [-73.95785, 40.80045],
    [-73.94928, 40.7968],
    [-73.97317, 40.76437],
    [-73.98235, 40.76799]
    ]])
          );

    //Create a polygon layer to render the filled in area of the polygon.
    var polygonLayer = new atlas.layer.PolygonLayer(dataSource, 'myPolygonLayer', {
    fillColor: 'rgba(0, 200, 200, 0.5)'
    });

    //Create a line layer for greater control of rendering the outline of the polygon.
    var lineLayer = new atlas.layer.LineLayer(dataSource, 'myLineLayer', {
    strokeColor: 'red',
    strokeWidth: 2
    });

    /*Create and add a polygon layer to render the polygon to the map*/
    map.layers.add([polygonLayer, lineLayer])
  });
}

セントラル パーク全体を覆い、赤い線で囲まれたほぼ透明なポリゴン レイヤーを示すニューヨーク市の地図のスクリーンショット。

多角形をパターンで塗りつぶす

多角形を色で塗りつぶすだけでなく、イメージのパターンを使用して多角形を塗りつぶすこともできます。 イメージのパターンをマップ イメージのスプライト リソースに読み込んでから、このイメージを多角形レイヤーの fillPattern プロパティで参照します。

イメージ テンプレートを多角形レイヤーの塗りつぶしパターンとして使用する方法を示す完全に機能するサンプルについては、「Azure Maps サンプル」の「組み込みのアイコン テンプレートを使用して多角形を塗りつぶす」を参照してください。 このサンプルのソース コードについては、「組み込みのアイコン テンプレートを使用した多角形の塗りつぶしのソース コード」を参照してください。

地図の中心に赤い点が三角形を形成している世界地図のスクリーンショット。

ヒント

Azure Maps Web SDK には、塗りつぶしパターンとして使用できるカスタマイズ可能なイメージ テンプレートがいくつか用意されています。 詳細については、画像テンプレートの使用方法のドキュメントを参照してください。

ポリゴン レイヤーをカスタマイズする

Polygon レイヤーにはごくわずかのスタイル オプションしかありません。 試してみるには、「Azure Maps サンプル」で「多角形レイヤー オプション」のサンプル マップを参照してください。このサンプルのソース コードについては、ポリゴン レイヤー オプションのソース コードを参照してください。

[多角形レイヤー オプション] ツールのスクリーンショット。

マップに円を追加する

Azure Maps は、円の定義を提供する、GeoJSON スキーマの拡張バージョンを使用しています。 Point フィーチャーを作成すると、マップ上に円がレンダリングされます。 この Point には、値が "Circle"subType プロパティと、メートル単位で半径を表す数値が指定された radius プロパティがあります。

{
    "type": "Feature",
    "geometry": {
        "type": "Point",
        "coordinates": [-122.126986, 47.639754]
    },
    "properties": {
        "subType": "Circle",
        "radius": 100
    }
}  

Azure Maps Web SDK では、このような Point フィーチャーが Polygon フィーチャーに変換されます。 次に、これらのフィーチャーは、次のコード サンプルで示すように、多角形レイヤーと線レイヤーを使用してマップ上にレンダリングされます。

function InitMap()
{
  var map = new atlas.Map('myMap', {
    center: [-73.985708, 40.75773],
    zoom: 12,
    view: "Auto",
    
    //Add authentication details for connecting to Azure Maps.
    authOptions: {
      // Get an Azure Maps key at https://azuremaps.com/.
      authType: 'subscriptionKey',
      subscriptionKey: '{Your-Azure-Maps-Subscription-key}'
    }      
  });

  //Wait until the map resources are ready.
  map.events.add('ready', function () {

    /*Create a data source and add it to the map*/
    var dataSource = new atlas.source.DataSource();
    map.sources.add(dataSource);

    //Create a circle
    dataSource.add(new atlas.data.Feature(new atlas.data.Point([-73.985708, 40.75773]), 
    {
      subType: "Circle",
      radius: 1000
    }));

    // Create a polygon layer to render the filled in area
    // of the circle polygon, and add it to the map.
    map.layers.add(new atlas.layer.PolygonLayer   (dataSource, null, {
      fillColor: 'rgba(0, 200, 200, 0.8)'
    }));
  });
}

ニューヨーク市の部分的に透明な緑色の円を示す地図のスクリーンショット。 これは、地図に円を追加する方法を示しています。

ジオメトリを簡単に更新する

Shape クラスは Geometry または Feature をラップしているため、これらのフィーチャーの更新や管理が簡単です。 図形変数をインスタンス化するには、図形コンストラクターにジオメトリまたはプロパティのセットを渡します。

//Creating a shape by passing in a geometry and a object containing properties.
var shape1 = new atlas.Shape(new atlas.data.Point[0,0], { myProperty: 1 });

//Creating a shape using a feature.
var shape2 = new atlas.Shape(new atlas.data.Feature(new atlas.data.Point[0,0], { myProperty: 1 });

[ジオメトリを簡単に更新する] サンプルでは、円 GeoJSON オブジェクトを図形クラスでラップする方法を示しています。 図形で半径の値が変化すると、マップ上で自動的に円がレンダリングされます。 このサンプルのソース コードについては、「ジオメトリを更新しやすくするソース コード」を参照してください。

「Circle Radius」というタイトルのスライダー バーがあり、バーを右または左にスライドさせると、半径の値が変化し、地図上の円のサイズが自動的に調整されるニューヨーク市の赤い円を示す地図のスクリーンショット。

次のステップ

この記事で使われているクラスとメソッドの詳細については、次を参照してください。

マップに追加するコード例の詳細については、次の記事を参照してください。

その他のリソース: