جشنواره عیدانه راکت | عضویت ویژه راکت برای آخرین بار | افزایش قیمت‌ها از سال جدید | و ...

مشاهده اطلاعات بیشتر...
ثانیه
دقیقه
ساعت
روز
مسعود ابراهیمی
4 سال پیش توسط مسعود ابراهیمی مطرح شد
3 پاسخ

سرچ لوکیشن های موجود در یک محدوده مشخص

سلام خدمت همه دوستان و مدیریت سایت راکت .
بچه ها من یه سایت مشابه سایت کلید طراحی کردم
حالا می خوام وقتی کاربر روی نقشه یک محدوده رو مشخص می کنه ، آگهی های که توی اون محدوده هستند رو بگیره
بخش فرانت اندش تکمیله اما نمی دونم که توی سرور چطوری آگهی ها رو فیلتر کنم
ممنون میشم اگر راهنماییم کنید .
همه آگهی ها لوکشن دقیق دارن و اینکه وقتی که کاربر یک محدوده رو مشخص می کنه
داده ای که به سرور ارسال میشه شامل طول و عرض جغرافیای نقاط مرزی محدوده مشخص شده هستند .


ثبت پرسش جدید
امین محمدزاده
تخصص : برنامه نویسی وب - Laravel
@amin.webdesign 4 سال پیش مطرح شد
0

سلام. شما فکر نکنم بتونی از توی دیتابیس بر اساس اون چیزی که مدنظرت هست فیلتر کنی.
ولی یه راهی بهت میگم احتمالا مشکلتو حل کنه. در واقع شما آگهی های مرتبط رو از دیتابیس میخونی و با یه کد جی کوئری که برات میفرستم تشخیص میدی که لوکیشن آگهیت توی اون محدوده هست یا نه. اگه بود روی نقشه مارکر میزنی
البته نمیدونم شما از چه کتابخونه ای استفاده میکنی برای رسم محدوده. من با Leaflet.js کار کردم و این کد رو هم استفاده کردم توش.
در واقع شما دو تا ورودی به این کد میدی. یکیش محدوده یا همون Polygon که ساختی رو دقیقا آبجکتش رو میدی به این به عنوان ورودی دوم و ورودی اول هم مارکری که ساختی آبجکتش رو بهش میدی. این مقدار true یا false برمیگردونه که اگه مقدار true برگشت داد اون مارکر رو اضافه میکنی به نقشه.
باز هم میگم این کد برای کتابخونه Leaflet.js بهینه شده.

function isMarkerInsidePolygon(markerObject, polygonObject) {
        let polyPoints = [];
        let x = markerObject.getLatLng().lat, y = markerObject.getLatLng().lng;
        let inside = false;
        polyPoints = polygonObject.getLatLngs();
        for (let i = 0, j = polyPoints[0].length - 1; i < polyPoints[0].length; j = i++) {
            let xi = polyPoints[0][i].lat, yi = polyPoints[0][i].lng;

            let xj = polyPoints[0][j].lat, yj = polyPoints[0][j].lng;
            let intersect = ((yi > y) !== (yj > y))
                && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
            if (intersect) inside = !inside;
        }
        return inside;
    }

مسعود ابراهیمی
تخصص : طراحی و برنامه نویسی وب
@ebrahimimasod 4 سال پیش مطرح شد
0

دوست عزیز @amin.webdesign
خیلی ممنون که راهنمایی کردی
اتفاقا منم از leaflet استفاده کردم
ولی فکر نکنم با این روش حل بشه چون تعداد آگهی ها خیلی زیاده اگر توی سرور فیلتر نشه اصلا مرورگر کرش می کنه


مسعود ابراهیمی
تخصص : طراحی و برنامه نویسی وب
@ebrahimimasod 4 سال پیش مطرح شد
0

دوست عزیز @amin.webdesign
اقای محمد زاده من کد شما رو توی سرور به کار بردم و تست کردم ، کار می کنه
خلاصه دمتگرم ❤❤❤


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام