ガイドv3.2 API Referencev3.1 API Reference
ガイド

マーカーを追加する

 HERE Maps API for JavaScript version 3.2

マッピングアプリで最も一般的なユースケースの1つが、マップに施設情報 (POI) を表示することです。HERE Maps API for Javascriptでは、POIをマーカーとして表せるため、実装プロセスが簡素化されます。

マーカータイプ

APIには、次のマーカータイプがあります。

マーカータイプクラス説明
マーカーH.map.Marker静止画像をアイコンとして使用する標準マーカーであり、マップに多数のマーカーをすばやく効率的に追加できます。
DOMマーカーH.map.DomMarkerHTMLとSVGの両方のコンテンツのレンダリングをサポートし、動的な更新が可能な場合もあるマーカーです。これらのマーカーは通常、個別に表示する場合や小さなグループで表示する場合に適しています。

マーカーの仕組み

どちらのタイプのマーカーも、緯度と経度で定義される地理的ポイントと、地図上の場所を特定するために使用される視覚的な表現 (通常はアイコン) で構成されます。マーカーアイコンは画面空間でレンダリングされるため、ズームレベルに関係なくサイズは一定です。

マーカー (Marker) およびDOMマーカー (DomMarker) には異なるアイコンタイプが必要です。MarkerオブジェクトはIcon (H.map.Icon) のインスタンスを受け入れ、DomMarkerはDomIcon (H.map.DomIcon) のインスタンスを必要とします。この分離により、複数のマーカーオブジェクト間でアイコンを再利用できるようになります。

マーカーとDOMマーカーは個別のステップでレンダリングされます。マーカーはマップシーンに統合され、マップ上にオーバーレイされたDOMマーカーの背後に表示されます。

次のセクションでは、さまざまなマーカータイプをマップに組み込む方法について説明します。

📘

次のセクションでは、「HERE Maps API for Javascriptの使用を開始する」で説明したベースマップを基盤として、コードを追加する方法を説明します。

静的SVGアイコンのあるマーカーを追加する

次のコードは、SVGアイコンを使用してマーカーを作成する方法を示しています。

// Define a variable holding SVG mark-up that defines an icon image:
var svgMarkup = '<svg width="24" height="24" ' +
    'xmlns="http://www.w3.org/2000/svg">' +
    '<rect stroke="white" fill="#1b468d" x="1" y="1" width="22" ' +
    'height="22" /><text x="12" y="18" font-size="12pt" ' +
    'font-family="Arial" font-weight="bold" text-anchor="middle" ' +
    'fill="white">H</text></svg>';

// Create an icon, an object holding the latitude and longitude, and a marker:
var icon = new H.map.Icon(svgMarkup),
    coords = {lat: 52.53075, lng: 13.3851},
    marker = new H.map.Marker(coords, {icon: icon});

// Add the marker to the map and center the map at the location specified by the marker, with a zoom level set to 17:
map.addObject(marker);
map.setCenter(coords);
map.setZoom(17)
📘

次の例に示すように、追加の高度 (alt) の値をメートル単位で指定することで、マーカーに高さを持たせることができます。

coords = {lat: 52.53075, lng: 13.3851, alt: 50}

実行すると、コードは次の出力を生成します。

  1. SVGアイコンの文字列表現。
  2. 位置の地理座標と標準マーカーを含むオブジェクト。この場合は、青い背景に白い文字「H」が描かれた長方形のアイコンの形式です。

結果として得られるマップは、以下の画像のようにマーカーの場所が中心となるように表示されます。

📘

パフォーマンスを向上させるには、アイコンをマーカー間で再利用します。

結果として得られるマップは、以下の画像のようにマーカーの場所が中心となるように描画されます。

SVGマーカーを追加後のマップ
📘

アイコンの最大サイズとアンカーオフセットは256ピクセルです。サイズの大きいアイコンに対応するには、それに応じてマップの余白を大きくします。

静止画像を使用したマーカーを追加する

以下のコードスニペットは、画像のURLからアイコンとマーカーをインスタンス化する方法を示しています。

// Create a marker icon by specifying either the path to an image directory or the URL of the image:
var icon = new H.map.Icon('graphics/markerPin.png');

// Create a marker using the previously instantiated icon:
var marker = new H.map.Marker({ lat: 52.5, lng: 13.4 }, { icon: icon });

// Add the marker to the map and optionally set the zoom:
map.addObject(marker);
map.setZoom(16)

実行すると、コードは以下を生成します。

  1. ビットマップのURL (PNG画像) を使用したアイコン
  2. 指定されたビットマップで初期化された標準マーカー

以下の画像では、ビットマップアイコンを使用したマーカーの場所を中心にしてマップが配置されています。

ビットマップマーカーを使用したマップ

この例では、カスタム画像アイコンを使用してマーカーを作成するための基本的な設定を示します。アイコンとマーカーには追加のカスタマイズオプションが用意されていますが、必要に応じてこれらのパラメーターをコンストラクタに渡すこともできます。たとえば、画像アイコンのヒットエリアとアンカーをカスタマイズできます。使用可能なオプションとその使用方法の詳細については、「APIリファレンス」のH.map.Iconページを参照してください。

📘

マーカーのiconプロパティはオプションのパラメーターです。デフォルトでは、APIには、カスタムアイコンが割り当てられていないマーカーの標準アイコンが用意されています。

HTMLまたはSVGコンテンツを含むアニメーションマーカーを追加する

