जवाबों:
Google मैप्स API पहले से ही बहुभुजों में बिंदुओं की जाँच के लिए एक विधि प्रदान नहीं करता है। थोड़ा शोध करने के बाद, मैं रे-कास्टिंग एल्गोरिथ्म में ठोकर खाई, जो यह निर्धारित करेगा कि एक XY समन्वय एक प्लॉट किए गए आकार के अंदर है। यह अक्षांश और देशांतर में अनुवाद करेगा। निम्न इस एल्गोरिथ्म का उपयोग करने के लिए google.maps.polygon.prototype का विस्तार करता है। Google.maps के लोड होने के बाद बस इस कोड को एक बिंदु पर कोड में शामिल करें:
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);
}
};
यहाँ हमने google.maps.Polygon की कार्यक्षमता को 'Contains' नाम से एक फ़ंक्शन को परिभाषित करके बढ़ाया है, जिसका उपयोग यह निर्धारित करने के लिए किया जा सकता है कि फ़ंक्शन पैरामीटर में दिए गए अक्षांश देशांतर बहुभुज के भीतर हैं या नहीं। यहां हम रे-कास्टिंग एल्गोरिथ्म का उपयोग करते हैं और उसी का उपयोग करके एक फ़ंक्शन विकसित किया है। अब यह बहुत अभ्यास करने के बाद, हम एक बिंदु की जाँच कर सकते हैं:
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
}
पूर्ण कोड और डेमो के लिए कृपया यहां जाएं: http://counsellingbyabhi.blogspot.in/2013/01/google-map-check-whether-point-latlong.html
मैं ओपन लेयर्स प्लगइन पर जाऊंगा; इसे लाएँ, और फिर आप जो भी गतिशील परत अपने मानचित्र और निर्यात में जोड़ सकते हैं।
* ऐसा करने से पहले, सुनिश्चित करें कि आपके पास अपनी परियोजना सीआरएस (ईपीएसजी) डब्ल्यूजीएस84 पर सेट है, और यह कि 'फ्लाई पर' सीआरएस परिवर्तन आपकी परियोजना गुण सेटिंग्स के तहत सक्षम है।
उम्मीद है की यह मदद करेगा।
यदि आप तीसरे पक्ष के कार्यक्रम को जियोजेन्जैंगो के रूप में उपयोग करते हैं, तो आप अपनी बात की जांच कर सकते हैं कि पॉलीगॉन के सेट के भीतर है या नहीं। अधिक जानकारी यहाँ है ।
contains
Availability: PostGIS, Oracle, MySQL, SpatiaLite
Tests if the geometry field spatially contains the lookup geometry.
Example:
Zipcode.objects.filter(poly__contains=geom)
Backend SQL Equivalent
PostGIS ST_Contains(poly, geom)
Oracle SDO_CONTAINS(poly, geom)
MySQL MBRContains(poly, geom)
SpatiaLite Contains(poly, geom)
मुझे उम्मीद है इससे आपको मदद मिली होगी...
मुझे पता है कि यह थोड़ा देर से है, लेकिन ऐसा हो सकता है कि कोई व्यक्ति Android-मैप-यूटिल्स लाइब्रेरी की कोशिश न करे। मैंने इस प्रश्न के विशिष्ट तरीकों को केवल Android के लिए पोस्ट किया है। हेयर यू गो: