There is google.maps.geometry.poly.containsLocation:

https://developers.google.com/maps/documentation/javascript/reference#poly

On Thursday, January 10, 2013 11:59:54 PM UTC+11, Abhishek Gahlout wrote:
>
> The Google maps API does not already provide a method for checking points 
> in polygons. After researching a bit I stumbled across the Ray-casting 
> algorithm which will determine if an X-Y coordinate is inside a plotted 
> shape. This will translate to latitude and longitude. The following extends 
> the google.maps.polygon.prototype to use this algorithm. Simply include 
> this code at a point in the code after google.maps has loaded:
>
> google.maps.Polygon.prototype.Contains = function(point) { var crossings = 
> 0, path = this.getPath();
>
>     // for each edge
>     for (var i=0; i < path.getLength(); i++) {
>         var a = path.getAt(i),
>             j = i + 1;
>         if (j >= path.getLength()) {
>             j = 0;
>         }
>         var b = path.getAt(j);
>         if (rayCrossesSegment(point, a, b)) {
>             crossings++;
>         }
>     }
>
>     // odd number of crossings?
>     return (crossings % 2 == 1);
>
>     function rayCrossesSegment(point, a, b) {
>         var px = point.lng(),
>             py = point.lat(),
>             ax = a.lng(),
>             ay = a.lat(),
>             bx = b.lng(),
>             by = b.lat();
>         if (ay > by) {
>             ax = b.lng();
>             ay = b.lat();
>             bx = a.lng();
>             by = a.lat();
>         }
>         // alter longitude to cater for 180 degree crossings
>         if (px < 0) { px += 360 };
>         if (ax < 0) { ax += 360 };
>         if (bx < 0) { bx += 360 };
>
>         if (py == ay || py == by) py += 0.00000001;
>         if ((py > by || py < ay) || (px > Math.max(ax, bx))) return false;
>         if (px < Math.min(ax, bx)) return true;
>
>         var red = (ax != bx) ? ((by - ay) / (bx - ax)) : Infinity;
>         var blue = (ax != px) ? ((py - ay) / (px - ax)) : Infinity;
>         return (blue >= red);
>
>     }
>
>  };
>
> Here we have extended the functionality of google.maps.Polygon by defining 
> a function with name ‘Contains’ which can be used to determine whether the 
> latitude longitude provided in function parameter are within the polygon or 
> not. Here we make use of Ray-casting algorithm and developed a function 
> using the same. After doing this much of exercise now, we can check a point 
> as follows:
>
> var point = new google.maps.LatLng(52.05249047600099, -0.6097412109375); 
> var polygon = new google.maps.Polygon({path:[INSERT_PATH_ARRAY_HERE]}); if 
> (polygon.Contains(point)) { // point is inside polygon }
>
> For complete code and demo please go to: 
> http://counsellingbyabhi.blogspot.in/2013/01/google-map-check-whether-point-latlong.html
>
>
> On Sunday, June 13, 2010 12:28:23 PM UTC+5:30, taylor wrote:
>>
>>
>> I am trying to determine if a latitude longitude point is in a 
>> polygon. Classic point in polygon issue. I see google has build a 
>> solutions because they can detect if a point click is in polygon.  I 
>> would assume i can step backwards and little and detect if a lat,long 
>> point is in the polygon(i just dont know how). basically i have array 
>> of points aka "bermudaTriangl" and a latlong point- but i want to get 
>> true or false with no click. 
>>
>> Any suggestions??? 
>>
>>
>>  // Add a listener for the click event 
>>   google.maps.event.addListener(bermudaTriangle, 'click', showArrays);
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google Maps JavaScript API v3" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-maps-js-api-v3/-/lmrYX7BKyssJ.
To post to this group, send email to google-maps-js-api-v3@googlegroups.com.
To unsubscribe from this group, send email to 
google-maps-js-api-v3+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-maps-js-api-v3?hl=en.

Reply via email to