1

Android フォンで OpenLayers.js?mobile を実行しています。

GPS から線やポリゴンを描画したり、画面をクリックして機能を追加したりしたいと考えています。画面をクリックして新しい頂点でスケッチを開始すると、insertXY(lat,lon) を呼び出すか、クリックして頂点を追加すると、期待どおりに機能します。

ただし、アクティブ化された OpenLayers.Control.DrawFeature で insertXY(lat,lon) を呼び出して新しいスケッチを開始しようとすると、このエラーをスローする finishSketch() を呼び出すまで何も起こりません - 「TypeError: null のプロパティ 'geometry' を読み取ることができません"。

insertXY() でスケッチを開始するにはどうすればよいですか?

これは、このサンプルと同じように機能するはずです: http://openlayers.org/dev/examples/editing-methods.html#

関連する JavaScript は次のとおりです。

var map;
var draw;


map = new OpenLayers.Map({
    div: "map",
    layers: [
        var roads = new OpenLayers.Layer.Vector()
    ],
    center: new OpenLayers.LonLat(0, 0),
    zoom: 1
});



draw = new OpenLayers.Control.DrawFeature(roads, OpenLayers.Handler.Path);
map.addControl(draw);

draw.activate()


function add_GPS_Line_vertex(lon,lat) {
    /* this function only works if sketch has been manually started */
    var lat = parseFloat(lat);
    var lon = parseFloat(lon);
    var point = new OpenLayers.Geometry.Point(lon, lat);
    lon = point.x;
    lat = point.y;
    draw.insertXY(lon,lat);
}
4

1 に答える 1

1

リンクされた例 ( http://openlayers.org/dev/examples/editing-methods.html# )でこのバグを再現しまし。 draw.finishSkech() メソッド。

マウスがマップ上にあるときにのみ描画を開始することで、この回避策を実行しました。

map.events.register('mousemove', map, function (e) {

   //make sure it only runs once (with a flag or something)
   if (mouseFlag == true) {
     mouseFlag = false;

     // do your drawing
     draw.insertXY(lon,lat);

     draw.finishSketch();
  }
});

または、いつでも使用できる形状を描画する必要がある場合:

draw.drawFeature(geometry);
于 2013-11-07T10:07:35.650 に答える