دسته بندی ها
07:09 1404/01/24

دریافت موقعیت مکانی (Current Location) کاربر در Blazor

مشخصات سوال کننده :
کاربر : mojtabahakimian     امتیاز کاربر : 155     رتبه کاربر : 10
دسته بندی : Blazor Asp.net Core

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 453
5 نظر
hamid_b : یه سوال داشتم از شما. برای دریافت موقعیت مگه نباید gps داشته باشیم ؟ مثلا تو گوشی موبایل باید gps رو روشن کنیم تا موقعیت رو به ما بده. تو لپ تاپ میشه بدون داشتن gps موقعیت رو پیدا کرد ؟

امتیاز کاربر : 518   رتبه کاربر : 4   تاریخ ثبت : 09:15 1404/01/24
fateme : ای کاش کدها رو در یک پروژه سمپل قرار می دادید تا بتونیم تست کنیم. موضوع خیلی خوبیه

امتیاز کاربر : 1635   رتبه کاربر : 2   تاریخ ثبت : 03:36 1404/01/24
mojtabahakimian : یه سمپل کوچیک گذاشتم , ظاهرا برای دسکتاپ گر GPS نداشته باشه میره سراغ لوکیشن IP

امتیاز کاربر : 155   رتبه کاربر : 10   تاریخ ثبت : 06:44 1404/01/24
saedbfd : فایلی که قرار دادید دانلود نمیشه جهت تست و رفع اشکال

امتیاز کاربر : 1664   رتبه کاربر : 1   تاریخ ثبت : 03:05 1404/01/26
fateme : متاسفانه لینک سورسی که قرار دادید مشکل داره و نمیشه دانلود کرد

امتیاز کاربر : 1635   رتبه کاربر : 2   تاریخ ثبت : 12:06 1404/01/27
ادامه نظرات ...
هوش مصنوعی

پاسخ هوش مصنوعی

برای دریافت موقعیت مکانی کاربر در Blazor WebAssembly، شما به کد جاوا اسکریپت و همچنین کد C# در بخش Razor نیاز دارید. در اینجا مراحل کامل را دنبال می کنید:

ابتدا فایل جاوا اسکریپت را در مسیر wwwroot/js/geolocation.js قرار دهید:

// File: wwwroot/js/geolocation.js
window.blazorGeolocation = {
    getCurrentPosition: function () {
        return new Promise((resolve, reject) => {
            if (!navigator.geolocation) {
                reject("مرورگر شما از دریافت موقعیت مکانی پشتیبانی نمی کند.");
                return;
            }

            navigator.geolocation.getCurrentPosition(
                position => {
                    // در صورت موفقیت، موقعیت و یک پیام شامل دقت (اگر موجود باشد) را برگردان
                    resolve({
                        success: true,
                        latitude: position.coords.latitude,
                        longitude: position.coords.longitude,
                        message: `موقعیت دریافت شد.${position.coords.accuracy ? ' دقت تخمینی: ' + position.coords.accuracy.toFixed(0) + ' متر' : ''}`
                    });
                },
                error => {
                    let errorMessage = "خطای نامشخص در دریافت موقعیت.";
                    switch (error.code) {
                        case error.PERMISSION_DENIED:
                            errorMessage = "دسترسی به موقعیت مکانی توسط کاربر رد شد.";
                            break;
                        case error.POSITION_UNAVAILABLE:
                            errorMessage = "اطلاعات موقعیت مکانی در حال حاضر در دسترس نیست. لطفاً از فعال بودن GPS یا سرویس موقعیت یابی دستگاه اطمینان حاصل کنید و دوباره تلاش کنید.";
                            break;
                        case error.TIMEOUT:
                            errorMessage = "زمان درخواست برای دریافت موقعیت به پایان رسید. ممکن است سیگنال ضعیف باشد یا سرویس موقعیت یابی پاسخ ندهد.";
                            break;
                    }
                    reject(errorMessage); // فقط پیام خطا را برگردان
                },
                {
                    enableHighAccuracy: true, // درخواست دقت بالا (برای استفاده از GPS در صورت امکان)
                    timeout: 20000,          // افزایش زمان انتظار به 20 ثانیه
                    maximumAge: 0            // دریافت موقعیت جدید
                }
            );
        });
    }
};

سپس، در فایل wwwroot/index.html، این کد را برای وارد کردن فایل جاوا اسکریپت به <body> اضافه کنید:

<script src="js/geolocation.js"></script>

حالا کد C# زیر را در صفحه مورد نظر خود قرار دهید تا موقعیت جغرافیایی کاربر را بگیرید:

@code {
 private async Task FetchAndSetCurrentLocation()
 {
     isFetchingLocation = true;
     try
     {
         var result = await JSRuntime.InvokeAsync<GeolocationResult>("blazorGeolocation.getCurrentPosition");

         if (result.Success && result.Latitude.HasValue && result.Longitude.HasValue)
         {
             customerModel.Latitude = result.Latitude.Value;
             customerModel.Longitude = result.Longitude.Value;
         }
         else
         {
             customerModel.Latitude = null;
             customerModel.Longitude = null;
         }
     }
     catch (JSException jsEx)
     {
         customerModel.Latitude = null;
         customerModel.Longitude = null;
     }
     catch (Exception ex)
     {
         customerModel.Latitude = null;
         customerModel.Longitude = null;
     }
     finally
     {
         isFetchingLocation = false;
     }
}

لطفاً برای دریافت موقعیت مکانی، این کد را در قسمت دکمه های خود در Razor component قرار دهید و عملکرد آن را تست کنید. توجه داشته باشید که ممکن است با VPN روشن یا خاموش، نتایج مختلفی دریافت کنید.

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

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود