رفتن به مطلب
  • 0

چگونه نزدیکترین مکان به خود را بیابیم؟


marius

سوال

با سلام 

دوستان من مختصات رو با gps میگیرم و دارم و مختصات جا هاییکه میخوام رو هم دارم. سوالم اینجاست چطوری میتونم مقایسه کنم با دیتا بیس که کدوم نزدیکتره به مختصات من.

مثل نرم افزارهاییکه میگه نزیکترین مکان تاریخی به من مثلا فلان جاست لیست میکنه

یا شعاع 100 متری فلان هتل هست؟

ممنون میشم کمکم کنید

لینک ارسال
به اشتراک گذاری در سایت های دیگر

18 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

در در 1398/03/26, 21:10:28، fun_code گفته است :

سلام

منم همین مورد رو نیاز دارم.

سوالش همینه که چطور مختصات رو به متر تبدیل کنه که بتونه از روی متر نزدیک ترین رو پیدا کنه.

در واقع مختصات دو نقطه رو داریم و چطور بدونیم فاصلشون چند متر است ؟

بنده مختصات ها رو توی دیتابیس روی سرور دارم و میخوام با ارسال مختصاتم در php محاسبه کنه و مکان هایی که در حوالی تا 100 متری بنده هستن رو ارسال کنه.

سلام

خب همین DistanceTo  کارش همینه میاد فاطله بین 2 نقطه رو به متر فکر کنم بر میگردونه

این هم نمونه کد برای php

function distance($lat1, $lon1, $lat2, $lon2, $unit) {
  if (($lat1 == $lat2) && ($lon1 == $lon2)) {
    return 0;
  }
  else {
    $theta = $lon1 - $lon2;
    $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
    $dist = acos($dist);
    $dist = rad2deg($dist);
    $miles = $dist * 60 * 1.1515;
    $unit = strtoupper($unit);

    if ($unit == "K") {
      return ($miles * 1.609344);
    } else if ($unit == "N") {
      return ($miles * 0.8684);
    } else {
      return $miles;
    }
  }
}

echo distance(32.9697, -96.80322, 29.46786, -98.53506, "M") . " Miles<br>";
echo distance(32.9697, -96.80322, 29.46786, -98.53506, "K") . " Kilometers<br>";
echo distance(32.9697, -96.80322, 29.46786, -98.53506, "N") . " Nautical Miles<br>";

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در در 1398/03/29, 15:00:25، majid08 گفته است :

سلام

خب همین DistanceTo  کارش همینه میاد فاطله بین 2 نقطه رو به متر فکر کنم بر میگردونه

این هم نمونه کد برای php

سلام و ممنون

دنبال کوئری بودم که بشه در کدهای sql نزدیک ترین ها رو پیدا کرد.

چون موقعیت مکان ها در دیتابیس هست و نمیشه یکی یکی با کدی که لطف کردین بررسی کرد و ببینیم کدوم نزدیکه... سرعت خیلی میاد پایین.

که پیدا شد :

https://stackoverflow.com/questions/8667647/find-the-nearest-location-in-ms-sql

البته همینم نوشته در داده های زیاد کند میشه ! خب وقتی دیتا بزرگ باشه و کاربران زیاد چکار باید بکنیم ؟!

 

و یه سوال ، من قبلا یه API برای نمایش نقشه گرفتم و الان کار نمیکنه و فهمیدم بدلیل تحریم ها است.

در یک سرور مجازی خارج از کشور API بگیرم مشکل برای همیشه برطرف میشه ؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 5 ساعت قبل، fun_code گفته است :

سلام و ممنون

دنبال کوئری بودم که بشه در کدهای sql نزدیک ترین ها رو پیدا کرد.

چون موقعیت مکان ها در دیتابیس هست و نمیشه یکی یکی با کدی که لطف کردین بررسی کرد و ببینیم کدوم نزدیکه... سرعت خیلی میاد پایین.

که پیدا شد :

https://stackoverflow.com/questions/8667647/find-the-nearest-location-in-ms-sql

البته همینم نوشته در داده های زیاد کند میشه ! خب وقتی دیتا بزرگ باشه و کاربران زیاد چکار باید بکنیم ؟!

 

و یه سوال ، من قبلا یه API برای نمایش نقشه گرفتم و الان کار نمیکنه و فهمیدم بدلیل تحریم ها است.

در یک سرور مجازی خارج از کشور API بگیرم مشکل برای همیشه برطرف میشه ؟

سلام

نقشه گوگل دیگه رایگان نیست

از نقشه های ایرانی استفاده کنید

لینک ارسال
به اشتراک گذاری در سایت های دیگر

جداولت رو چند بخش کن 

ایران رو مثلا بیست قسمت کن بین دقیقه و ثانیه ها 

میتونی مربعی بسازی 

بیست تا بساز منطقه یک تا بیست

شبیه این

این

 

اما مربعای کوچیکتر

اول ببین مکان فعلی تو کدوم بخشه

بعد توی همون بخش رو سرچ کن

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 9 ساعت قبل، mehran3d گفته است :

جداولت رو چند بخش کن 

