উত্তর:
গুগল ম্যাপস এপিআই ইতিমধ্যে বহুভুজগুলিতে পয়েন্টগুলি পরীক্ষা করার জন্য কোনও পদ্ধতি সরবরাহ করে না। কিছুটা গবেষণা করার পরে আমি রে-কাস্টিং অ্যালগরিদম জুড়ে হোঁচট খেয়েছিলাম যা নির্ধারণ করবে যে কোনও এক্সওয়াই স্থানাংকটি একটি চক্রান্ত আকারের মধ্যে রয়েছে কিনা। এটি অক্ষাংশ এবং দ্রাঘিমাংশে অনুবাদ করবে। নিম্নলিখিতটি এই অ্যালগরিদমটি ব্যবহার করতে google.maps.polygon.prototype প্রসারিত করে। গুগল.ম্যাপস লোড হওয়ার পরে কোডের এক পর্যায়ে কেবল এই কোডটি অন্তর্ভুক্ত করুন:
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);
}
};
এখানে আমরা 'কন্টেন্টস' নামের একটি ফাংশন সংজ্ঞায়নের মাধ্যমে গুগল.ম্যাপস.পলিগনের কার্যকারিতা বাড়িয়েছি যা ফাংশন প্যারামিটারে প্রদত্ত অক্ষাংশ দ্রাঘিমাংশ বহুভুজের মধ্যে রয়েছে কিনা তা নির্ধারণ করতে ব্যবহার করা যেতে পারে। এখানে আমরা রে-কাস্টিং অ্যালগরিদম ব্যবহার করি এবং একইটি ব্যবহার করে একটি ফাংশন বিকাশ করি। এখন অনেক অনুশীলন করার পরে, আমরা নিম্নলিখিত হিসাবে একটি পয়েন্ট পরীক্ষা করতে পারি:
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
আমি ওপেন লেয়ার প্লাগইন যাব; এটি আনুন এবং আপনি তারপরে আপনার মানচিত্র এবং রফতানিতে যে কোনও গতিশীল স্তর যুক্ত করতে পারেন।
* এটি করার আগে, নিশ্চিত করুন যে আপনি আপনার প্রকল্প সিআরএস (ইপিএসজি) WGS84 তে সেট করেছেন এবং 'ফ্লাই অন' সিআরএস রূপান্তরটি আপনার প্রকল্পের বৈশিষ্ট্য সেটিংসের আওতায় সক্ষম হয়েছে।
আশাকরি এটা সাহায্য করবে.
আপনি যদি জিওডজ্যাঙ্গো হিসাবে তৃতীয় পক্ষের প্রোগ্রামটি ব্যবহার করেন তবে বহুভুজের সেটগুলির মধ্যে আপনার পয়েন্টটি পরীক্ষা করে দেখতে পারেন। আরও তথ্য এখানে ।
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)
আমি এটি আপনাকে সাহায্য করে আশা করি...
আমি জানি যে এটি কিছুটা দেরি হয়ে গেছে তবে কেউ কেউ অ্যান্ড্রয়েড-ম্যাপ-ইউটিলেস লাইব্রেরি ব্যবহার না করে এমন ক্ষেত্রে এটি সহায়ক হতে পারে। আমি এই প্রশ্নটির নির্দিষ্ট পদ্ধতিগুলি কেবল অ্যান্ড্রয়েডের জন্য পোস্ট করেছি। আপনি এখানে যান: