ThinkGeo.com    |     Documentation    |     Premium Support

Best method to achieve Live Tracking app?

Thanks for all the pointers so far - I am understanding more about the API each day and learning that there are several ways to achieve results.


Now trying to figure out the best method to achieve the end result for my Ship Trackin application (porting from MapInfo).


I have a SQL Server Express 20008 R2 table for my ship locations, with various fields including Vessel_ID (unique number), VesselName, Latitude, Longitude, Speed, Heading, Symbol_Info (shape, size, colour, attribute), etc.


This table is being updated independently as new data comes in so the vessel position, speed & heading will change for each vessel at any time.


I want to have MapSuite working pretty well independently of the data coming in, and have MapSuite cycle through the database every 5 or 10 seconds (or less), displaying all the vessels.


I see sql2008Layer can connect to SQL Server 2008, but all the examples I have seen uses the spatial capabilities of SQL Server where the points (actually all the examples seem to use shapes rather than points) are stored spatially inside the database & easily pulled out into MapSuite. 

In my case I have no spatial data in the table so MapSuite would have to somehow figure out from the Lat & Long fields where to place each point and how to rotate the font symbol. And to add to the difficulty each symbol will be a different shape, size & colour.


So, is it possible to do the actual work in one line like is done with the example:

Dim sql2008Layer As New MsSql2008FeatureLayer(connectString, "states", "recid")


or would I have to bring the vessels from the database to the map one record at a time to change their attributes before putting them onto the map? I guess that is the main question. 

If I have to do it record by record I think I already know enough about how to do it, but if it could be done in 1 go then this would be a lot less code & a lot faster.


 


Or is this method not the best way to do it in the first place? I can see that it might be a waste of CPU resources redisplaying 1000 different ships every 5 seconds if only a few have moved in the last 5 seconds since the last cycle.



David, 
  
 Thanks for your post and question. I am not exactly sure about the problem; it seems that the main problem is that SQL Server Express 2008 R2 do not support Geometry & Geography type, take a look at the following customized featuresource and featurelayer, hope it helps. 
 code.thinkgeo.com/projects/show/15 
  
 Any more questions just feel free to let me know. 
  
 Thanks. 
  
 Yale 


That example needs Jet 4.0 on the machine - I am using Windows 7 - 64 bit, which is the main reason why I am moving away from Jet to SQL Server. 
  
 The problem isn’t that SQL Server Express 2008 R2 doesn’t support Geometry & Geography - it does (I think). The problem is that my SQL Server database doesn’t have geometry. However, it does have fields for Lat & Long.  
  
 I was wondering if there was some way, short of looping through the database record by record, of having the map update from the database using sql2008Layer (or some other method). 
  
 Thanks, 
  
 Dave

David, 
  
   The sample happened to use Access but the sample shows how to access ANY database that has a lat & long column that uses OLEDB.  You can just use a connection string to point to your SQL Server and change the column names.  We include all the code to show you how it works.  If you do not have your data in SQL Spatial geometries then you have to use this kind of system to access the Lat & Long values. 
  
 David

Ok, thanks. I will look further into it - C# isn't my forte so it might take some more digging to translate it to VB.Net before I can see if it works. 



Thanks, 



Dave



David, 
  
   If it helps we can translate it to VB.NET tomorrow.  The sample should be exactly what you want.  We created it as many people had databases that had a lat & long column in it. This was the way to store them before many of the databases added spatial support.  We had to use Access in the sample as it is portable.  MS SQL is great but it is hard to provide a self contained sample using it.  It is a real shame Microsoft dropped the ball on 64 bit JET drivers.  I did hear they exist but have not tried them yet. 
  
 David

Actually if I had a choice I'd probably rather have a C# version that connects to a MS SQL database rather than a VB.Net version that requires Jet 4.0 which I really don't want to install on my new development machine. I am a bit confused about the OledbPointFeatureLayer in particular and whether I need to change it to something else - a VB.Net/SQL Server version would be the icing on the cake.



Agreed it is difficult to get a portable sample in SQL Server. However, we have been using MSAccess for our ship tracking application since 1998 so we have 12 years of data in daily access files and it has sometimes been hard to explain to government & multinational companies that Access is good enough. This new version is going to be brand new - VB.Net 2010 instead of VB6, Map Suite instead of MapInfo and SQL Server (Express for smaller clients) instead of MSAccess. 



In the meantime I will muddle through. I have managed to get the SQL Server data into a DataView grid so I know I can access the data - just got to figure out how Map Suite needs to do it's bit.



Oh, poking around some more and found a VB.Net version of that project is already done here:


gis.thinkgeo.com/Support/DiscussionForums/tabid/143/aff/16/aft/4769/afv/topic/Default.aspx


Still needs Jet 4.0 though. 



David(s), 
  
 Thanks for your posts and explanations, I learned a lot from it. 
  
 I think the main problem is in Windows7 operating system, the Jet 4.0 cannot run correctly, so we have to keep away using it. And the sample we provided did use the Jet, while it is easy to be replaced by using the connection to your SQL server express.  
  
 This sample just show how to use a data in which the WKB is not stored for Geometry & Geography was not supported; no matter it is Jet connection or SQL Express connection. So, please go ahead and have a try on it, if any problems just feel free to let us know. 
  
 Thanks. 
  
 Yang