ایران رو مثلا بیست قسمت کن بین دقیقه و ثانیه ها 

میتونی مربعی بسازی 

بیست تا بساز منطقه یک تا بیست

شبیه این

این

 

اما مربعای کوچیکتر

اول ببین مکان فعلی تو کدوم بخشه

بعد توی همون بخش رو سرچ کن

 

سلام

عکستون باز نشد. " Access Forbidden "

1. و اینکه تشخیص تو کدوم بخشه چطوری است ؟

2. شاید مبدا در یکی از مربع ها و مقصد در مربع بعدی باشه...(با فرض اینکه مثلا تهران رو 6 بخش کنیم.)

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در در 1398/03/30, 22:36:17، majid08 گفته است :

نقشه گوگل دیگه رایگان نیست

از نقشه های ایرانی استفاده کنید

سلام

هزینه اش 200 دلار هست...

استفاده از نقشه های ایرانی منجر نمیشه که بعدا نتونیم به گوگل مهاجرت کنیم ؟(در واقع مختصات های نقشه های ایرانی درست هستن ؟)

و اینکه ایرانی خوبش سیدار مپ هست که ارزانترینش 950 هزار تومان هست !

نشان هم هست که هزینه اش معقول تره و  کتابخانه اش به احتمال 99 درصد برای B4A نیست :biggrin1:

همون چیزی که جز نقص های B4A هست.

 

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 4 ساعت قبل، fun_code گفته است :

سلام

عکستون باز نشد. " Access Forbidden "

1. و اینکه تشخیص تو کدوم بخشه چطوری است ؟

2. شاید مبدا در یکی از مربع ها و مقصد در مربع بعدی باشه...(با فرض اینکه مثلا تهران رو 6 بخش کنیم.)

 

ne  داریم میشه شمال شرقی

se  داریم میشه جنوب شرقی

sw جنوب غربی

nw شمال غربی که

بالای ایران 40 هستش

پایین حدود 26

چپ 44

راست حدود 63

 

 

f276029336.png

میشه حدودا این

 

f94426963.png

محدوده ها رو خودت کامل کن

اینجوری جستجوت خیلی بهتر میشه

احتمالش خیلی کمه که مبدا و مقصد توی مربع مجزا باشن

اگه چیزی چیدا نکرد

نزدیکترین مربع های اطرافشو سرچ کن

اینجا هم مختصات شهرهای ایران هست

https://latitudelongitude.org/ir/

اینم خوبه سایت نقشه برداری ایرانه

gndb.ncc.org.ir/

لینک ارسال
به اشتراک گذاری در سایت های دیگر

یه روش دیگه هم هست

مختصات تقریبا تمام شهرهای ایران اینجا هست با چندین فرمت

https://github.com/jafaripur/iran-locality-database?files=1

میتونی فاصلتو پیدا کنی به اینا

بعد محدوده بندی کنی

که نزدیک کدومه، توی لیست بزار

اولی نزدیکترینه

برای مقصد از لیست اولی استفاده کن

اگه مقصد نبود، دوباره برای مقصد تکرار کن

بهترین عملکرد محدوده بندیه، یا همون زون ساختن

لینک ارسال
به اشتراک گذاری در سایت های دیگر

برای نزدیکترین مکان ها از restfull api

پارسیجو و یا سیدار مپ استفاده کن

https://addmap.parsijoo.ir/addmap/api-های-نقشه/جستجو-در-نقشه

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 16 ساعت قبل، fun_code گفته است :

سلام

عکستون باز نشد. " Access Forbidden "

1. و اینکه تشخیص تو کدوم بخشه چطوری است ؟

2. شاید مبدا در یکی از مربع ها و مقصد در مربع بعدی باشه...(با فرض اینکه مثلا تهران رو 6 بخش کنیم.)

f3482580.jpg

لینک ارسال
به اشتراک گذاری در سایت های دیگر

نقاط اینجوری هستن

#39,42#37,42#35,42#33,42#31,42#29,42#27,42#25,42#23,42#39,44#37,44#35,44#33,44#31,44#29,44#27,44#25,44#23,44#39,46#37,46#35,46#33,46#31,46#29,46#27,46#25,46#23,46#39,48#37,48#35,48#33,48#31,48#29,48#27,48#25,48#23,48#39,50#37,50#35,50#33,50#31,50#29,50#27,50#25,50#23,50#39,52#37,52#35,52#33,52#31,52#29,52#27,52#25,52#23,52#39,54#37,54#35,54#33,54#31,54#29,54#27,54#25,54#23,54#39,56#37,56#35,56#33,56#31,56#29,56#27,56#25,56#23,56#39,58#37,58#35,58#33,58#31,58#29,58#27,58#25,58#23,58#39,60#37,60#35,60#33,60#31,60#29,60#27,60#25,60#23,60#39,62#37,62#35,62#33,62#31,62#29,62#27,62#25,62#23,62#39,64#37,64#35,64#33,64#31,64#29,64#27,64#25,64#23,64

با رجکس جداشون کن

بصورت

lat,long

دوازده ستون نه تایی

ما نقطه ای داریم مثلا
 

lat=40

long=45

