ThinkGeo.com    |     Documentation    |     Premium Support

Geocode Match does not match as expected

I am attempting to GeoCode with Version 3.0 and am not getting expected results.


Questions:


1.  In the Match Method, what is the correct format of the address parameter?


2.  What does the EvaluateMatchResults do and when should I use it?


3.  What does the matchranking mean and how is it to be interpretted?


4.  Why does this address not GeoCode to a street match (So far every other geocoding tool I have used has successfully matched this address)?  357 S Main St, Lake Mills, WI 53551 

5.  When using the Match method with the zipcode override, I always get zero matches.  Why?


Jim




Jim, 



Thanks for your post. 



We are able to recreate this issue in the latest public release 3.0.453 so it is a bug. 



But you can get the match using following code piece right now: 






UsaGeocoder geocoder = new UsaGeocoder(@"C:\Documents and Settings\jneumann\My Documents\GeocodeData30\data"); 
geocoder.Open(); 

MatchResult result = geocoder.Match("1512 S 10th St 53094"); 

geocoder.Close(); 







Here are answers for your additional questions: 



1. There are two methods for matching, the first one is Match(string sourceText) which is for generic matching, 



When you use this method, you can input so many combinations of addresses such as “1512 S 10th St”, “1512 S 10th St 53094”, 



“1512 S 10th St 53094 WI”, “66047 Lawrence”, “Douglas County” etc. The matching system would try to parse and formalize the source text you input and try to match them, 



then it would evaluate all of the MatchItems from different MatchingPlugIns such as StreetDbfMatchingPlugIn, ZipDbfMatchingPlugIn, 



CityDbfMatchingPlugIn and StateDbfMatchingPlugIn etc. and sort them by the ranking of MatchItem and return. 



The second Match method is Match(string streetAddress, string zip) is for specified match for streets. So when you use this method, 



The first parameter should only be street such as “1617 Saint Andrews Drive” and the second parameter should only be zip such as “66047”. 



2. The EvaluateMatchResults method just evaluate match items from different plugin and sort them by MatchRanking. It’s a virtual method 



and you can override it only when you create a custom Geocoder class and add custom MatchingPlugIn objets. 



3. The MatchRanking is the ranking value for MatchPlugIns and it represents the weight in the evaluating system. 



For example, assume we set the MatchRanking to 2 for StreetDbfMatchingPlugIn and we set the MatchRanking to 1 for ZipDbfMatchingPlugIn, when 



User input “1617 St Andrews drive 66047”, assume we got two MatchItems, the one is “1617 St Andrews drive” from StreetDbfMatcningPlugIn and another 



is “66047” from ZipDbfMatchingPlugIn, then we will evaluate them and we found the street has the higher ranking so we put it on the first of MatchItem collection 



and the zip is lower so we put it on the second. 



In our UsaGeocoder class, we have gave proper value of MatchRanking for MatchingPlugIns so you don’t need to change them normally. 



4. If you want to use Fuzzy logic you can use this API, 



UsaGeocoder geocoder = new UsaGeocoder(@"C:\Documents and Settings\jneumann\My Documents\GeocodeData30\data", MatchStatus.FuzzyMatch); 



Also you could try our online Geocoder demo via maps.thinkgeo.com and give us comments please. 



Regards. 

 



Thanks - one follow up question: 
  
 Which method is more efficient? 
  
 1.  geocoder.Match("1512 S 10th St 53094");  
 2.  geocoder.Match("1512 S 10th St", "53094");  
  
 Or does it not return faster either way? 
  
 Jim

Also, 
  
 I still cannot get this address: to give me a street level GeoCode: 357 S Main St, Lake Mills, WI 53551  
 I have tried: 357 S Main St 53551, but it also will not give me street level. 
  
 Why?

Jim, 
  
 Thanks for your post, for your two questions above, the answers are the following: 
  
 1.       For street matching, the API Match(string streetAddress, string zip) is more efficient. 
  
 2.       The reason why it can’t match “357 S Main St 53551” in street level is because the house number 357 can’t be found for that street in data source. 
  
 Currently we don’t have better solution for that. 
  
 If you have any questions please let me know, 
  
 Thanks,

Hi  
  
 I had a query mostly on the same lines.  
  
 Is there a way to find out how accurate are the results returned by the GeoCoder.  
  
 For example, If  my searchstring is : "6500 N Bell Ave ", the GeoCoder.Match(searchstring).MatchItems would return me more than one results. So, which one one of them is the most accurate one, and how accurate is that . 
  
 Can I get some help on the above. 
  
 Thanks

Abhijeet: 
  
 Sorry for replying you so late, about your question, it is related to our design of MapSuiteGeocoder, the MapSuiteGeocoder is Plugin structure, when you use the UsaGeocoder to match an address, default, it would be matched in 9 internal plugins, the 9 internal plugins are: 
  
 StreetMatchingPlugin, ZipDbfMatchingPlugin, CityDbfMatchingPlugin, StateDbfMatchingPlugin, CoordinatesMatchingPlugin, CountyDbfMatchingPlugin, CensusTractsDbfMatchingPlugin, CensusBlockDbfMatchingPlugin, CensusBlockGroupDbfMatchingPlugin. 
  
 When we process the Match operation to search the results, it would loop through all internal plugins and return all results to user, but when I get the final results, we dose not return it to user immediately, we would evaluate the results to re-sort the results so that we can return the closest results from top to bottom.  So usually, when you search an address, it would return you more than 1 result, but the top 1-3 results are the closest results for your search address. 
  
 If you have any questions please let me know, 
  
 Thanks, 
  
 Scott,