গুগল ম্যাপ ব্যবহার করে বহুভুজগুলির একটি সেটের মধ্যে ল্যাট / লম্ব পয়েন্ট রয়েছে কিনা তা পরীক্ষা করুন


9

আমি কীভাবে উপরের এসরি (শেফফাইলে ক্যোয়ারী টাস্ক) ব্যবহার করে করব তা জানি, তবে গুগল ম্যাপ ব্যবহার করে এটি কী করা যায়? আমি কি প্রতিটি বহুভুজ জিজ্ঞাসা করতে হবে বা বহুভুজ একটি সেট জিজ্ঞাসা করার জন্য একটি পদ্ধতি আছে?

উত্তর:


9

গুগল ম্যাপস এপিআই ইতিমধ্যে বহুভুজগুলিতে পয়েন্টগুলি পরীক্ষা করার জন্য কোনও পদ্ধতি সরবরাহ করে না। কিছুটা গবেষণা করার পরে আমি রে-কাস্টিং অ্যালগরিদম জুড়ে হোঁচট খেয়েছিলাম যা নির্ধারণ করবে যে কোনও এক্সওয়াই স্থানাংকটি একটি চক্রান্ত আকারের মধ্যে রয়েছে কিনা। এটি অক্ষাংশ এবং দ্রাঘিমাংশে অনুবাদ করবে। নিম্নলিখিতটি এই অ্যালগরিদমটি ব্যবহার করতে 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


হ্যাঁ, রশ্মি Iালাইয়ের পথটি আমার মনে হয়। আমি আসলে অজগর স্ক্রিপ্টের মাধ্যমে সেই অ্যালগরিদমটি নিজেকে ব্যবহার করেছি। আমার বাস্তবায়নটি এখানে পাওয়া যাবে: গ্রামকি.ব্লগস্পট.কম
১২

দ্রাঘিমাংশ 0 এর চারপাশে সঠিকভাবে কাজ করার জন্য আমাকে বিটগুলি negative
ণাত্মক

4

আমি ওপেন লেয়ার প্লাগইন যাব; এটি আনুন এবং আপনি তারপরে আপনার মানচিত্র এবং রফতানিতে যে কোনও গতিশীল স্তর যুক্ত করতে পারেন।

* এটি করার আগে, নিশ্চিত করুন যে আপনি আপনার প্রকল্প সিআরএস (ইপিএসজি) WGS84 তে সেট করেছেন এবং 'ফ্লাই অন' সিআরএস রূপান্তরটি আপনার প্রকল্পের বৈশিষ্ট্য সেটিংসের আওতায় সক্ষম হয়েছে।

আশাকরি এটা সাহায্য করবে.


0

আপনি যদি জিওডজ্যাঙ্গো হিসাবে তৃতীয় পক্ষের প্রোগ্রামটি ব্যবহার করেন তবে বহুভুজের সেটগুলির মধ্যে আপনার পয়েন্টটি পরীক্ষা করে দেখতে পারেন। আরও তথ্য এখানে

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)

আমি এটি আপনাকে সাহায্য করে আশা করি...


0

আমি জানি যে এটি কিছুটা দেরি হয়ে গেছে তবে কেউ কেউ অ্যান্ড্রয়েড-ম্যাপ-ইউটিলেস লাইব্রেরি ব্যবহার না করে এমন ক্ষেত্রে এটি সহায়ক হতে পারে। আমি এই প্রশ্নটির নির্দিষ্ট পদ্ধতিগুলি কেবল অ্যান্ড্রয়েডের জন্য পোস্ট করেছি। আপনি এখানে যান:

https://stackoverflow.com/a/31988461/2054348

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.