画像マーカーは、静的なグラフィカルコンテンツを持つマップで、施設情報を強調するのに効果的な方法です。特定のユースケースでは、事前にレンダリングされた画像ではなく、双方向的またはアニメーション化されたHTMLコンテンツ (アニメーションGIF、アニメーションSVG、ホバー効果など) をマーカーに提供することが望ましいです。Maps API for JavaScriptは、このようなシナリオに対してDomMarkerクラスを提供します。

以下の例は、DomMarkerを使用してアニメーション化されたSVGコンテンツによるマーカーを作成する方法を示しています。この場合、アニメーション化されたマーカーのアイコンはボールのバウンスです。

// Define a variable holding SVG mark-up that defines an animated icon image:
var animatedSvg =
    '<svg version="1.1" xmlns="http://www.w3.org/2000/svg" x="0px" ' + 
    'y="0px" style="margin:-112px 0 0 -32px" width="136px"' + 
    'height="150px" viewBox="0 0 136 150"><ellipse fill="#000" ' +
    'cx="32" cy="128" rx="36" ry="4"><animate attributeName="cx" ' + 
    'from="32" to="32" begin="0s" dur="1.5s" values="96;32;96" ' + 
    'keySplines=".6 .1 .8 .1; .1 .8 .1 1" keyTimes="0;0.4;1"' + 
    'calcMode="spline" repeatCount="indefinite"/>' +    
    '<animate attributeName="rx" from="36" to="36" begin="0s"' +
    'dur="1.5s" values="36;10;36" keySplines=".6 .0 .8 .0; .0 .8 .0 1"' + 
    'keyTimes="0;0.4;1" calcMode="spline" repeatCount="indefinite"/>' +
    '<animate attributeName="opacity" from=".2" to=".2"  begin="0s" ' +
    ' dur="1.5s" values=".1;.7;.1" keySplines=" .6.0 .8 .0; .0 .8 .0 1" ' +
    'keyTimes=" 0;0.4;1" calcMode="spline" ' +
    'repeatCount="indefinite"/></ellipse><ellipse fill="#1b468d" ' +
    'cx="26" cy="20" rx="16" ry="12"><animate attributeName="cy" ' +
    'from="20" to="20" begin="0s" dur="1.5s" values="20;112;20" ' +
    'keySplines=".6 .1 .8 .1; .1 .8 .1 1" keyTimes=" 0;0.4;1" ' +
    'calcMode="spline" repeatCount="indefinite"/> ' +
    '<animate attributeName="ry" from="16" to="16" begin="0s" ' + 
    'dur="1.5s" values="16;12;16" keySplines=".6 .0 .8 .0; .0 .8 .0 1" ' +
    'keyTimes="0;0.4;1" calcMode="spline" ' +
    'repeatCount="indefinite"/></ellipse></svg>';

// Create an icon object, an object with geographic coordinates and a marker:
var icon = new H.map.DomIcon(animatedSvg),
    coords = {lat: -22.8906, lng: -43.2283},
    marker = new H.map.DomMarker(coords, {icon: icon});

// Set map center and zoom, add the marker to the map:
map.setCenter(coords);
map.setZoom(18);
map.addObject(marker);

実行すると、コードは以下を生成します。

  1. アニメーションSVG画像の定義を保存する変数。
  2. SVG画像を使用して初期化されたアイコン。
  3. その場所の地理座標が含まれているオブジェクト。
  4. 標準のアニメーションマーカー

上記の例の最後のコード行は、マップにマーカーを追加し、地理座標を保持するオブジェクトを使用してマップの中央に配置します。

以下の画像は、アニメーションアイコンを使用したマーカーが表示されているマップです。 アニメーションマーカーを使用したマップ

カスタムアンカーポイントを使用してマーカーを追加する

マップマーカーのカスタムアンカーポイントの作成は、さまざまなマッピングアプリケーションでマップマーカーを正確に配置して適切に視覚化するのに不可欠です。

たとえば、ピン アイコンを使用している場合は、ピンの下端かその少し下にアンカー ポイントを設定することもできます。この調整により、マーカーがマップ上の施設情報に正確に位置合わせされ、アイコン自体がその位置を隠してしまうのを防ぐことができます。

次の例は、SVG 形式でアンカー ポイントをピン マーカーの下端に移動する方法を示しています。

var svg = '<svg width="48" height="48" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">' +
    '<path fill="#2D6AC4" d="M12 2C8.13 2 5 5.13 5 9c0 4.97 7 13 7 13s7-8.03 7-13c0-3.87-3.13-7-7-7z"/>' +
    '<circle cx="12" cy="9" r="4" fill="#FFFFFF"/>' +
    '</svg>';

var coords = {
  lat: 52.51229,
  lng: 13.40048
}
var icon = new H.map.Icon(svg, {
  anchor: {
    x: 24,
    y: 58
  } // x: center horizontally, y: slightly below the bottom tip of the marker 
});

var marker = new H.map.Marker(coords, {
  icon: icon
});

// Add the marker to the map and the set the zoom:
map.setCenter(coords);
map.setZoom(17)
map.addObject(marker);

次の図は、前のマーカー例を HERE Maps API for JavaScript がどのようにレンダリングするかを示しています。 カスタム アンカー ポイントを使用したマーカー パフォーマンスを向上させる方法については、「アイコンを再利用する」を参照してください。

anchor およびその他のアイコン プロパティの詳細については、「API リファレンス」の H.map.Icon のドキュメントを参照してください。