Google Maps API - detect when crossing state lines and calculate distance travelled in each state

匿名 (未验证) 提交于 2019-12-03 02:16:02

问题:

I am using google maps api to calculate the number of miles my company's vehicles travel in each state over a period of time. For trips taken over the period, the user will create routes on the map, and the program should be able to generate some output like: 'Maryland: 100 miles, Virginia: 500 miles", etc.

I'm pretty sure I can do it by sending a DirectionsService request and iterating over the response.routes[i].legs[i].steps[i].path array, but unfortunately this requires sending Geocoder requests on thousands of LatLngs, which quickly puts me over my quota. Is there a better way to go about this? I really only need to detect when the route crosses a state line and break it into separate routes, but I don't know how I would do that without iterating over the path array.

回答1:

If you have 1000 elements in your path array and you are binary searching (instead of iterating), it should only take 12 calls to LatLng to determine where the path crosses the border.

What sort of feedback do you get when you go over quota? If it's an exception return, you could always do the 3.5 second wait only when you receive the quota pushback.



回答2:

Looking at the directions text in the panel, it looks like the text "Entering " appears in the steps that cross state boundaries.
http://www.geocodezip.com/v3_example_geo2.asp?addr1=New%20York,NY&addr2=Washington,%20DC&geocode=1&geocode=2

  • Entering New Jersey
  • Entering Delaware
  • Entering Maryland
  • Entering District of Columbia

(this is not documented, so might stop working)

You could also find the intersection of the Directions polyline with a set of state polygons.



回答3:

Personally, I would use GeoNames for something like this, not Google.

With Geonames, you will most likely run into quota problems as with Google, however, there's a big difference ... Geonames allows you to download various datasets so you can provide your own self-hosted geo-service(s) ... sans quota.

I've never needed to do this so can only advise you to rummage round in the Geonames site for instructions.

In principle, you need to :

  • Download the US.zip dataset and install on a server (or localhost for development)
  • Write a specialized (RESTful) webservice (eg. in PHP) which does all the state line crossing calcs and returns a JSON-encoded list of mileages per state.

By doing the hard math server-side and returning bundled results, you will only need to make one HTTP request (per company vehicle).

Of course, the server will need the appropriate lat/lng path data but from what you say in the question, that's already server-side, so no need for it to be downloaded to the client just to be resent in the request.

Interesting project. From the outset, you will need to think about your testing/verification strategy.

Sorry I can't be of more help but maybe this gives you a way ahead.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!