2017-12-22 33 views
-2

私は編集されたポリゴンの新しい座標を取得する方法を見つけようとしています。最初に地図上にポリゴンを描画し、そのポリゴンの座標をテキストエリア 'coordinaten'に表示します。座標はJSON STRINGに処理されます。 < =この部分の作品元のポリゴンを編集した後に新しい座標を取得する

このステップの後に、 'editable'がtrueである場合、ポリゴンを再形成/編集することができます。新しい座標を2番目のテキストエリア 'new_coordinaten'に表示します。私はこの仕事を得ると、私は同じテキストエリアにそれらを保つだろうが、今は大丈夫です。

私はgoogle maps api(js)の新機能ですが、この 'set_at'と 'insert_at'は実際にどのように機能しますか? いつトリガーされますか?あなたが私に尋ねるならば、この部分にgoogle maps apiのドキュメントは明確ではありません。

しかし、元のポリゴンの座標を保存する方法について同じコードを書いたら、正しく機能するはずです。私はこれを試みましたが、結果はありませんでした。

マイコード:

<!DOCTYPE HTML> 
    <html> 
    <head> 
    </head> 
    <body> 
     <div id="map" style="width:100%;height:400px;"></div><br> 
     <textarea cols="100" rows="10" id="coordinaten"></textarea><br> 
     <textarea cols="100" rows="10" id="new_coordinaten"></textarea> 
    </body> 

    <!-- GOOGLE API --> 
    <script src="https://maps.googleapis.com/maps/api/js?key=APIKEY&callback=myMap"> 
    </script> 
    <script> 
     function initialize() 
     { 
      var mapOptions = { 
       zoom: 10, 
       center: new google.maps.LatLng(51.0108706, 3.7264613), 
      }; 
      var map = new google.maps.Map(document.getElementById('map'), mapOptions); 

      var polygonOptions = { 
       strokeColor: '#FF0000', 
       strokeWeight: 2, 
       strokeOpacity: 0.8, 
       fillColor: '#FF0000', 
       fillOpacity: 0.35, 
       editable: true, //editeren van de polygon 
       draggable: false //verplaatsen van de polygon 
      }; 

      var polygon = new google.maps.Polygon(polygonOptions); 

      polygon.setMap(map); 

      google.maps.event.addListener(map, "click", function(event){ 
       var path = polygon.getPath(); 
       path.push(event.latLng); 

       /* --POLYGON-- */ 
       //converteren van de polygon naar JSON string 
       //stap 1, coördinaten van polygon naar een array[] 
       var coordinates_poly = polygon.getPath().getArray(); 
       var newCoordinates_poly = []; 
       for (var i = 0; i < coordinates_poly.length; i++){ 
        lat_poly = coordinates_poly[i].lat(); 
        lng_poly = coordinates_poly[i].lng(); 

        latlng_poly = [lat_poly, lng_poly]; 
        newCoordinates_poly.push(latlng_poly); 
       } 

       //stap 2, converteren van array[] naar JSON 
       var str_coordinates_poly = JSON.stringify(newCoordinates_poly); 

       //stap 3, voeg de JSON string aan het textveld na druk van knop 
       document.getElementById('coordinaten').value = str_coordinates_poly; 
      }); 

      google.maps.event.addListener(polygon, 'set_at', function(){ 

       document.getElementById('new_coordinaten').value = "test - set_at"; 
      }); 

      google.maps.event.addListener(polygon, 'insert_at', function(){ 

       document.getElementById('new_coordinaten').value = "test - insert_at"; 
      }); 

     } 
     google.maps.event.addDomListener(window, 'load', initialize); 
    </script> 

    </html> 

答えて

0

あなたはポリゴンパスなくポリゴン自体にあなたのリスナーをバインドする必要があります。私はそれが今のために働いて得た方法

