Thursday 4 June 2015

gis principle - What is reverse geocoding?


I am the developper of gisgraphy. I plan to update my reverse geocoding service to house numbers (it was only for streets).


Understanding what reverse geocoding is seems very simple and wikipedia says:




Reverse geocoding is the process of back (reverse) coding of a point location (latitude, longitude) to a readable address or place name



But; imagine I am on a highway (let's say street A) and there is a house in 5 kilometers (house A), an hotel ( hotel A) in 1.5 kilometers on that road, and there is an street intersection (street B) in 2 kilometers where there is a house (house B) in 1 kilometers (so house B is at 3km from where i am).


If I reverse geocode my current position, what do I should expect:



  • The street A (cause house A is too far and reverse geocoding is only about address, not POI ),

  • The hotel A, cause it is the nearest place on the road where I am, and geocoding is not only about address but also about POI)

  • The house A cause it is the nearest house on the road I am

  • The house B (cause it is the nearest house, even if it is not on my road)



What are the usages?


I am sure it depends on what you want, but what reverse geocoder usually do ?


I already have a street search API by position and a find nearby (POI), should I simply search the nearest 'feature' (street, house, poi, whatever...) or limit geocoding to address only ?



Answer



The answer to this could be VERY broad in that it really does depend on what you want it to do. Generally, the way a complex geocoding system works is there are multiple layers that the geocode operation runs against, in a specified order. So, for example, many of them will look and try and match the input up with a point of interest by name, then it'll try and match against address points, then it'll try and interpolate an address by a road, and finally it may resort to using generic community name &/or zipcode matches. Furthermore, many of these will have some sort of threshold system set up for each layer, such as allowing a low match tolerance for POI matches because someone may have slightly mis-spelled something (matching Bob Mountain Range with Bob Mountains), but having higher tolerances for addresses because you don't want it to take you to West Main St instead of East Main St. So, when you type in an address to geocode, it will search these different layers, in order, looking for matches and will return the best match from the first layer that returns a sufficiently precise match to meet that layer's threshold.


Now, I say all that because reverse geocoding can work very similarly, if only in reverse. Instead of the user providing an address and it doing textual searches through attribute tables of layers and returning the geometry of matching features or interpolated geometries; you provide a location and it searches the geometries of various layers and returns the attributes or interpolated attribute of a nearby feature. However, a complex geocoder should be able to support complex reverse geocoding as well. Just as you can set tolerances for geocoding, you should be able to set layer specific thresholds for reverse geocoding. So, just for example, you provide an input XY location and it searches within, lets say, 0.75 mile for a matching POI. If no POI is returned, it looks within 0.5 miles for an address point. If no address point it searches within 1 mile for a road to interpolate an address from. If no road it searches within 10 miles for the closest zipcode or city center. Now, that is just an example, but hopefully it gives you some ideas in setting up your new system.


Hope it helps, let us know if you still have questions.


No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...