ThinkGeo.com    |     Documentation    |     Premium Support

Geocoding results analysis

Hello,


I am trying to compare ThinkGeo Geocoder to other available geocoders.  I have been mainly comparing it to MapPoint Web Services (see msdn.microsoft.com/en-us/library/cc534868.aspx and mappoint-css.live.com/CSCV3).  Given that, I have a number of questions, especially concerning the analysis of the quality of the results from geocoding.


Here are some statistics that MapPoint Web Service provided as a result of geocoding on a per record level:


MatchCode: msdn.microsoft.com/en-us/library/cc546334.aspx



    
        
            
            

Good


            
            
            

0


            
            
            

The geocoder found a single match.


            
        
        
            
            

Bad


            
            
            

1


            
            
            

The geocoder was unable to return a result.


            
        
        
            
            

Imprecise


            
            
            

2


            
            
            

The geocoder was unable to match all of the information  and had to geocode up the hierarchy to find a less precise result. For  example, the geocoder returns a match code of Imprecise if it cannot  match the address fields for the entity and returns a match at the  postal code level.


            
        
        
            
            

Ambiguous


            
            
            

3


            
            
            

The geocoder returned more than one possible match. For  example, the street address for the entity is 128 Main St. and the  geocoder returns matches for 128 North Main St. and 128 South Main St.  because there is no way to determine which is desired. By default, to  the geocoder accepts the first match in the list and stores the  associated latitude and longitude coordinates. If you do not want the  upload process to accept the first result, select the Reject ambiguous  matches check box on the Create a Data Source page or the Replace a Data  Source page. If you select this check box, no results are accepted and  you can use the Edit Entity ID page to choose the correct match  manually.


            
        
        
            
            

Disambiguated


            
            
            

4


            
            
            

The match returned by the geocoder has been manually  set by the user in the Edit Entity ID page. The Matched Method code is 6  (Manual).


            
        
    

Matched Method: msdn.microsoft.com/en-us/library/cc546335.aspx



    
        
            
            

Address


            
            
            

0


            
            
            

The geocoder matched the full address, including street  number, and used interpolation to return a latitude and longitude  coordinate of the address


            
        
        
            
            

Street


            
            
            

1


            
            
            

The geocoder matched the street name. The point  returned by the geocoder is one end of the street


            
        
        
            
            

PostCode


            
            
            

2


            
            
            

The geocoder matched the postal code and returned a  latitude and longitude coordinate for the postal code centroid (A  centroid is the center of a body’s mass. When the term centroid is  applied to a geopolitical area, such as a postal code area or city, the  centroid is the center of the population mass of that area rather than  the geographic center. Therefore, the centroid for a postal code can be  some distance from its geographic center.)


            
        
        
            
            

City


            
            
            

3


            
            
            

The geocoder matched the postal code and returned a  latitude and longitude coordinate for the city centroid


            
        
        
            
            

Subdivision


            
            
            

4


            
            
            

The geocoder matched the state, province, or other  subdivision


            
        
        
            
            

CountryRegion


            
            
            

5


            
            
            

The geocoder matched the country/region


            
        
        
            
            

Manual


            
            
            

6


            
            
            

The results of the geocoder are overriden by a manual  fix


            
        
        
            
            

Rooftop


            
            
            

7


            
            
            

The geocoder matched the full address and returned a  latitude and longitude coordinate of the rooftop at that address


            
        
    

I have two questions in regards to ThinkGeo Geocoder:



        
  1. Similarly to MapPoint web services, can geocoder fall back to higher level entites when lowest level match fails (ie, first match on Address, then on Street, then on PostCode and so on).  From what I have seen in the samples, it seems that it can fall back; however, not as gracefully:  for example, if I enter a street name and city, state (no street number) it falls back to the center of the city - I would expect it to fall back to the street name (I was using maps.thinkgeo.com/web/ to test).

  2.     
  3. Can ThinkGeo geocoder report match result codes - as above.  Both of the structures above (or similar) are relatively important to understand how well the geocoder has been able to match the actual location: especially if it is run with large data set in a batch.


Thank you


 



Val, 



Thanks for your post, about your two questions, I answered them one by one below: 



1, Similarly to MapPoint web services, can geocoder fall back to higher level entites when lowest level match fails (ie, first match on Address, then on Street, then on PostCode and so on). From what I have seen in the samples, it seems that it can fall back; however, not as gracefully: for example, if I enter a street name and city, state (no street number) it falls back to the center of the city - I would expect it to fall back to the street name (I was using maps.thinkgeo.com/web/ to test). 



Actually, our Geocoder can fall back to higher level entities when lowest leve match fails, our Geocoder product is the pugin structure, it can be extended easily, for example, the UsaGeocoder object, default, it includes 9 plugins, they are: 



