ThinkGeo.com    |     Documentation    |     Premium Support

CenteringOnMovingFeature


 


Hi, I'm trying to work this this sample you have supplied and when I zoom in or out too fast it gives me this error. Could you help me out? This is a screen shot of the error and I've attached a copy of my project. Note in the project I have a proxy address set up. 


 



ServicesEditionSample_CenteringOnMovingVehicle.zip (342 KB)

Gary, 
  
 I have recreated your problem by using the sample you attached, the problem is caused by worldmapkitlayer, if you remove this line, it works fine. 
 //mapEngine.StaticLayers.Add(worldMapKitLayer); 
  
 I think the reason is that you used timer to refresh map frequently, worldmapkitlayer will request data from our server, to cause the timeout or reject request if it’s frequently. 
  
 Thanks, 
 James

I guess I'll just have to use a different map, I'm experimenting with this code and I started with the Google GPS sample and changed it to simulate a car driving around a block. The problem is as the car movies it leaves behind points. I can't seem to delete the past points as the car changes positions. 



001_TestForm.cs (9.27 KB)

Gary, 
  
 The .cs file type of page is not served. Please zip it and upload again. 
  
 Thanks, 
 James

I found that using  
  
  carLayer.Open(); 
  carLayer.EditTools.BeginTransaction(); 
  carLayer.EditTools.Update(pointShape); 
  carLayer.EditTools.CommitTransaction(); 
  carLayer.Close(); 
  
 will update the pointShape, changing the location and efficiently erasing the old location. Just one thing, an InMemoryFeatureLayer carLayer can have multiple pointshapes in it right? To determine which point shape is being updates you just have to create a point shape object with the same name and properties, and then update it?  
 i.e. 
  
 PointShape pointShape = carLayer.InternalFeatures[0].GetShape() as PointShape;

Oh and simple question, If I were to plot a moving point on a Google Map in DegreeDecimal format would it be easier to constantly convert the point locations or convert the Google Map background to DegreeDecimal? Also any directions on how to do this?

void timer_Tick(object sender, EventArgs e) 
         { 
             double longitude = -96.4809; 
             double latitude = 38.9543; 
              
             LayerOverlay pointOverlay = (LayerOverlay)winformsMap1.Overlays[“PointOverlay”]; 
             InMemoryFeatureLayer pointLayer = pointOverlay.Layers[“PointLayer”] as InMemoryFeatureLayer; 
  
             Feature GPSFeature = pointLayer.InternalFeatures[0]; 
             PointShape point = GPSFeature.GetShape() as PointShape; 
             point.X = longitude; 
             point.Y = latitude; 
             
  
             pointLayer.FeatureSource.Open(); 
             pointLayer.EditTools.BeginTransaction(); 
             pointLayer.FeatureSource.UpdateFeature(GPSFeature); 
             pointLayer.EditTools.CommitTransaction(); 
             pointLayer.FeatureSource.Close(); 
  
             winformsMap1.Refresh(); 
 } 
  
 I have this inside a timer, and I’m hoping once the timer goes up the point moves to this new location, but it does not.

Hi Gary, 
  
 I think the reason it’s not updating is because you are using the pointLayer.FeatureSource.UpdateFeature(GPSFeature) method instead of the pointLayer.EditTools.Update(GPSFeature) method.  Try using the code below and see if that helps. 
  
             pointLayer.FeatureSource.Open(); 
             pointLayer.EditTools.BeginTransaction(); 
             pointLayer.EditTools.Update(GPSFeature); 
             pointLayer.EditTools.CommitTransaction(); 
             pointLayer.FeatureSource.Close();  
  
  
 Also if you want to recenter the Map on the latest point you can use the CenterAt Method off of the Map like the following line of code: 
  
 winformsMap1.CenterAt(GPSFeature); 
  
 Thanks!