質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

3回答

1855閲覧

GoogleMapsAPI クラスタリング JSONで読み込む場合

chibiyuko_0124

総合スコア18

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

1クリップ

投稿2018/07/19 03:25

編集2018/07/19 03:27

前提・実現したいこと

google maps apiとクラアスタリング機能を使ってマップを表示させたいと思っています。
座標値などの情報はJSONファイルから出力したいのですが、表示されず苦戦しております。
ローカルでの配列だとうまくいきます。

発生している問題・エラーメッセージ

地図は表示されるのですがマーカーが表示されません。 Consoleでも赤字でのエラーはありません。

該当のソースコード

script type="text/javascript"> var map; var markers = []; var infowindow = new google.maps.InfoWindow(); var locations = [ [東京,35.681498, 139.767062], [神奈川,35.471219, 139.627371] ]; function initialize() { geocoder = new google.maps.Geocoder(); var center = new google.maps.LatLng(35.671752,139.764308); map = new google.maps.Map(document.getElementById('map'), { zoom: 12, center: center, mapTypeId: google.maps.MapTypeId.ROADMAP }); markMultiple(); } function markMultiple(){ var data = new Array(); $.getJSON('JSONファイル', function(data) { for( var i in data){ for( var j in data[i] ){ var latLng = new google.maps.LatLng(data[i]["map_latitude"], data[i]["map_longitude"]); var content = data[i]["name"] + ':' + data[i]["map_latitude"] + ',' + data[i]["map_longitude"]; markMap(latLng, content); } } }); // for (var i = 0; i < locations.length; i++) { // var loc = locations[i]; // var latLng = new google.maps.LatLng(loc[1],loc[2]); // var content = loc[0] + ":" + loc[1] + "," + loc[2]; // markMap(latLng, content); // } var markerCluster = new MarkerClusterer(map, markers); } function markMap(position, content){ var marker = new google.maps.Marker({ position: position, icon: 'img/map_icon_w.png' }); google.maps.event.addListener(marker, 'click', function() { infowindow.setContent(content); infowindow.open(map, marker); }); markers.push(marker); } google.maps.event.addDomListener(window, 'load', initialize); </script>

上記のコメントアウトしてあるfor文、var locations〜はローカル配列なのですが、こちらでは問題なく表示されます。

jsonファイルは下記のような構造になっています。

[ { "id": "1", "name": "東京", "map_latitude": 35.681498, "map_longitude": 139.767062 }, { "id": "2", "name": "神奈川", "map_latitude": 35.471219, "map_longitude": 139.627371 } ]

クラスタリング&JSONの組み合わせは検索をしてもなかなか出て来ず、教えていただけるとありがたいです。
どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

var markerCluster = new MarkerClusterer(map, markers);の位置を
jsonデータを受け取ってから実行されるように変えてみるといかがでしょうか?
おそらく今の書き方だとmarkersの中身は
new MarkerClusterer(map, markers);
の時点では空の配列だと思いますので。

function markMultiple(){ var data = new Array(); $.getJSON('JSONファイル', function(data) { for( var i in data){ for( var j in data[i] ){ var latLng = new google.maps.LatLng(data[i]["map_latitude"], data[i]["map_longitude"]); var content = data[i]["name"] + ':' + data[i]["map_latitude"] + ',' + data[i]["map_longitude"]; markMap(latLng, content); } } }); var markerCluster = new MarkerClusterer(map, markers); } // ↓以下に変更 function markMultiple(){ var data = new Array(); $.getJSON('JSONファイル', function(data) { for( var i in data){ for( var j in data[i] ){ var latLng = new google.maps.LatLng(data[i]["map_latitude"], data[i]["map_longitude"]); var content = data[i]["name"] + ':' + data[i]["map_latitude"] + ',' + data[i]["map_longitude"]; markMap(latLng, content); } } var markerCluster = new MarkerClusterer(map, markers); }); }

投稿2018/07/19 03:59

keisukeh

総合スコア657

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chibiyuko_0124

2018/07/19 04:34

keisukeh様 ありがとうございます。 var markerCluster = new MarkerClusterer(map, markers); の位置を変更したところ、マーカーは表示されました。 ですが、クラスタの挙動がおかしくなってしまいます。 マップを縮小すると、周辺のマーカーが統合され「3」や「5」といった数字のマーカーとなるかと思います。 現在、ふたつ統合されたマーカーには「172」、統合されていない単独のマーカーには「86」という数値が出てしまいます。 json側の問題でしょうか。 もしご存知でしたら、すみませんがご教授のほどよろしくお願いいたします。
guest

0

keisukeh様のご回答を元に解決しました。
以下の記述を変更することでマーカー数の異常値も解消し、無事表示されました。

function markMultiple(){ var data = new Array(); $.getJSON('JSONファイル', function(data) { for( var i in data){ for( var j in data[i] ){ var latLng = new google.maps.LatLng(data[i]["map_latitude"], data[i]["map_longitude"]); var content = data[i]["name"] + ':' + data[i]["map_latitude"] + ',' + data[i]["map_longitude"]; markMap(latLng, content); } } }); var markerCluster = new MarkerClusterer(map, markers); } //以下に変更 function markMultiple(){ $.getJSON('JSONファイル', function(data) { $.each(data, function() { var latLng = new google.maps.LatLng(data.map_latitude,data.map_longitude); var content = data.name + ':' + data.map_latitude + ',' + data.map_longitude; markMap(latLng, content); }); var markerCluster = new MarkerClusterer(map, markers); }); }

ありがとうございました。

投稿2018/07/19 06:00

chibiyuko_0124

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

keisukeh様のご回答を元に解決しました。
以下の記述を変更することでマーカー数の異常値も解消し、無事表示されました。

function markMultiple(){ var data = new Array(); $.getJSON('JSONファイル', function(data) { for( var i in data){ for( var j in data[i] ){ var latLng = new google.maps.LatLng(data[i]["map_latitude"], data[i]["map_longitude"]); var content = data[i]["name"] + ':' + data[i]["map_latitude"] + ',' + data[i]["map_longitude"]; markMap(latLng, content); } } }); var markerCluster = new MarkerClusterer(map, markers); } //以下に変更 function markMultiple(){ $.getJSON('JSONファイル', function(data) { $.each(data, function() { var latLng = new google.maps.LatLng(data.map_latitude,data.map_longitude); var content = data.name + ':' + data.map_latitude + ',' + data.map_longitude; markMap(latLng, content); }); var markerCluster = new MarkerClusterer(map, markers); }); }

ありがとうございました。

投稿2018/07/19 05:59

chibiyuko_0124

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問