StreetMatchingPlugin, ZipDbfMatchingPlugin, CityDbfMatchingPlugin, StateDbfMatchingPlugin, CoordingatesMatchingPlugin, CountyDbfMatchingPlugin, CensusTractsDbfMatchingPlugin, CensusBlockDbfMatchingPlugin, CensusBlockGroupDbfMatchingPlugin. 



Also you still can add more plugins to the UsaGeocoder object such as the PostcodeDbfMatchingPlugin below: 



usaGeocoder.MatchingPlugIns.Add(new PostcodeDbfMatchingPlugin(dataPath)); 



When we geocode an address, the logic is that it will loop through each plugin for matching the closest results. If the input address cannot be found out in all plugins, then it will return null. 

Also for currently Geocoder version, you have to enter either the street number or zip code for the street address, then it can match the closest results for the street name if the street name can be matched in the street index file. I guessed maybe you entered the street address without street number and zip code, so it returned the results from city plugins, because it can't match any results in the StreetMathingPlugin. If you want us to modify this part of Geocoder according to your expections, please contact ThinkGeo Support so that we can process it for you. 



2, Can ThinkGeo geocoder report match result codes - as above. Both of the structures above (or similar) are relatively important to understand how well the geocoder has been able to match the actual location: especially if it is run with large data set in a batch. 



Our structure of Geocoder product is not the same as the MapPoint, so maybe I can't give you the result codes such as the MapPoint, but I can give you the match logic for all exist plugins: 



Construct usaGeocoder object-> In the core code it will add the default 9 plugins(mentioned in answer 1) to usaGeocoder object -> If you needs, you can add the Postcode plugin to the usaGeocoder object -> usaGeocoder.Match() -> Loop through each plugins for matching the address -> Get GeocoderMatch collection for each plugin -> Add GeocoderMatch collection for each plugin to a List<geocodermatch></geocodermatch> -> Evaluate the GeocoderMatch in the list -> List the closest items from top to bottom. 



That's all, if you still have any questions please let me know, 



Thanks, 



Scott,



Scott, 
  
  I’m interested in the same information, how accurate are the geocodes.  From reading this post and others, I understand that 9 plugins are used to match against.  When I look at my Collection<GeocoderMatch> matchResults, how do I know which plugin was used to provide those results?  I only care about matchResults that are from “StreetMatchingPlugin”.  Any other result is not good enough for what my customers need.  I really like this product and have to believe that there is a way to know if the results are accurate to the Street, Zip, State etc. 
  
  
 -Scott M

Scott M, 
  
 Welcome to ThinkGeo’s world! 
  
 About your question, there is an easy way to implement your requirement, please see my code below: 
  
 
UsaGeocoder usaGeocoder = new UsaGeocoder(txtIndexPath.Text, MatchMode.ExactMatch);
usaGeocoder.Open();
Collection<GeocoderMatch> matchItems = usaGeocoder.Match(yourSearchText);
usaGeocoder.Close();

for(int i = 0; i < matchItems.Length; i++)
{
if(matchItems[i].MatchPaires.ContainsKey(“Street”))
{
 GetResultsForStreetsOnly(matchIitems[i]);
}
if(matchItems[i].MatchPaires.ContainsKey(“Zip”))
{
 GetResultsForZipOnly(matchIitems[i]);
}
if(matchItems[i].MatchPaires.ContainsKey(“State”))
{
 GetResultsForStreetsOnly(matchIitems[i]);
}
}
 
  
 You can use the code above to filter the results and get the results what you care. If you have any other questions please let me know, 
  
 Thanks, 
  
 Scott,

Scott, 
  
 I’ve taken a closer look at the NameValuePairs while doing comparisons geocoding for example “1234 Main St, 60090” and “Main St, 60090”.   
  
 Would it not be better to use HouseNumber and SideOfStreet to make the determination if we have an address level geocode? 
 HouseNumber- is empty on “Main St, 60090” 
 SideOfStreet - this NameValuePair isn’t even apart of the results for “Main St, 60090” 
 Street - is still apart of the results and even was when I did “South Bend, IN, 46637” (it said BEND was the street) 
  
 -Scott M

Scott M, 
  
 I have tested the “Main St 60090” address on the maps.thinkgeo.com, I found there is only one result can be found out for this input address and the only result was be found out by ZipDbfMatchingPlugin, you can click on the marker, it will pop up a window to display all key values, you can see the ID key is Zip, not street. Also I tested this address on the Google maps, the google maps still can’t find a result for it. 
  
 I would like to ask you it this address a real address? If it is a real address, then the reason is from the street index dbf file, our streets.dbf file dose not include this address in the entered zipcode area. 
  
 If you have any questions please let me know, 
  
 Thanks, 
  
 Scott,