درخواست های موقعیت جغرافیایی
درخواستهای موقعیت جغرافیایی با استفاده از 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": "lte", "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 } ] }
پاسخ درخواست قبلی به این صورت است:
{ "location": { "lat": 37.7801129, "lng": -122.4168229 }, "accuracy": 180.052 }
محاسبه newRadioCellId
شبکه های جدیدتر که شناسه سلول آنها بیشتر از 32 بیت است از فیلد newRadioCellId
64 بیتی برای ارسال شناسه سلول شبکه به Geolocation API استفاده می کنند.
- شبکه های NR (5G) از شناسه سلولی رادیویی جدید (NCI) 36 بیتی استفاده می کنند.
محدوده معتبر: 0–68719476735.
نمونه ای از شی برج سلولی NR، که بخشی از بدنه درخواست است، در زیر آمده است.
{ ... "cellTowers": [ { "newRadioCellId": 68719476735, "mobileCountryCode": 310, "mobileNetworkCode": 410, "age": 0, "signalStrength": -60, } ] }
پاسخ به درخواست قبلی به صورت زیر است:
{ "location": { "lat": 37.7646157, "lng": -122.4127361 }, "accuracy": 1458.5570522410717 }
اشیاء نقطه دسترسی 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- دسی بل متغیر است. حتما علامت منفی را وارد کنید. برای مقادیر بیشتر از -10 dBm، API NOT FOUND برمی گرداند. |
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 }
پاسخ درخواست قبلی به این صورت است:
{ "location": { "lat": 37.7801129, "lng": -122.4168229 }, "accuracy": 180.052 }
نمونه درخواست ها
اگر میخواهید 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
است، به عنوان مثال بیت 1
که با 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 }
درخواست های موقعیت جغرافیایی
درخواستهای موقعیت جغرافیایی با استفاده از 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": "lte", "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 } ] }
پاسخ درخواست قبلی به این صورت است:
{ "location": { "lat": 37.7801129, "lng": -122.4168229 }, "accuracy": 180.052 }
محاسبه newRadioCellId
شبکه های جدیدتر که شناسه سلول آنها بیشتر از 32 بیت است از فیلد newRadioCellId
64 بیتی برای ارسال شناسه سلول شبکه به Geolocation API استفاده می کنند.
- شبکه های NR (5G) از شناسه سلولی رادیویی جدید (NCI) 36 بیتی استفاده می کنند.
محدوده معتبر: 0–68719476735.
نمونه ای از شی برج سلولی NR، که بخشی از بدنه درخواست است، در زیر آمده است.
{ ... "cellTowers": [ { "newRadioCellId": 68719476735, "mobileCountryCode": 310, "mobileNetworkCode": 410, "age": 0, "signalStrength": -60, } ] }
پاسخ به درخواست قبلی به صورت زیر است:
{ "location": { "lat": 37.7646157, "lng": -122.4127361 }, "accuracy": 1458.5570522410717 }
اشیاء نقطه دسترسی 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- دسی بل متغیر است. حتما علامت منفی را وارد کنید. برای مقادیر بیشتر از -10 dBm، API NOT FOUND برمی گرداند. |
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 }
پاسخ درخواست قبلی به این صورت است:
{ "location": { "lat": 37.7801129, "lng": -122.4168229 }, "accuracy": 180.052 }
نمونه درخواست ها
اگر میخواهید 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
است، به عنوان مثال بیت 1
که با 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 }
درخواست های موقعیت جغرافیایی
درخواستهای موقعیت جغرافیایی با استفاده از 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": "lte", "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 } ] }
پاسخ درخواست قبلی به این صورت است:
{ "location": { "lat": 37.7801129, "lng": -122.4168229 }, "accuracy": 180.052 }
محاسبه newRadioCellId
شبکه های جدیدتر که شناسه سلول آنها بیشتر از 32 بیت است از فیلد newRadioCellId
64 بیتی برای ارسال شناسه سلول شبکه به Geolocation API استفاده می کنند.
- شبکه های NR (5G) از شناسه سلولی رادیویی جدید (NCI) 36 بیتی استفاده می کنند.
محدوده معتبر: 0–68719476735.
نمونه ای از شی برج سلولی NR، که بخشی از بدنه درخواست است، در زیر آمده است.
{ ... "cellTowers": [ { "newRadioCellId": 68719476735, "mobileCountryCode": 310, "mobileNetworkCode": 410, "age": 0, "signalStrength": -60, } ] }
پاسخ به درخواست قبلی به صورت زیر است:
{ "location": { "lat": 37.7646157, "lng": -122.4127361 }, "accuracy": 1458.5570522410717 }
اشیاء نقطه دسترسی 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- دسی بل متغیر است. حتما علامت منفی را وارد کنید. برای مقادیر بیشتر از -10 dBm، API NOT FOUND برمی گرداند. |
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 }
پاسخ درخواست قبلی به این صورت است:
{ "location": { "lat": 37.7801129, "lng": -122.4168229 }, "accuracy": 180.052 }
نمونه درخواست ها
اگر میخواهید 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
است، به عنوان مثال بیت 1
که با 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 }
درخواست های موقعیت جغرافیایی
درخواستهای موقعیت جغرافیایی با استفاده از 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": "lte", "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 } ] }
پاسخ درخواست قبلی به این صورت است:
{ "location": { "lat": 37.7801129, "lng": -122.4168229 }, "accuracy": 180.052 }
محاسبه newRadioCellId
Newer networks, whose cell IDs are longer than 32 bits use the 64-bit newRadioCellId
field for passing the network cell ID to Geolocation API.
- NR (5G) networks use the 36-bit New Radio Cell Identity (NCI) as is.
Valid range: 0–68719476735.
An example NR cell tower object, which is part of the request body , is below.
{ ... "cellTowers": [ { "newRadioCellId": 68719476735, "mobileCountryCode": 310, "mobileNetworkCode": 410, "age": 0, "signalStrength": -60, } ] }
The response to the preceding request looks like this:
{ "location": { "lat": 37.7646157, "lng": -122.4127361 }, "accuracy": 1458.5570522410717 }
WiFi access point objects
The request body's wifiAccessPoints
array must contain two or more WiFi access point objects representing physically distinct stationary access point devices. The macAddress
field is required. تمام فیلدهای دیگر اختیاری هستند. The service ignores access points that move, such as those in airplanes and trains.
میدان | JSON type | توضیحات | یادداشت ها |
---|---|---|---|
macAddress | string | The MAC address of the WiFi node. It's typically called a BSS, BSSID or MAC address. | مورد نیاز. Colon-separated ( : ) hexadecimal string.Only universally-administered MAC addresses can be located using the API. Other MAC addresses are silently dropped and may lead to an API request becoming effectively empty. For details, see Dropping useless Wifi access points . |
signalStrength | number ( double ) | The current signal strength measured in dBm. | For WiFi access points, dBm values are typically -35 or lower and range from -128 to -10 dBm. Be sure to include the minus sign. For values greater than -10 dBm, the API returns NOT FOUND . |
age | number ( uint32 ) | The number of milliseconds since this access point was detected. | |
channel | number ( uint32 ) | The channel over which the client is communicating with the access point. | |
signalToNoiseRatio | number ( double ) | The current signal to noise ratio measured in dB. |
An example WiFi access point object, which is part of the request body , is shown below.
{ ... "macAddress": "f0:d5:bf:fd:12:ae", "signalStrength": -43, "signalToNoiseRatio": 0, "channel": 11, "age": 0 }
The response for the preceding request looks like this:
{ "location": { "lat": 37.7801129, "lng": -122.4168229 }, "accuracy": 180.052 }
نمونه درخواست ها
If you'd like to try the Geolocation API with sample data, save the following JSON to a file:
{ "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 } ] }
You can then use curl
to make your request from the command line:
$ curl -d @your_filename.json -H "Content-Type: application/json" -i "https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY"
The response for the preceding MAC addresses looks like this:
{ "location": { "lat": 37.4241173, "lng": -122.0915717 }, "accuracy": 20 }
Dropping unused WiFi access points
Removing WiFi access point objects with macAddress
es that are locally-administered can improve the success rate of Geolocation API calls that use WiFi as input. If, after filtering, it can be determined that a Geolocation API call wouldn't succeed, mitigations such as using older location signals or WiFi APs with weaker signals can be used. This approach is a tradeoff between your application's need for a location estimate and its precision and recall requirements. The following filtering techniques demonstrate how to filter the inputs, but don't show the mitigations that you may, as the application engineer, choose to apply.
Locally administered MAC addresses are not useful location signals for the API and are silently dropped from requests. You can remove such MAC addresses by ensuring that the second least-significant bit of the macAddress
's most-significant byte is 0
, eg the 1
bit represented by the 2
in 02:00:00:00:00:00
. The broadcast MAC address ( FF:FF:FF:FF:FF:FF
) is an example of a MAC address that would be usefully excluded by this filter.
The range of MAC addresses between 00:00:5E:00:00:00
and 00:00:5E:FF:FF:FF
are reserved for IANA and often used for network management and multicast functions which precludes their use as a location signal. You should also remove these MAC addresses from inputs to the API.
For example, usable MAC addresses for Geolocation can be gathered from an array of macAddress
strings named 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');
Using this filter results in only 1c:34:56:78:9a:bc
remaining in the list. Because this list has fewer than 2 WiFi MAC addresses , the request wouldn't be successful and an HTTP 404 ( notFound
) response would be returned.
Geolocation responses
A successful geolocation request returns a JSON-formatted response defining a location and radius.
-
location
: The user's estimated latitude and longitude coordinates, in degrees. Contains onelat
and onelng
subfield. -
accuracy
: The accuracy of the estimated location, in meters. This represents the radius of a circle around the givenlocation
.
{ "location": { "lat": 37.421875199999995, "lng": -122.0851173 }, "accuracy": 120 }