ThinkGeo.com    |     Documentation    |     Premium Support

Way to get the best result from all three APIs

 I have a couple questions on how to get the best result out of the geocoding APIs.  Just for reference purposes I'll list the three calls here:



        
  1. Match(String sourceText)

  2.     
  3. Match(String street, String zipcode)

  4.     
  5. Match(String street, String city, String state)


The main problem is that I don't know which pieces of the address I'm going to obtain from the client, I could receive as little as one piece of information, or I could receive the full address including house number, street, city, state, and zip code.  At the same time, I don't necessarily want to call all three functions with the information I do receive because that might be time consuming in some cases.  Is there a way for me to efficiently use these APIs to receive the best result if I'm given partial address information? 


I noticed in another forum post that the first API shouldn't contain the house number and zip code, and should contain one or the other, and in my testing I've noticed that the second API is usually the fastest(and if it returns a result, it's the correct result, as far as I can tell).  So what I've been thinking of is something like this:


1. if street and zip are not null or empty, use API #2


2. if no answer comes back, use APIs 1 and 3 based on the information given by the client


Which API would be better to use first(assuming complete information is given)?  Also, for the first API, do you know if it's better to give the house number, street, city, and state, or is it better to use the street, city, state, and zip code?  I would expect the house number, street, city, and state to return a more accurate result, since each street has multiple sections and calling the first API with a zipcode and no house number may give the right street, but the wrong section.


I've also noticed when using the first API, if I do give it all pieces(house number and zip code included) the best result returns a good chunk of the time, but I have noticed calling the first API without a zip code is fairly slow compared to without(which I understand is because the search area is reduced greatly by having the zip code in there).


 


Thanks in advance,


Ryan



Ryan, 
  
 Thanks for your questions! 
  
 For each match API I will explain it separately below: 
  
 1, Match(String sourceText): 
  
 For this Match API you can input any search text what you want no matter the format, the MapSuite Geocoder will formalize it first then match the formalized text loop through all of the internal plugins. For this API I need to tell you a little thing about the MapSuiteGeocoder’s structure: 
  
 The MapSuiteGeocoder is Plugin structure, when you use this API to match an address, default, it would be matched for 9 internal plugins, the 9 internal plugins are:  
  
 StreetMatchingPlugin, ZipDbfMatchingPlugin, CityDbfMatchingPlugin, StateDbfMatchingPlugin, CoordinatesMatchingPlugin, CountyDbfMatchingPlugin, CensusTractsDbfMatchingPlugin, CensusBlockDbfMatchingPlugin, CensusBlockGroupDbfMatchingPlugin.  
  
 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.  
  
 Why this API would loop through all of the internal plugins the reason is that for this API the user is able to input any search text what he want and we are not sure what’s the exact input should be match in which plugin, maybe street address, city, state or county and so on. So we have to loop though all of the internal plugins and return all of the properly results to user. This is a general match operation if you are not sure the type of search text from the client I suggest you to use this API to match. However, as you mentioned if you use this API the speed is a little slow than the other two APIs, because this Match API will loop through all of the internal plugins and search.  
  
 For this API, about the street match with house number or zipcode issue what you mentioned above, if the user must to input the street address with house number or zipcode, if the use dose not input them the StreetMatchingPlugin would return nothing for this street address. If the use inputs the street address with house number, zipcode or both, the work flow is that the StreetMatchingPlugin would search all of the possible street addresses inside the zipcode area then search the returned streets addresses according to the house number range. So the result is that if the user inputs both the zipcode and house number for a street address, the accuracy is higher than just input one, also obviously it would cost a little performance. 
  
 I will tell you the details for the other two APIs later so that you can clear it fully. 
  
 2, Match(String street, String zipcode): 
  
 This Match API just calls the StreetMatchingPlugin to search the streets inside the input zipcode zone and return all of the possible street results within this zipcode zone. If you are sure the input text is this format: street + zipcode, I suggest you to use this API to search directly.  
  
 3, Matct(String street, String city, String state): 
  
 This Match API just calls the StreetMatchingPlugin to search the streets inside the input state and city zones and return all of the possible street results within the special city and state. If you are sure the input text is this format: street + city + state, I suggest you to use this API to search directly.  
  
 Summary the first API has strongest function to search, you can input anything to search such as the full address including house number, street, city, state and zip code. The other two APIs are used to the match for the special format. About the performance, obviously, the first API has slower speed than the other two APIs. 
  
 Hope the answers is useful for you, if you misunderstand anything or else anything please let me know, 
  
 Thanks, 
  
 Scott, 


Scott, 
  
 Thank you so much this clears up a lot.  I’ll let you know if I come up with any more questions on this. 
  
 Best Regards, 
  
 Ryan

Ryan, 
  
 You are welcome, any more questions please us know again, 
  
 Thanks, 
  
 Scott,