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

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

ただいまの
回答率

88.59%

マップ上にマーカーが表示されない

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,414

benigmaet

score 18

エラーは出ないのですが、niigata.geojsonを読み込んでマーカーをマップ上に表示させたいのにできません。。。
現在地はすこしずれていますが、表示されます。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"
media="only screen and(max-width:599px)">
<title>geojson</title>

<link rel="stylesheet" href="style_map.css">


    <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDA7XoOL7zluNipt_doECxwBWphLZTY2Ac&callback=initMap" type="text/javascript" async defer></script>
    <!-- D3.jsを読み込む -->
    <script src="https://d3js.org/d3.v3.min.js" charset="utf-8"></script>



<!--********************************************************
google map
**************************************************************-->


<script>




    function initMap(){
    //   var markerCluster = new MarkerClusterer(map, markers,
                //  {imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m'});
    //}

google.maps.event.addDomListener(window, 'load', function() {

        //Google Maps初期化
      var map = new google.maps.Map(document.getElementById('map-canvas'), {
            center: {lat:37.953144299100003, lng: 139.14128375000001 },
            zoom: 12
       });
        //GeoJSONデータ読み込み
        d3.json('niigata.geojson', function(data) {
            //データレイヤーに追加
            map.data.addGeoJson(data);
            //イベント(マーカークリック時)を設定
            map.data.addListener('click', mouseClick);
        });



        function mouseClick(e) {
            //features->propertiesのaddressデータをクリック時に表示する
            alert(e.feature.getProperty('address'));
        }
});
    //---------------------------------------------------------------------------------------------------

      // 現在地取得処理
      //function initMap() {
        // Geolocation APIに対応している
        if (navigator.geolocation) {

          // 現在地を取得
          navigator.geolocation.getCurrentPosition(
            // 取得成功した場合
            function(position) {
              // 緯度・経度を変数に格納
              var mapLatLng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);

              // マップオプションを変数に格納
              var mapOptions = {
                zoom : 15,          // 拡大倍率
                center : mapLatLng  // 緯度・経度

              };
              // マップオブジェクト作成
               var map = new google.maps.Map(
                document.getElementById("map-canvas"), // マップを表示する要素
                mapOptions         // マップオプション
              );
              // マップにマーカーを表示する
              var marker = new google.maps.Marker({
                map : map,             // 対象の地図オブジェクト
                position : mapLatLng,   // 緯度・経度
                icon: {
                    fillColor: "#4169e1",                //塗り潰し色
                      fillOpacity: 0.8,                    //塗り潰し透過率
                        path: google.maps.SymbolPath.CIRCLE, //円を指定
                          scale: 10,                           //円のサイズ
                            strokeColor: "#4169e1",              //枠の色
                              strokeWeight: 1.0                    //枠の透過率
    }
              });
            },
            // 取得失敗した場合
            function(error) {
              // エラーメッセージを表示
              switch(error.code) {
                case 1: // PERMISSION_DENIED
                  alert("位置情報の利用が許可されていません");
                  break;
                case 2: // POSITION_UNAVAILABLE
                  alert("現在位置が取得できませんでした");
                  break;
                case 3: // TIMEOUT
                  alert("タイムアウトになりました");
                  break;
                default:
                  alert("その他のエラー(エラーコード:"+error.code+")");
                  break;
              }
            }
          );
        // Geolocation APIに対応していない
        } else {
          alert("この端末では位置情報が取得できません");
        }
      }

    </script>



  </head>
  <body>
    <div id="map-canvas"></div>
  </body>
</html>

これはniigata.geojsonです

