はじめに
SalesforceにはGoogleマップを表示するlightning:mapコンポーネントが標準で用意されています。
lightning:mapコンポーネントを使うことで簡単に地図を表示することが可能ですが、できること/できないことがあります。
lightning:mapコンポーネントを使うことで簡単に地図を表示することが可能ですが、できること/できないことがあります。
そこで当ブログでは
- lightning:mapコンポーネント編
- Google Maps API編
の2回にわたって、Salesforceに地図を表示する方法を紹介します。
今回は、lightning:mapコンポーネントを使って、次のような地図を表示する画面を作成します。
サンプルソース
作成するソースコードは次の3つです。
- Component
- Component Controller
- Apex Class
Component
Componentでは、<lightning:map>タグで地図の属性を指定します。
<aura:component controller="LightningMapExampleController" implements="force:appHostable"> <aura:attribute name="mapMarkers" type="Object"/> <aura:attribute name="selectedMarkerValue" type="String" /> <aura:handler name="init" value="{! this }" action="{! c.init }"/> <div class="slds-box slds-theme--default"> <lightning:map mapMarkers="{! v.mapMarkers }" selectedMarkerValue="{!v.selectedMarkerValue}" markersTitle="account list" listView="auto" showFooter="false" onmarkerselect="{!c.handlerMarkerSelect}" /> </div> </aura:component>
LightningMapExample.cmp
<lightning:map>タグで使用できる属性は次の通りです。
属性 | 内容 |
---|---|
mapMarkers | プロットするマーカーの配列。 |
markersTitle | マップリストのタイトル。 |
listView | マップリストの表示:visible/非表示:hidden/自動:auto。 |
showFooter | フッター部の表示:true/非表示:false。 |
selectedMarkerValue | 選択しているマーカーの値。 |
onmarkerselect | マーカー選択時のアクション。 |
center | マップの中心位置。 |
zoomLevel | マップのズームレベル。デスクトップ:1~22、モバイル:1~20をサポート。 |
Component Controller
Compponent Controllerでは、マーカーの属性を指定します。
({ init: function (cmp, event, helper) { var action = cmp.get("c.getAccounts"); cmp.set('v.mapMarkers', [{location: {}}]); action.setCallback(this, function(response){ var accounts = response.getReturnValue(); var markers = []; for(var i = 0; i < accounts.length; i++){ var acc = accounts[i]; markers.push({ location: { Country : acc.BillingCountry, State : acc.BillingState, City: acc.BillingCity, Street: acc.BillingStreet }, icon : "standard:account", value: acc.Id, title: acc.Name, description: acc.Description }); } if(markers.length != 0){ cmp.set('v.mapMarkers', markers); } }); $A.enqueueAction(action); }, handlerMarkerSelect: function (cmp, event, helper) { console.log(event.getParam("selectedMarkerValue")); } });
LightningMapExampleController.js
init: functionでマーカー(mapMarkers)を設定する処理を行います。 サンプルソースでは、Apex Classから取得した取引先レコードのマーカーを作成しています。
※注:5行目のcmp.set('v.mapMarkers', [{location: {}}]);
によってマーカーの初期値を設定しています。この記述によって表示するマーカーがない場合に、地図が表示されなくなることを防ぎます。
handlerMarkerSelect: functionではマーカークリック時のアクションを定義します。
このサンプルでは、選択したマーカーの値をログ出力しています。
このサンプルでは、選択したマーカーの値をログ出力しています。
マーカー(mapMarkers)の設定で使用できる属性は次の通りです。
属性 | 内容 |
---|---|
icon | マップリストに表示するアイコン。 |
location | マーカーの位置情報。緯度経度(Latitude、Longitude)のセットまたは、住所(Country、PostalCode、Country、State、City、Street)のセットを指定する。Streetを指定する場合、Country、PostalCode、Country、State、Cityの1つ以上を合わせて指定する必要がある。 |
title | マーカークリック時に表示される吹き出しのタイトル。 |
description | マーカークリック時に表示される吹き出しの内容。 |
value | マーカーの値。マーカークリック時にlightning:mapのselectedMarkerValueに設定される。 |
※icon属性には、Lightning Design Systemのアイコンのみ使用可能
Apex Class
Apex Classではマーカーに表示する取引先10件の情報を取得します。
public class LightningMapExampleController { @AuraEnabled public static List<Account> getAccounts(){ return [SELECT Id, Name, BillingCountry, BillingState, BillingCity, BillingStreet, Description FROM Account WHERE BillingCity != NULL AND BillingStreet != NULL LIMIT 10]; } }
LightningMapExampleController.apex
試しにクエリのLIMITを11とした場合、取得データが11件でもマップに表示されるマーカーは10件です。これは、lightning:mapでは最大10件の住所しかジオコーディングされないからです。
ジオコーディングを行わない(locationを緯度経度で指定した)場合、マーカーは最大100件まで表示することができます。
ジオコーディングを行わない(locationを緯度経度で指定した)場合、マーカーは最大100件まで表示することができます。
※ジオコーディングの件数には、lightning:mapのcenter属性も含まれます。
例えば、マップの中心地点に住所を指定した場合、マーカーに住所を指定できるのは最大9個までとなります。
例えば、マップの中心地点に住所を指定した場合、マーカーに住所を指定できるのは最大9個までとなります。
作成結果
次のように地図が表示されていれば作成完了です。
lightning:mapコンポーネントを利用すると簡単に複数マーカーを立てた地図と、マーカーの一覧を表示する画面を作成することができます。
マーカーの一覧にはマーカー名と住所が記載されますが、住所は以下のように「町名・番地、市区郡、都道府県」の形式で表示されてしまいます。
これを「都道府県 市区郡 町名・番地」の形式で表示するためには、以下のように緯度経度と合わせて町名・番地を指定します。町名・番地には、住所に表示したい都道府県+市区郡+町名・番地を設定します。
※公式でサポートされている指定方法ではないため、使用する際はご注意ください。
※公式でサポートされている指定方法ではないため、使用する際はご注意ください。
location: { Latitude : acc.BillingLatitude, Longitude : acc.BillingLongitude, Street: acc.BillingState + acc.BillingCity + acc.BillingStreet },
緯度経度と町名・番地を指定する場合の例
緯度経度と町名・番地を指定すると、マーカーの位置は緯度経度が使用され、住所の名称は町名・番地に設定した文字が使用され以下のように表示されます。
おわりに
最後にlightning:mapコンポーネントでできること/できないことをまとめます。
できること
- 住所からマーカーを表示(最大10件)
- 緯度経度からマーカーを表示(最大100件)
- マーカーのリスト表示
- onmarkerselectのイベント処理
できないこと
- 100件を超えるマーカーの表示
- マーカーアイコンの変更
- onmarkerselect以外のイベント処理
次回は、lightning:mapコンポーネントでできないことの対応方法としてGoogleMapsAPIをSalesforceで使用する例を紹介したいと思います。
40 件