Constructing Intersections from Google Maps API
Asked Answered
M

1

6

Problem:

I am trying to reverse geocode a lat/long into a closest street intersection using Google Maps API V3. Also, for now, this doesn't have to be super accurate-- as I am just trying to anonymize an address as opposed to providing directions.

I have seen that the Geocoding Results data contains an Address Component Type of "Intersection", but this doesn't seem to be consistent at all in the return results-- and is more often that not blank.

I have also done some looking on SO for the best way to construct this barring getting it from Google directly, and the closest I have seen is: How can I find the nearest intersection via the Google Maps API?, which doesn't really resolve my issue. In light of this I have come up with my own solution, and would like some opinions, optimizations, constructive criticism, or other options entirely.

My Tentative Solution:

After playing around with the API, I decided to give the following algorithm a shot (just for context, this is written in C# within a console app):

  • I take an address and resolve that into a lat/long.

  • I then add or subtract a certain amount of lat or long from the coordinate-- on the order of a city block (a distance which is adjusted given your latitude) and get walking directions between the points. I do this for up to all four directions-- so the first modification would be to keep the latitude the same but subtract some longitude. Then the next modification would be to keep the latitude and add some longitude, etc.

  • After getting the directions, I parse the results and check the start and end address. If they are different, I pull out the street names and treat them as an "intersection" (even though sometimes this results in parallel streets-- again just trying to get a ballpark).

  • If I don't find two different streets, I widen the distance of the end destination and repeat the process.

So far this working well enough, but obviously it is an expensive process both in terms of time, and in using up my allotted query limit. Also, I checked the API terms of service, and as long as I include their disclaimer and display the results on a Google Map I think that I am ok.

My questions for the community are:

  • How can I improve the efficiency of the algorithm? Specifically, in the number of times I call the API (the implementation code is not a problem)

  • Is there another way entirely to do this using the Google Maps API? In the SO question referred to above, the solution was to loop over building numbers. I am not sure exactly what that means-- so any clarification would be great.

  • As referred to above, I do not believe this is breaking the terms of service-- but am I mistaken?

  • Is there another web-based API to use that may meet my needs better? Perhaps Bing, or some other provider?

Thanks a lot for any help.

UPDATE: I have run into my query limit for the day, so I won't be able to test any suggestions against Google today, but I am also still open to using a different API. Thanks.

Militia answered 24/8, 2011 at 17:14 Comment(0)
C
1

Old question, but since the original poster stated they were open to solutions other than Google, Geonames has a web API for this for the U.S. See GeoNames WebServices overview and http://www.geonames.org/maps/us-reverse-geocoder.html#findNearestIntersection

Crossexamine answered 20/6, 2015 at 22:4 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.