2017-08-23 20 views
0

マップ上のマーカーのクリックに情報ウィンドウを追加します。私はgeojsonファイルからマーカマップを作成するためにgoogleのサンプルコード(下記)を使用しました。情報ウィンドウに同じgeojsonファイルからテキストを描画したいと思います。私はこれを生成するためにさまざまなサンプルコードを試しましたが、私はそれを動作させることができません(プログラミングではバックグラウンドがゼロです)。これは可能ですか?ここでGoogleマップgeojsonファイルからのクリック時のインフォ画面の追加

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="initial-scale=1.0" /> 
    <title>Drag and Drop GeoJSON</title> 
    <style> 
     html { height: 100% } 
     body { height: 100%; margin: 0; padding: 0; overflow: hidden; } 
     #map { height: 100% } 
     #drop-container { 
     display: none; 
     height: 100%; 
     width: 100%; 
     position: absolute; 
     z-index: 1; 
     top: 0px; 
     left: 0px; 
     padding: 20px; 
     background-color: rgba(100, 100, 100, 0.5); 
     } 
     #drop-silhouette { 
     color: white; 
     border: white dashed 8px; 
     height: calc(100% - 56px); 
     width: calc(100% - 56px); 
     background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAAAXNSR0IArs4c6QAAAAZiS0dEAGQAZABkkPCsTwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB90LHAIvICWdsKwAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAACdklEQVR42u3csU7icBzA8Xp3GBMSeRITH8JHMY7cRMvmVmXoE9TAcJubhjD4ApoiopgqDMWAKAgIcSAiCfxuwhwROVJbkPD9rP23ob8vpZCQKgoAAAAAAAAAAPDYyiK/eNM05bNtr6+vSjgcXiHxDMkE1WpVFvGcfpCVICAIQUAQgoAgBAFBCAKCgCAEAUEIAoIQBAQhCAgCghAEBCEICEIQEIQgIAgIQhAQhCAgCEFAEIKAICAIQUAQgoAgBAFBCDIzhmFINBo9/K6D0XVddnd3ZaneDY7jSCqVcn3SfjyeKRKJbJ2dnYllWbKUl2i5XJaXlxdJJBIy7yDHx8fy9vYm6XR6OWMM3d/fi4hIqVSSWCwmsw5ycHAgrVZLRETOz8+XO8ZQpVJ5H2Y6nRZN0/b9DqLruhSLxfd9MpkMMT6L0uv1JJlMih9BhveJwWDwvv7i4oIY4zw8PIwMtt1uSzweF6+CHB0dSbfbHVmbzWaJMcnj4+OHAd/d3cne3p64DWKapjw/P39Yd3l5SYxpVKvVsYO2LEtUVd2ZNoiu6+I4ztg1V1dXxPAiSq/Xk5OTk0k9pNVqyenp6ch94l+5XI4YbtRqNfHa9fX1t43xcwGa/Nnc3PwdDAY9OZht28rGxgZPvP6KSCSy9fT09OUrw7ZtPqa8jFKv113HuLm5IYbXVFXdcRPl9vaWGH5GaTQaU8fI5/PE8JumafvNZvO/MQqFAjFmJRqNHk6Ksqgx5vr1zzAM2d7edr3/6uqqsra2NnZbp9NR+v2+62OHQqG5zObXPIMEAgFlfX3dl2N79btl1viTA0FAEIKAIAQBAAAAAAAAsMz+Ai1bUgo6ebm8AAAAAElFTkSuQmCC'); 
     background-repeat: no-repeat; 
     background-position: center; 
     } 
    </style> 
    </head> 
    <body> 
    <div id="map"></div> 
    <div id="drop-container"><div id="drop-silhouette"></div></div> 
    <script> 
     /* Map functions */ 

     var map; 

     function initMap() { 
     // set up the map 
     map = new google.maps.Map(document.getElementById('map'), { 
      center: new google.maps.LatLng(52.240479, -0.902656), 
      zoom: 12 
     }); 
     } 


     function loadGeoJsonString(geoString) { 
     var geojson = JSON.parse(geoString); 
     map.data.addGeoJson(geojson); 
     zoom(map); 
     } 

     /** 
     * Update a map's viewport to fit each geometry in a dataset 
     * @param {google.maps.Map} map The map to adjust 
     */ 
     function zoom(map) { 
     var bounds = new google.maps.LatLngBounds(); 
     map.data.forEach(function(feature) { 
      processPoints(feature.getGeometry(), bounds.extend, bounds); 
     }); 
     map.fitBounds(bounds); 
     } 

     /** 
     * Process each point in a Geometry, regardless of how deep the points may lie. 
     * @param {google.maps.Data.Geometry} geometry The structure to process 
     * @param {function(google.maps.LatLng)} callback A function to call on each 
     *  LatLng point encountered (e.g. Array.push) 
     * @param {Object} thisArg The value of 'this' as provided to 'callback' (e.g. 
     *  myArray) 
     */ 
     function processPoints(geometry, callback, thisArg) { 
     if (geometry instanceof google.maps.LatLng) { 
      callback.call(thisArg, geometry); 
     } else if (geometry instanceof google.maps.Data.Point) { 
      callback.call(thisArg, geometry.get()); 
     } else { 
      geometry.getArray().forEach(function(g) { 
      processPoints(g, callback, thisArg); 
      }); 
     } 
     } 


     /* DOM (drag/drop) functions */ 

     function initEvents() { 
     // set up the drag & drop events 
     var mapContainer = document.getElementById('map'); 
     var dropContainer = document.getElementById('drop-container'); 

     // map-specific events 
     mapContainer.addEventListener('dragenter', showPanel, false); 

     // overlay specific events (since it only appears once drag starts) 
     dropContainer.addEventListener('dragover', showPanel, false); 
     dropContainer.addEventListener('drop', handleDrop, false); 
     dropContainer.addEventListener('dragleave', hidePanel, false); 
     } 

     function showPanel(e) { 
     e.stopPropagation(); 
     e.preventDefault(); 
     document.getElementById('drop-container').style.display = 'block'; 
     return false; 
     } 

     function hidePanel(e) { 
     document.getElementById('drop-container').style.display = 'none'; 
     } 

     function handleDrop(e) { 
     e.preventDefault(); 
     e.stopPropagation(); 
     hidePanel(e); 

     var files = e.dataTransfer.files; 
     if (files.length) { 
      // process file(s) being dropped 
      // grab the file data from each file 
      for (var i = 0, file; file = files[i]; i++) { 
      var reader = new FileReader(); 
      reader.onload = function(e) { 
       loadGeoJsonString(e.target.result); 
      }; 
      reader.onerror = function(e) { 
       console.error('reading failed'); 
      }; 
      reader.readAsText(file); 
      } 
     } else { 
      // process non-file (e.g. text or html) content being dropped 
      // grab the plain text version of the data 
      var plainText = e.dataTransfer.getData('text/plain'); 
      if (plainText) { 
      loadGeoJsonString(plainText); 
      } 
     } 

     // prevent drag event from bubbling further 
     return false; 
     } 

     function initialize() { 
     initMap(); 
     initEvents(); 
     } 

    </script> 
    <script async defer 
     src="https://maps.googleapis.com/maps/api/js?key=[MYKEY]=initialize"></script> 
    </body> 
