ThinkGeo.com    |     Documentation    |     Premium Support

Detecting POIs using GPS coordinates in a map

 Hi


 
I am new in Maps and GPS applications and i have the following needs:
 
- Define special points in roads (entry point, exit point and control point) or road sections (usually between exits/entries)
 
- Detecting when the GPS values received from external devices (latitude and longitude) corresponds with one special point defined previously or a highway section
 
My doubts are:
 
- Do i need additional extensions besides Map Suite Web (Geocoder or Routing Extension)?
 
- Are there samples of similar functionalities for checking how complicated it would be?
 
Thanks in advance.
 

 


 



I think that your needs can be covered with Map Suite Web and Routing extension.


<<- Define special points in roads (entry point, exit point and control point) or road sections (usually between exits/entries)>>


This description is a little bit vague but it seems like you need Dynamic Segmentation capability. That technology allow you to get points on a line given a certain distance and starting point. It can also give you a line segment from a line given a length, a starting point and a certain distance. I suggest you look at the Code Community project  Dynamic Segmentation to see if this is what you are looking for and we can further help you on that. If this is not what you are looking for, you are going to have to give us a more detailed explanation of your needs.


code.thinkgeo.com/projects/s...gmentation


 


<<- Detecting when the GPS values received from external devices (latitude and longitude) corresponds with one special point defined previously or a highway section.>>


We have many projects in the Code Community related to GPS and showing that on the map such as:


code.thinkgeo.com/projects/s...eettracker


code.thinkgeo.com/projects/show/gpstogooglemap


Now, specifically for your need of detecting when the GPS values corresponds with one special point, I think that the closest project showing that is Snap GPS to Street where you have a GPS point snapping to the nearest street. This is not exactly what you are looking for to do, but it gives you an idea on how your stuff could be done. For example, you could set a tolerance in distance and if the GPS point is within that distance, it could be snapped to that point or it could flash to indicate that it is within the distance etc. We have all the necessary toools in Map Suite for those needs. If you still have doubts, give us little more details on your needs and we can provide some sample code. 


code.thinkgeo.com/projects/show/snapgpstostreet


Thank you.


 



First of all thanks for your quick reply… 
  
 The project "Snap GPS to Street" is more or less what i am looking for, searching is a GPS position corresponds with a "Feature". 
 Now my doubt is for the way to generate this features in a layer. In this project you are using a shapefile named "AustinWithOneWayRoad.shp" that contains all the roads for searching. In my case i would need to define a special layer containing my special points and sections for later searching. 
  
 I have been reviewing the project "Draw and Edit Shapes" and i think that it could be the way to do it, but i have the doubt about how this "configuration" could be saved. I suppose that this information shoud be saved a a shapefile (.shp). Is this assumption correct?. If so, do you have a sample for doing this?. 
  
 Thanks a lot for your time.

So, basically, what you would need instead of "Snap GPS to Street" is "Detect GPS to special points"? If I understand correctly, you have a series of points and you want the GPS location being detected if it is within a certain distance of of the closest point. I think we could provide a little sample app showing that but we would need a little more information on how you want it to be used so that we can put the sample app in the correct context. What do the special points represent and what is the relationship with the GPS locations?


In the "Draw and Edit Shapes" of the "How Do I" samples, you can see how to manipulate EditOverlay. You can have access to its internal features and save them to a format of your choice. For example, we have a project in the Code Community that shows you how to save to WKT (Well Known Text), "Tracked Shapes to WKT". Although, it is Desktop application, I think it can give you some ideas. code.thinkgeo.com/projects/show/trackedshapestowkt

You can also look at "Convert To/From Well Know Text" of the "How Do I" samples.


You could also save your special points to shapefile but it is a more static format. If your data is not going to change often, it might be a format of choice. You can find some code relevant to save point features to shapefile, for example, in the Code Community project. code.thinkgeo.com/projects/show/clippingonpointlayer


 



I can not find the project "Detect GPS to special points", but the description is exactly what we need. I am going to describe more the functionality needed: 
 - First we need to define "virtual gantries" in different road sections for detecting vehicle passages in these sections (for tolling purposes). This should be a static configuration that could be updated rarely 
 - Then we have GPS devices sending GPS positions (latitude, longitude) to our system 
 - At last we have to detect passages in these "virtual gantries" having into account that some roads closer to the road that contains the "virtual gantry" must not be detected 
  
 The configuration of the "virtual gantries" can be performed easily with your product. Now i have the doubt about the WKT format. If i save shapes generated for these "virtual gantries" in WKT format, then in the sample you can convert WKT to a Feature, but the question is: Can i then perform queries similar to performed with shapefiles for finding Features closer to GPS positions?.  
  
 There is another sample that represents more or less what we need, and it is the "POIonRoute" project, considering the POI as "virtual gantries". 
  
 In summary our doubts are: 
  
 - The best way to define "virtual gantries" in road sections (shapes, Features, POI) and store them (.shp, WKT) 
 - The best way to detect passages in these "virtual gantries" without considering wrong GPS positions on very closer roads (if we should need to build the route travelled or using spatial queries would be enough) 
  
 Best regards 


I said "Detect GPS to special points" because that could be the title of a new project in the Code Community that does more exactely what you need. 

Thank you for your detailed explanations. Tommorow, we will work at creating a little sample from your explanations that we can post in the Code Community.



He, he, that was the reason why i could not find the project… 
  
 It would be great to create this project so thanks a lot for your time. 
  
 Best regards

Ok, tomorrow we will publish a web project in the Code Community that shows how to detect moving GPS locations to points (gantries). That should be a good inspiration for your own project. I also let you know that we have a product Vehicle Tracking Starter Kit that his a web app with common tracking features. That also could a good source of inspiration to get you started. You can check this out:


gis.thinkgeo.com/Products/Extension...fault.aspx



  You can check the new project Detect GPS location. This is a simple project, but I think some of the code will get you inspired such as how to do some distance query on an InMemoryFeatureLayer to detect a GPS location if it is within a certain distance of some points.  You can see that you can do Spatial Queries with the same capabilities with InMemoryFeatureLayer as with a regular layer such as a shapefile.


code.thinkgeo.com/projects/show/detectgps



Thanks a lot for the sample. It exactly what i am looking for. Unfortunately, when running the application the vehicle is not refreshed in the window. I have also tried adding a System.Timers.Timer for executing the same code included in the markerOverlay_Tick() method but yet continues without movement.

Make sure you have the MapSuiteCore.dll and WebEdition.dll references and it should work just by running the app. You don’t need to do anything with System.Timers.Timer, the Tick event of MarkerOverlay is used.   
 markerOverlay.Tick += new EventHandler<EventArgs>(markerOverlay_Tick); 
  
  And remember this is a very simple app, you can find many other tricks in other projects of the Code Community and by searching the Discussion Forum.