আমি http://ecname.org.uk/gmap থেকে জনপ্রিয় এপোলি কোডটি প্রসারিত করে আমার সমস্যার সমাধান করেছি । মূলত আমি যা করে শেষ করেছি তা হ'ল:
- "মিথ্যা সেন্ট্রয়েড" থেকে শুরু হয়ে প্রতিটি কোণ এবং পাশ পর্যন্ত প্রসারিত (8 টি মোট) রশ্মির একটি সিরিজ তৈরি করুন
- ক্রমান্বয়ে 10,20,30 পয়েন্ট তৈরি করুন ... প্রতিটি রশ্মি নিচে শতাংশ করুন এবং দেখুন যে এই বিন্দুটি আমাদের মূল বহুভুজের মধ্যে রয়েছে কিনা
নীচে বর্ধিত এপোলি কোড:
google.maps.Polygon.prototype.Centroid = function() {
var p = this;
var b = this.Bounds();
var c = new google.maps.LatLng((b.getSouthWest().lat()+b.getNorthEast().lat())/2,(b.getSouthWest().lng()+b.getNorthEast().lng())/2);
if (!p.Contains(c)){
var fc = c; //False Centroid
var percentages = [0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9]; //We'll check every 10% down each ray and see if we're inside our polygon
var rays = [
new google.maps.Polyline({path:[fc,new google.maps.LatLng(b.getNorthEast().lat(),fc.lng())]}),
new google.maps.Polyline({path:[fc,new google.maps.LatLng(fc.lat(),b.getNorthEast().lng())]}),
new google.maps.Polyline({path:[fc,new google.maps.LatLng(b.getSouthWest().lat(),fc.lng())]}),
new google.maps.Polyline({path:[fc,new google.maps.LatLng(fc.lat(),b.getSouthWest().lng())]}),
new google.maps.Polyline({path:[fc,b.getNorthEast()]}),
new google.maps.Polyline({path:[fc,new google.maps.LatLng(b.getSouthWest().lat(),b.getNorthEast().lng())]}),
new google.maps.Polyline({path:[fc,b.getSouthWest()]}),
new google.maps.Polyline({path:[fc,new google.maps.LatLng(b.getNorthEast().lat(),b.getSouthWest().lng())]})
];
var lp;
for (var i=0;i<percentages.length;i++){
var percent = percentages[i];
for (var j=0;j<rays.length;j++){
var ray = rays[j];
var tp = ray.GetPointAtDistance(percent*ray.Distance()); //Test Point i% down the ray
if (p.Contains(tp)){
lp = tp; //It worked, store it
break;
}
}
if (lp){
c = lp;
break;
}
}
}
return c;}
এখনও কিছুটা হ্যাকি তবে এটি কাজ করে বলে মনে হচ্ছে না।