{
"type": "FeatureCollection",
"name": "niigata",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:EPSG::4612" } },
"features": [
{ "type": "Feature", "properties": { "P20_001": "15101", "P20_002": "あかしあ公園", "P20_003": "新潟県新潟市北区松浜3丁目19番地8", "P20_004": "一時避難場所", "P20_005": 1700, "P20_006": 3401, "P20_007": 0, "P20_008": 0, "P20_009": 0, "P20_010": 0, "P20_011": 0, "P20_012": 1, "レベル": 1, "備考": null, "緯度": 37.953144299100003, "経度": 139.14128375000001, "NO": "1" }, "geometry": { "type": "Point", "coordinates": [ 139.141283750000014, 37.953144299100003 ] } },
{ "type": "Feature", "properties": { "P20_001": "15101", "P20_002": "おやま公園", "P20_003": "新潟県新潟市北区木崎837番地30", "P20_004": "一時避難場所", "P20_005": 2146, "P20_006": 4292, "P20_007": 0, "P20_008": 0, "P20_009": 0, "P20_010": 0, "P20_011": 0, "P20_012": 1, "レベル": 1, "備考": null, "緯度": 37.934128039100003, "経度": 139.18262866000001, "NO": "2" }, "geometry": { "type": "Point", "coordinates": [ 139.18262866, 37.934128039100003 ] } },
{ "type": "Feature", "properties": { "P20_001": "15101", "P20_002": "かやま保育園", "P20_003": "新潟県新潟市北区嘉山1-2-41", "P20_004": "避難所", "P20_005": 276, "P20_006": 553, "P20_007": 1, "P20_008": 0, "P20_009": 0, "P20_010": 0, "P20_011": 0, "P20_012": 0, "レベル": 1, "備考": null, "緯度": 37.912491, "経度": 139.21868, "NO": "3" }, "geometry": { "type": "Point", "coordinates": [ 139.21868, 37.912491 ] } },
{ "type": "Feature", "properties": { "P20_001": "15101", "P20_002": "さくら公園", "P20_003": "新潟県新潟市北区白新町4丁目54番1号", "P20_004": "一時避難場所", "P20_005": 2120, "P20_006": 4240, "P20_007": 0, "P20_008": 0, "P20_009": 0, "P20_010": 0, "P20_011": 0, "P20_012": 1, "レベル": 1, "備考": null, "緯度": 37.914792539099999, "経度": 139.21185556, "NO": "4" }, "geometry": { "type": "Point", "coordinates": [ 139.21185556, 37.914792539099999 ] } },
{ "type": "Feature", "properties": { "P20_001": "15101", "P20_002": "しらかば公園", "P20_003": "新潟県新潟市北区朝日町2丁目14番1号", "P20_004": "一時避難場所", "P20_005": 5037, "P20_006": 10075, "P20_007": 0, "P20_008": 0, "P20_009": 0, "P20_010": 0, "P20_011": 0, "P20_012": 1, "レベル": 1, "備考": null, "緯度": 37.9198199991, "経度": 139.22597, "NO": "5" }, "geometry": { "type": "Point", "coordinates": [ 139.22597, 37.9198199991 ] } },
{ "type": "Feature", "properties": { "P20_001": "15101", "P20_002": "すみれ公園", "P20_003": "新潟県新潟市北区石動1丁目10番3号", "P20_004": "一時避難場所", "P20_005": 2109, "P20_006": 4219, "P20_007": 0, "P20_008": 0, "P20_009": 0, "P20_010": 0, "P20_011": 0, "P20_012": 1, "レベル": 1, "備考": null, "緯度": 37.9219144391, "経度": 139.21524719000001, "NO": "6" }, "geometry": { "type": "Point", "coordinates": [ 139.215247190000014, 37.9219144391 ] } }
]
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Lhankor_Mhy

    2018/11/16 09:34

    googleマップが2回作成されているのが気になります。ひとつにまとめてはいかがですか?

    キャンセル

  • benigmaet

    2018/11/19 13:55

    見づらくてすみません。多分二回目のgoogleマップの記述はコメントになっていると思います

    キャンセル

  • Lhankor_Mhy

    2018/11/19 14:05

    なっていないと思うのですが…… javascriptのコメント // はその行だけをコメントアウトします。

    キャンセル

  • benigmaet

    2018/11/19 15:53

    ごめんなさい。先んじて勘違いしてました。回答ありがとうございます

    キャンセル

回答 1

checkベストアンサー

+2

initMap関数内で、Googleマップのインスタンスを作成した後、

        //Google Maps初期化
      var map = new google.maps.Map(document.getElementById('map-canvas'), {
            center: {lat:37.953144299100003, lng: 139.14128375000001 },
            zoom: 12
       });


getCurrentPosition関数のコールバック内で上書きしているのが原因だと思います。

              // マップオブジェクト作成
               var map = new google.maps.Map(
                document.getElementById("map-canvas"), // マップを表示する要素
                mapOptions         // マップオプション
              );


 
解決方法は、new google.maps.Mapを1回にすることです。具体的には、getCurrentPosition関数のコールバック内でJSONを読み込むのがいいのではないかと。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/19 17:10

    ありがとうございました!解決できました。

    キャンセル

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

  • ただいまの回答率 88.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る