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 Thursday, May 19, 2011 3:31:56 PM UTC+5:30, den380 wrote:
>
> Hello Gents, 
>
> i have a task to check if some point is lying inside given polygon. Do 
> anybody have any ideas on this? 
> Any information would be appreciated. 
> Thanks, Dennis.

-- 
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/-/b38yHX3MnAIJ.
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