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/-/wATj3ts-eTAJ.
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.