2016-09-13 11 views
0

Gmap.NetをWindowsフォームで使用しています。位置を受け取ったときにオブジェクトの軌跡を描きたいので、Routesを使用します。ルートにポイントを追加すると、マップ上に線は表示されませんが、マップのズームを変更するとマップに表示されます。また、ルート(gMapControl1.Position = new PointLatLng(...))にポイントを追加した後にマップの位置を設定すると、正しく動作し、マップ上のルートラインが表示されます。私のコードは以下の通りです。Gmap.Netルートのポイント間に線がありません

void NewDataReceived(DeviceInfo deviceinf) 
{ 
    //---some codes 
    //----For the first time I add layer and route 
    if (deviceOverLay == null) 
    { 
     deviceOverLay = new GMapOverlay(deviceinf.DeviceId.ToString()); 
     gMapControl1.Overlays.Add(deviceOverLay); 
     deviceRoute = new GMapRoute(new List<PointLatLng>(), deviceinf.DeviceName); 
     deviceOverLay.Routes.Add(deviceRoute); 
     //Add all your points here 
     deviceRoute.Points.Add(new PointLatLng(deviceinf.Latitude, deviceinf.Longitude)); 
     deviceRoute.Tag = deviceinf; 
    } 
    else 
    { 
     deviceOverLay.Routes[0].Points.Add(new PointLatLng(deviceinf.Latitude, deviceinf.Longitude)); 
    } 

    //if I call this line it works, but I don't want it 
    // gMapControl1.Position = new PointLatLng(deviceinf.Latitude, deviceinf.Longitude); 
    //---some codes 
} 
+0

私はGMap.Netを一度も使ったことはありませんが、マップコントロールにポイントを直接追加している間はルートを更新しても地図コントロールがすぐに無効にならないようです。私はそれを描く前に全体のルートを構築したいかもしれないので、理にかなっています。 gMapControl.Invalidate()などを試してください。ズームを変更したときに表示されるということは、ポイントが追加されたことを意味します。 – cdkMoose

+0

"cdkMoose"ありがとう、gMapControl.Invalidate()を試しましたが、解決しませんでした。 – SShR

答えて

1

これは地元の位置を更新し、再描画を行います

gMapControl1.UpdateRouteLocalPosition(deviceRoute); 

を使用してみてください。

+0

ありがとうございました@JAlecksen、あなたはほとんど問題を解決しました。 UpdateRouteLocalPositionメソッドを呼び出すと、マップをクリックしても、以前はズームを変更したり、他のズームメソッドを呼び出すことができました。最後に、 "gMapControl.Invalidate()"メソッドを呼び出すと、正しいメソッドが呼び出されます。もう一度感謝します。私はこのリンクであなたの答えを述べます:[link](https://greatmaps.codeplex.com/discussions/658235)。再度、感謝します。 – SShR

関連する問題