function initialize() { 
 

 
    var mapOptions = { 
 
     zoom: 4, 
 
     center: new google.maps.LatLng(40, 9), 
 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
 
    }; 
 

 
    var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions); 
 

 
    var polygon = new google.maps.Polygon({ 
 
     editable: true, 
 
     strokeOpacity: 0, 
 
     strokeWeight: 0, 
 
     fillColor: '#00FF00', 
 
     fillOpacity: .6, 
 
     paths: [ 
 
     new google.maps.LatLng(39, 4), 
 
     new google.maps.LatLng(34, 24), 
 
     new google.maps.LatLng(43, 24), 
 
     new google.maps.LatLng(39, 4)], 
 
     map: map 
 
    }); 
 

 
    // Get paths from polygon and set event listeners for each path separately 
 
    polygon.getPaths().forEach(function (path, index) { 
 

 
     google.maps.event.addListener(path, 'insert_at', function() { 
 
      console.log('insert_at event'); 
 
     }); 
 

 
     google.maps.event.addListener(path, 'remove_at', function() { 
 
      console.log('remove_at event'); 
 
     }); 
 

 
     google.maps.event.addListener(path, 'set_at', function() { 
 
      console.log('set_at event'); 
 
     }); 
 
    }); 
 
}
#map-canvas { 
 
    height: 200px; 
 
}
<div id="map-canvas"></div> 
 

 
<script src="https://maps.googleapis.com/maps/api/js?callback=initialize" 
 
     async defer></script>

+0

私はset_atが何かをしたいだけで、remove_atは使用されず、今はatleastでなく、insert_atを無効にしたいと思います。万が一、insert_atリスナをトリガするポリゴン上で目立たない中間点を隠す/削除する方法を知っていますか? – TDB

-1

また私の新しい機能、。

FYI:今は削除またはドラッグのオプションを使用していないため、私は両方のコメントにコメントを付けます。

function initialize() 
    { 
     //fill array with coordinates 
     var path = [[51.14920179999362,3.706512451171875],[50.99042122689005,3.475799560546875],[50.93852713736125,3.73809814453125]]; 

     //Options for the map 
     var mapOptions = { 
      zoom: 10, 
      center: new google.maps.LatLng(51.0108706, 3.7264613), 
     } 

     //generate map 
     var map = new google.maps.Map(document.getElementById('map'), mapOptions); 

     //translate array of arrays to LatLng 
     var fixedPath = []; 
     for (var i=0; i < path.length; i++){ 
      fixedPath.push({lat:path[i][0],lng:path[i][1]}); 
     } 

     //options for the polygon 
     var polyOptions = { 
      paths: fixedPath, 
      strokeColor: '#FF0000', 
      strokeWeight: 2, 
      strokeOpacity: 0.8, 
      fillColor: '#FF0000', 
      fillOpacity: 0.35, 
      editable: true, //editeren van de polygon 
      draggable: false //verplaatsen van de polygon 
     }; 

     //create the polygon 
     var polygon = new google.maps.Polygon(polyOptions); 
     polygon.setMap(map);  

     //google.maps.event.addListener(polygon, "dragend", getPolygonCoords); 
     google.maps.event.addListener(polygon.getPath(), "insert_at", getPolygonCoords); 
     //google.maps.event.addListener(polygon.getPath(), "remove_at", getPolygonCoords); 
     google.maps.event.addListener(polygon.getPath(), "set_at", getPolygonCoords); 

     function getPolygonCoords() { 
      var coordinates_poly = polygon.getPath().getArray(); 
      var newCoordinates_poly = []; 
      for (var i = 0; i < coordinates_poly.length; i++){ 
       lat_poly = coordinates_poly[i].lat(); 
       lng_poly = coordinates_poly[i].lng(); 

       latlng_poly = [lat_poly, lng_poly]; 
       newCoordinates_poly.push(latlng_poly); 
      } 

      var str_coordinates_poly = JSON.stringify(newCoordinates_poly); 

      document.getElementById('new_coordinaten').value = str_coordinates_poly; 
     } 
    } 
    google.maps.event.addDomListener(window, 'load', initialize); 
関連する問題