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 [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-maps-js-api-v3?hl=en.