2017-05-09 8 views
0

私が開発しているプロジェクトでは、ol.interaction.Draw機能を使用してジオメトリを描画しています。ジオメトリ(線ストリングまたはポリゴン)にGPSポイントを追加するために使用するgeometryFunction。これは、このGPSポイントを追加するブール値を設定することによって達成されます。このブール値は、HTML内のボタンによって設定されます。ol3 geometry関数interaction.Draw GPSポイントを追加する

Alでもうまくいきますが、マップ上にカーソルを再配置するまでスケッチは更新されません。カーソルを地図上に移動せずにジオメトリの機能をトリガする方法はありますか?

// Interaction 
     $scope.interactions.draw = new ol.interaction.Draw({ 
      source: $scope.vector.getSource(), 
      type: (function() { 
       var type = 'Point'; 
       if ($scope.layer.TypeName == 'LineStyle') 
        type = 'LineString'; 
       if ($scope.layer.TypeName == 'PolygonStyle') 
        type = 'Polygon'; 
       return type; 
      })(), 
      geometryFunction: function (coordinates, geometry) { 

       if (!_.isUndefined(geometry)) { 
        // Is move to GPS position selected? 
        if ($scope.moveToGpsPosition_) { 
         // GPS position 
         var pos = _geolocation.geolocation.getPosition(); 
         // Line 
         if ($scope.layer.TypeName == 'LineStyle') 
          coordinates.splice(coordinates.length - 1, 0, pos); 
         // Polygon 
         if ($scope.layer.TypeName == 'PolygonStyle') 
          coordinates[0].splice(coordinates.length - 2, 0, pos); 
         // Stop move to GPS position 
         $scope.moveToGpsPosition_ = false; 
        } 
        geometry.setCoordinates(coordinates); 
       } else { 

        // Detect geometry type 
        if ($scope.layer.TypeName == 'PointStyle') 
         geometry = new ol.geom.Point(coordinates); 
        if ($scope.layer.TypeName == 'LineStyle') 
         geometry = new ol.geom.LineString(coordinates); 
        if ($scope.layer.TypeName == 'PolygonStyle') 
         geometry = new ol.geom.Polygon(coordinates); 
       } 
       return geometry; 
      } 
     }); 

答えて

0

私はあなたの問題を複製困難な時間を過ごしていますが、私はあなたがでそれを解決することができます疑うあなたgeometry.setCoordinates(coordinates);行の後に次のいずれかを追加しました:

map.updateSize(); または map.render();

関連する問題