</html> 

にGeoJSONの例である:例えば

{ 
"type": "FeatureCollection", 
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, 
"features": [ 
{ "type": "Feature", "properties": { "Dayofyear": "365" }, "geometry": { "type": "Point", "coordinates": [ -0.68707977611089, 52.185136516710998 ] } }, 
{ "type": "Feature", "properties": { "Dayofyear": "365" }, "geometry": { "type": "Point", "coordinates": [ -0.859024422605226, 52.390033187765177 ] } } 
] 
} 

enter image description here

:私は、情報ウィンドウが表示されて、マーカーのクリックでポップアップを持ってできるようにしたいと思いますそのマーカーのGeoJsonからの "Dayofyear"データ

+0

GeoJSONはどこですか?あなたの問題を示す[mcve]を提供してください。 – geocodezip

+0

上記のコードは、geojsonファイルをドロップできるウィンドウを作成します。現時点では、デスクトップに保存されているgeojsonファイルを使用しています。 – user13641

+0

問題を示す[mcve]を作成してください(または質問にサンプルGeoJSONを提供してください) – geocodezip

答えて

0

尋ねられたように、マーカーにinfowindowを追加するには、Google hereで提供されている簡単なコードを試してみてください。

基本的に、あなたは)(情報ウィンドウオブジェクトを追加し、機能のprocessPointsにマップ内のそれを開く必要があります。

function processPoints(geometry, callback, thisArg) { 

    if (geometry instanceof google.maps.LatLng) { 
     callback.call(thisArg, geometry); 

    } else if (geometry instanceof google.maps.Data.Point) { 
     callback.call(thisArg, geometry.get()); 
     var contentString = "yourTextHere"; 
     var infowindow = new google.maps.InfoWindow({ 
      content: contentString, 
      position: geometry.get() 
     }); 
     infowindow.open(map); 

    } else { 
     geometry.getArray().forEach(function(g) { 
     processPoints(g, callback, thisArg); 
     }); 
    } 
    } 

あなたは情報ウィンドウの追加情報/オプションが必要な場合は、Googleドキュメントhereを確認することができます。

関連する問題