درخواست های موقعیت جغرافیایی
درخواستهای موقعیت جغرافیایی با استفاده از POST به آدرس اینترنتی زیر ارسال میشوند:
https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY
شما باید یک کلید را در درخواست خود مشخص کنید که به عنوان مقدار یک پارامتر key
گنجانده شده است. یک key
کلید API برنامه شما است. این کلید درخواست شما را برای اهداف مدیریت سهمیه شناسایی می کند. نحوه گرفتن کلید را بیاموزید.
درخواست بدن
بدنه درخواست باید به صورت JSON فرمت شود. اگر بدنه درخواست گنجانده نشده باشد، نتایج بر اساس آدرس IP محل درخواست بازگردانده می شوند. فیلدهای زیر پشتیبانی می شوند و همه فیلدها اختیاری هستند، مگر اینکه خلاف آن ذکر شده باشد:
میدان | نوع JSON | توضیحات | یادداشت ها |
---|---|---|---|
homeMobileCountryCode | number ( uint32 ) | کد کشور تلفن همراه (MCC) برای شبکه خانگی دستگاه. | پشتیبانی از radioType gsm (پیشفرض)، wcdma ، lte و nr . برای cdma استفاده نمیشهمحدوده معتبر: 0–999. |
homeMobileNetworkCode | number ( uint32 ) | کد شبکه تلفن همراه برای شبکه خانگی دستگاه. این MNC برای GSM، WCDMA، LTE و NR است. CDMA از شناسه سیستم (SID) استفاده می کند | محدوده معتبر برای MNC: 0-999. محدوده معتبر برای SID: 0–32767. |
radioType | string | نوع رادیو سیار مقادیر پشتیبانی شده عبارتند از gsm , cdma , wcdma , lte و nr . | در حالی که این فیلد اختیاری است، اما اگر نوع رادیو توسط مشتری شناخته شده باشد، باید همیشه در آن گنجانده شود. اگر این فیلد حذف شود، Geolocation API بهطور پیشفرض روی gsm است، که اگر نوع رادیویی فرضی نادرست باشد، نتایج نامعتبر یا صفر خواهد بود. |
carrier | string | نام حامل | |
considerIp | boolean | مشخص میکند که اگر سیگنالهای WiFi و برج سلولی از دست رفته، خالی یا برای تخمین مکان دستگاه کافی نیستند، به موقعیت جغرافیایی IP برگردند. | پیش فرض ها به true برای جلوگیری از عقب افتادن، considerIp را روی false قرار دهید. |
cellTowers | array | مجموعه ای از اشیاء برج سلولی. | بخش اشیاء برج سلولی را در زیر ببینید. |
wifiAccessPoints | array | آرایه ای از اشیاء نقطه دسترسی WiFi. | بخش اشیاء نقطه دسترسی WiFi را در زیر ببینید. |
نمونه ای از بدنه درخواست Geolocation API در زیر نشان داده شده است.
{ "homeMobileCountryCode": 310, "homeMobileNetworkCode": 410, "radioType": "gsm", "carrier": "Vodafone", "considerIp": true, "cellTowers": [ // See the Cell Tower Objects section below. ], "wifiAccessPoints": [ // See the WiFi Access Point Objects section below. ] }
اشیاء برج سلولی
آرایه cellTowers
بدن درخواست شامل صفر یا چند شیء برج سلولی است.
میدان | نوع JSON | توضیحات | یادداشت ها |
---|---|---|---|
cellId | number ( uint32 ) | شناسه منحصر به فرد سلول | مورد نیاز برای radioType gsm (پیشفرض)، cdma ، wcdma و lte ؛ برای nr رد شد .بخش Calculating cellId را در زیر ببینید، که همچنین محدوده مقادیر معتبر را برای هر نوع رادیو فهرست می کند. |
newRadioCellId | number ( uint64 ) | شناسه منحصر به فرد سلول NR (5G). | مورد نیاز برای radioType nr ; برای انواع دیگر رد شده است .بخش Calculating newRadioCellId را در زیر ببینید، که محدوده مقادیر معتبر فیلد را نیز فهرست میکند. |
locationAreaCode | number ( uint32 ) | کد منطقه ای مکان (LAC) برای شبکه های GSM و WCDMA. شناسه شبکه (NID) برای شبکه های CDMA. کد منطقه ردیابی (TAC) برای شبکه های LTE و NR. | برای radioType gsm (پیشفرض) و cdma مورد نیاز است ، برای مقادیر دیگر اختیاری است.محدوده معتبر با gsm ، cdma ، wcdma و lte : 0–65535.محدوده معتبر با nr : 0–16777215. |
mobileCountryCode | number ( uint32 ) | کد کشور سیار برج تلفن همراه (MCC). | مورد نیاز برای radioType gsm (پیشفرض)، wcdma ، lte و nr . برای cdma استفاده نمیشهمحدوده معتبر: 0–999. |
mobileNetworkCode | number ( uint32 ) | کد شبکه تلفن همراه برج تلفن همراه. این MNC برای GSM، WCDMA، LTE و NR است. CDMA از شناسه سیستم (SID) استفاده می کند. | مورد نیاز. محدوده معتبر برای MNC: 0-999. محدوده معتبر برای SID: 0–32767. |
فیلدهای اختیاری زیر استفاده نمی شوند، اما در صورت موجود بودن مقادیر ممکن است شامل شوند.
میدان | نوع JSON | توضیحات | یادداشت ها |
---|---|---|---|
age | number ( uint32 ) | تعداد میلی ثانیه از زمانی که این سلول اولیه بود. | اگر سن 0 باشد، cellId یا newRadioCellId اندازه گیری فعلی را نشان می دهد. |
signalStrength | number ( double ) | قدرت سیگنال رادیویی در dBm اندازه گیری می شود. | |
timingAdvance | number ( double ) | مقدار پیشروی زمان . |
محاسبه cellId
انواع رادیویی قبل از NR (5G) از فیلد cellId
32 بیتی برای ارسال شناسه سلول شبکه به Geolocation API استفاده می کنند.
- شبکه های GSM (2G) از شناسه سلولی 16 بیتی (CID) همانطور که هست استفاده می کنند. محدوده معتبر: 0–65535.
- شبکه های CDMA (2G) از شناسه ایستگاه پایه 16 بیتی (BID) همانطور که هست استفاده می کنند. محدوده معتبر: 0–65535.
- شبکه های WCDMA (3G) از شناسه سلولی UTRAN/GERAN (UC-ID) استفاده می کنند که یک مقدار صحیح 28 بیتی است که شناسه کنترل کننده شبکه رادیویی 12 بیتی (RNC-ID) و شناسه سلول 16 بیتی (CID) را به هم متصل می کند.
فرمول:rnc_id << 16 | cid
.
محدوده معتبر: 0–268435455.
توجه: تعیین تنها مقدار Cell ID 16 بیتی در شبکههای WCDMA منجر به نتایج نادرست یا صفر میشود. - شبکه های LTE (4G) از E-UTRAN Cell Identity (ECI) استفاده می کنند، که یک مقدار صحیح 28 بیتی است که شناسه گره B 20 بیتی E-UTRAN (eNBId) و شناسه سلولی 8 بیتی (CID) را به هم متصل می کند.
فرمول:enb_id << 8 | cid
.
محدوده معتبر: 0–268435455.
توجه: مشخص کردن تنها مقدار 8 بیتی Cell ID در شبکه های LTE منجر به نتایج نادرست یا صفر می شود.
قرار دادن مقادیر خارج از این محدوده ها در درخواست API ممکن است منجر به رفتار نامشخص شود. API، بنا به صلاحدید Google، ممکن است عدد را کوتاه کند تا در محدوده مستند قرار گیرد، یک تصحیح در radioType
استنتاج کند، یا یک نتیجه NOT_FOUND
را بدون هیچ نشانگری در پاسخ بازگرداند.
نمونه ای از شیء برج سلولی LTE در زیر آمده است.
{ "cellTowers": [ { "cellId": 170402199, "locationAreaCode": 35632, "mobileCountryCode": 310, "mobileNetworkCode": 410, "age": 0, "signalStrength": -60, "timingAdvance": 15 } ] }
محاسبه newRadioCellId
شبکه های جدیدتر که شناسه سلول آنها بیشتر از 32 بیت است از فیلد newRadioCellId
64 بیتی برای ارسال شناسه سلول شبکه به Geolocation API استفاده می کنند.
- شبکه های NR (5G) از شناسه سلولی رادیویی جدید (NCI) 36 بیتی استفاده می کنند.
محدوده معتبر: 0–68719476735.
نمونه ای از شیء برج سلولی NR در زیر آمده است.
{ "cellTowers": [ { "newRadioCellId": 68719476735, "mobileCountryCode": 310, "mobileNetworkCode": 410, "age": 0, "signalStrength": -60, } ] }
اشیاء نقطه دسترسی WiFi
آرایه wifiAccessPoints
بدن درخواست باید شامل دو یا چند شی نقطه دسترسی WiFi باشد که دستگاههای نقطه دسترسی از نظر فیزیکی مجزا را نشان میدهند. macAddress
مورد نیاز است. تمام فیلدهای دیگر اختیاری هستند.
میدان | نوع JSON | توضیحات | یادداشت ها |
---|---|---|---|
macAddress | string | آدرس MAC گره WiFi. معمولاً آدرس BSS، BSSID یا MAC نامیده می شود. | مورد نیاز. رشته هگزادسیمال جدا شده با کولون ( : ).فقط آدرس های MAC با مدیریت جهانی را می توان از طریق API قرار داد. سایر آدرسهای MAC بیصدا حذف میشوند و ممکن است منجر به خالی شدن یک درخواست API شوند. برای جزئیات، رها کردن نقاط دسترسی بی فایده Wifi را ببینید. |
signalStrength | number ( double ) | قدرت سیگنال فعلی بر حسب dBm اندازه گیری می شود. | برای نقاط دسترسی WiFi، مقادیر dBm معمولاً 35- یا کمتر است و از 128- تا 10- دسی بل متغیر است. حتما علامت منفی را وارد کنید. |
age | number ( uint32 ) | تعداد میلی ثانیه از زمانی که این نقطه دسترسی شناسایی شده است. | |
channel | number ( uint32 ) | کانالی که مشتری از طریق آن با نقطه دسترسی در ارتباط است. | |
signalToNoiseRatio | number ( double ) | نسبت سیگنال فعلی به نویز بر حسب دسی بل اندازه گیری می شود. |
نمونه ای از شی نقطه دسترسی WiFi در زیر نشان داده شده است.
{ "macAddress": "f0:d5:bf:fd:12:ae", "signalStrength": -43, "signalToNoiseRatio": 0, "channel": 11, "age": 0 }
نمونه درخواست ها
اگر میخواهید API جغرافیایی را با دادههای نمونه امتحان کنید، JSON زیر را در یک فایل ذخیره کنید:
{ "considerIp": "false", "wifiAccessPoints": [ { "macAddress": "3c:37:86:5d:75:d4", "signalStrength": -35, "signalToNoiseRatio": 0 }, { "macAddress": "30:86:2d:c4:29:d0", "signalStrength": -35, "signalToNoiseRatio": 0 } ] }
سپس می توانید از cURL برای ارسال درخواست خود از خط فرمان استفاده کنید:
$ curl -d @your_filename.json -H "Content-Type: application/json" -i "https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY"
پاسخ برای آدرس های MAC قبلی به صورت زیر است:
{ "location": { "lat": 37.4241173, "lng": -122.0915717 }, "accuracy": 20 }
حذف نقاط دسترسی وای فای استفاده نشده
حذف اشیاء نقطه دسترسی WiFi با macAddress
e که به صورت محلی مدیریت میشوند، میتواند میزان موفقیت تماسهای Geolocation API را که از WiFi به عنوان ورودی استفاده میکنند، بهبود بخشد. اگر پس از فیلتر کردن، بتوان تشخیص داد که تماس API جغرافیایی موفق نخواهد بود، میتوان از اقدامات کاهشی مانند استفاده از سیگنالهای مکان قدیمیتر یا APهای WiFi با سیگنالهای ضعیفتر استفاده کرد. این رویکرد یک موازنه بین نیاز برنامه شما به تخمین مکان و دقت و الزامات فراخوانی آن است. تکنیکهای فیلتر زیر نحوه فیلتر کردن ورودیها را نشان میدهند، اما کاهشهایی را که ممکن است بهعنوان مهندس برنامه، انتخاب کنید، نشان نمیدهند.
آدرسهای MAC مدیریت شده محلی سیگنالهای مکان مفیدی برای API نیستند و بیصدا از درخواستها حذف میشوند. شما می توانید چنین آدرس های MAC را با اطمینان از اینکه دومین بیت کم اهمیت ترین بایت macAddress
0
است، به عنوان مثال، حذف کنید.2
در 02:00:00:00:00:00
نمایش داده می شود. آدرس مک پخش ( FF:FF:FF:FF:FF:FF
) نمونه ای از آدرس مک است که به طور مفید توسط این فیلتر حذف می شود.
محدوده آدرسهای MAC بین 00:00:5E:00:00:00
و 00:00:5E:FF:FF:FF
برای IANA محفوظ است و اغلب برای مدیریت شبکه و توابع چندپخشی استفاده میشود که استفاده از آنها به عنوان سیگنال مکان را ممنوع میکند. . همچنین باید این آدرسهای MAC را از ورودیهای API حذف کنید.
برای مثال، آدرسهای MAC قابل استفاده برای مکان جغرافیایی را میتوان از آرایهای از رشتههای macAddress
به نام macs
جمعآوری کرد:
String[] macs = {"12:34:56:78:9a:bc", "1c:34:56:78:9a:bc", "00:00:5e:00:00:01"}; ArrayList<String> _macs = new ArrayList<>(Arrays.asList(macs)); _macs.removeIf(m -> !(0 == (2 & Integer.parseInt(m.substring(1, 2), 16)) && !m.substring(0, 8).toUpperCase().equals("00:00:5E")));
macs = ['12:34:56:78:9a:bc', '1c:34:56:78:9a:bc', '00:00:5e:00:00:01'] macs = [m for m in macs if (0 == (2 & int(m[1], 16)) and m[:8].upper() != '00:00:5E')]
macs = ['12:34:56:78:9a:bc', '1c:34:56:78:9a:bc', '00:00:5e:00:00:01']; macs = macs.filter(m => 0 === (2 & Number.parseInt(m[1], 16)) && m.substr(0, 8).toUpperCase() !== '00:00:5E');
با استفاده از این فیلتر فقط 1c:34:56:78:9a:bc
در لیست باقی می ماند. از آنجایی که این لیست دارای کمتر از 2 آدرس مک WiFi است، درخواست موفقیت آمیز نخواهد بود و یک پاسخ HTTP 404 ( notFound
) برگردانده می شود.
پاسخ های موقعیت جغرافیایی
یک درخواست موقعیت جغرافیایی موفق، پاسخی با فرمت JSON برمیگرداند که مکان و شعاع را مشخص میکند.
-
location
: مختصات طول و عرض جغرافیایی تخمینی کاربر، بر حسب درجه. شامل یک زیر فیلدlat
و یکlng
است. -
accuracy
: دقت مکان تخمین زده شده بر حسب متر. این نشان دهنده شعاع یک دایره در اطرافlocation
داده شده است.
{ "location": { "lat": 37.421875199999995, "lng": -122.0851173 }, "accuracy": 120 }