sourcepoint=lat,long=40,45

مثال چهار نقطه سمت چپ بالا رو فرض کنیم ناحیه یک

چهار نقطه گوشش میشن نقطه یک و دو و سیزده و چهارده
 

point1=lat,long>>39,42

point2=lat,long>>>37,42

point13=lat,long>>>33,44

point14=lat,long>>>31,44

اول باید چک کنیم که توی این محدوده کلی ایران هست یا نه؟

پس باید نقاط یک و 12 و108و96 رو چک کنیم
 

point1=lat,long>>39,42

point12=lat,long>>>35,44

point96=lat,long>>>29,62

point108=lat,long>>>23,64

if sourcepoint.lat >point96.lat and  sourcepoint.lat < point1.lat then

endif

 

همچین چیزی دیگه حوصلم تموم

خودتون متوجه بشین که توی کدوم بخش می افته

و بخشها رو توی دیتا بیستون تیبل بسازید سرچ کنید

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در در 1398/04/01, 08:21:29، mehran3d گفته است :

برای نزدیکترین مکان ها از restfull api

پارسیجو و یا سیدار مپ استفاده کن

https://addmap.parsijoo.ir/addmap/api-های-نقشه/جستجو-در-نقشه

 

سلام

از راهنمایی های شما متشکرم

فقط وب سایت ها که نقاط کاربران و یا نقاط مد نظر ما رو ندارن که بخوان جستجو کنن در دیتابیسشون.

و موندم که چه کاریه تفکیک سازی کنیم !

وقتی که میدونیم طرف مد نظرش جستجو در نزدیک ترین کدوم شهره !

فرضا کاربر انتخاب کرده  شهر تهران

پس جستحو رو در مکان هایی که موقعیتشون رو شهر تهران انتخاب کردن جستجو میکنیم.

درسته ؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 54 دقیقه قبل، fun_code گفته است :

سلام

از راهنمایی های شما متشکرم

فقط وب سایت ها که نقاط کاربران و یا نقاط مد نظر ما رو ندارن که بخوان جستجو کنن در دیتابیسشون.

و موندم که چه کاریه تفکیک سازی کنیم !

وقتی که میدونیم طرف مد نظرش جستجو در نزدیک ترین کدوم شهره !

فرضا کاربر انتخاب کرده  شهر تهران

پس جستحو رو در مکان هایی که موقعیتشون رو شهر تهران انتخاب کردن جستجو میکنیم.

درسته ؟

درسته

من کلی گفتم

چون کلا محتوای دیتابیس شما رو نمیدونم

گفتید مختصات رو توی دیتابیس دارید، نگفتید مختصات کجا رو

فکر کردم منظورتون مختصات مکانهای کشور هست

باز هم گفتید جستجو نامشخص بود

جستجو کجا؟

 

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 1 دقیقه قبل، mehran3d گفته است :

باز هم گفتید جستجو نامشخص بود

جستجو کجا؟ 

در کدام پست منظورتون هست.

بنده کد sql  اینکار رو پیدا کردم (لینکی که بالا ارسال کردم) که یک تابع ایجاد کرده بود در sql server و سپس کد جستجو رو نوشته بود.

موندم چطور این کدها رو در php پیاده کنم ؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام

چیزی که میخاین اسمش DistanceTo هست

با php راحت میتونی پیاده کنی یه سرچ بزنید پیدا میکنید

لینک ارسال
به اشتراک گذاری در سایت های دیگر

 

در 1 ساعت قبل، majid08 گفته است :

سلام

چیزی که میخاین اسمش DistanceTo هست

با php راحت میتونی پیاده کنی یه سرچ بزنید پیدا میکنید

اقا مجید من میزان فاصله رو نمیخوام محل های نزدیک رو میخوام 

مثلا ببینم نزدیکترین مقدار به مقدار مختصاتم کجاست و کدوم؟ لیست کنم

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 10 ساعت قبل، marius گفته است :

 

اقا مجید من میزان فاصله رو نمیخوام محل های نزدیک رو میخوام 

مثلا ببینم نزدیکترین مقدار به مقدار مختصاتم کجاست و کدوم؟ لیست کنم

سلام

شما بیا مثلا تا فاصله 10 کیلومتر همه نقاطی که داری رو بگیر

بعد نزدیکترین ها رو از توش دربیار

راه بهتری به نظرم نمیاد

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 10 ساعت قبل، majid08 گفته است :

سلام

شما بیا مثلا تا فاصله 10 کیلومتر همه نقاطی که داری رو بگیر

بعد نزدیکترین ها رو از توش دربیار

راه بهتری به نظرم نمیاد

سلام

منم همین مورد رو نیاز دارم.

سوالش همینه که چطور مختصات رو به متر تبدیل کنه که بتونه از روی متر نزدیک ترین رو پیدا کنه.

در واقع مختصات دو نقطه رو داریم و چطور بدونیم فاصلشون چند متر است ؟

بنده مختصات ها رو توی دیتابیس روی سرور دارم و میخوام با ارسال مختصاتم در php محاسبه کنه و مکان هایی که در حوالی تا 100 متری بنده هستن رو ارسال کنه.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...