คำขอตำแหน่งทางภูมิศาสตร์
ระบบจะส่งคำขอตำแหน่งทางภูมิศาสตร์โดยใช้ POST ไปยัง URL ต่อไปนี้
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 |
ระบุว่าจะเปลี่ยนไปใช้ตำแหน่งทางภูมิศาสตร์ของ IP หรือไม่หากไม่มีสัญญาณ Wi-Fi และเสาสัญญาณ สัญญาณว่างเปล่า หรือไม่เพียงพอที่จะประมาณตำแหน่งอุปกรณ์ | ค่าเริ่มต้นคือ true ตั้ง considerIp เป็น
false เพื่อป้องกันการตกหล่น |
cellTowers |
array |
อาร์เรย์ของออบเจ็กต์เสาสัญญาณมือถือ | ดูส่วนออบเจ็กต์เสาสัญญาณมือถือด้านล่าง |
wifiAccessPoints |
array |
อาร์เรย์ของออบเจ็กต์จุดเข้าใช้งาน Wi-Fi | ดูส่วนออบเจ็กต์จุดเข้าใช้งาน Wi-Fi ที่ด้านล่าง |
ตัวอย่างของส่วนเนื้อหาของคำขอ 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
ของเนื้อหาคำขอมี 0 หรือมากกว่า
วัตถุจากเสาสัญญาณมือถือ
ช่อง | ประเภท JSON | คำอธิบาย | หมายเหตุ |
---|---|---|---|
cellId |
number (uint32 ) |
ตัวระบุที่ไม่ซ้ำกันของเซลล์ | ต้องระบุสำหรับ radioType gsm (ค่าเริ่มต้น), cdma
wcdma และ lte ถูกปฏิเสธสำหรับ nr ดูส่วนการคำนวณcellId ด้านล่าง ซึ่งแสดง ช่วงค่าที่ถูกต้องสำหรับวิทยุแต่ละประเภท |
newRadioCellId |
number (uint64 ) |
ตัวระบุที่ไม่ซ้ำกันของเซลล์ NR (5G) | ต้องระบุสำหรับ radioType nr ปฏิเสธสำหรับ
ประเภทต่างๆโปรดดูส่วนการคำนวณใหม่RadioCellId ด้านล่าง ซึ่งจะแสดงช่วงค่าที่ถูกต้องสำหรับฟิลด์ด้วย |
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) ใช้ Cell ID (CID) 16 บิตตามที่มีอยู่ ช่วงที่ใช้ได้: 0–65535
- เครือข่าย CDMA (2G) ใช้รหัส Base Station 16 บิต (BID) ตามที่มีอยู่ ช่วงที่ใช้ได้: 0–65535
- เครือข่าย WCDMA (3G) ใช้ UTRAN/GERAN Cell Identity (UC-ID) ซึ่งเป็นจำนวนเต็ม 28 บิต
ค่าที่เชื่อมต่อตัวระบุตัวควบคุมเครือข่ายวิทยุ (Radio Network Controller Identifier หรือ RNC-ID) 12 บิต และ 16 บิต
รหัสเซลล์ (CID)
สูตร:rnc_id << 16 | cid
ช่วงที่ใช้ได้: 0–268435455
หมายเหตุ: การระบุเฉพาะค่า Cell ID แบบ 16 บิตในเครือข่าย WCDMA จะส่งผลให้ ผลลัพธ์ไม่ถูกต้องหรือเป็นศูนย์ - เครือข่าย LTE (4G) ใช้ตัวระบุเซลล์ E-UTRAN (ECI) ซึ่งเป็นค่าจำนวนเต็ม 28 บิตที่ต่อเชื่อมตัวระบุโหนด B ของ E-UTRAN (eNBId) 20 บิตและรหัสเซลล์ (CID) 8 บิต
สูตร:enb_id << 8 | cid
ช่วงที่ใช้ได้: 0–268435455
หมายเหตุ: การระบุเฉพาะค่า Cell ID แบบ 8 บิตในเครือข่าย 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 บิตเพื่อส่งรหัสเซลล์เครือข่ายไปยัง API ตำแหน่งทางภูมิศาสตร์
- เครือข่าย NR (5G) จะใช้ New Radio Cell Identity (NCI) แบบ 36 บิตตามที่มีอยู่
ช่วงที่ใช้ได้: 0–68719476735
ตัวอย่างออบเจ็กต์เสาสัญญาณมือถือ NR มีดังนี้
{ "cellTowers": [ { "newRadioCellId": 68719476735, "mobileCountryCode": 310, "mobileNetworkCode": 410, "age": 0, "signalStrength": -60, } ] }
ออบเจ็กต์จุดเข้าใช้งาน Wi-Fi
อาร์เรย์ wifiAccessPoints
ของเนื้อหาคำขอต้องมีออบเจ็กต์จุดเข้าใช้งาน Wi-Fi อย่างน้อย 2 รายการ ต้องกรอก macAddress
ส่วนช่องอื่นๆ ทั้งหมดเป็นตัวเลือก
ช่อง | ประเภท JSON | คำอธิบาย | หมายเหตุ |
---|---|---|---|
macAddress |
string |
ที่อยู่ MAC ของโหนด Wi-Fi โดยทั่วไปจะเรียกว่า BSS, BSSID หรือที่อยู่ MAC |
ต้องระบุสตริงเลขฐานสิบหกที่คั่นด้วยโคลอน (: )
เท่านั้น การดูแลระบบสากล ค้นหาที่อยู่ MAC ได้ผ่าน API ที่อยู่ MAC อื่นๆ คือ ถูกตัดการเชื่อมต่อไปอย่างเงียบๆ และอาจนำไปสู่การส่งคำขอ API อย่างมีประสิทธิภาพ ว่างเปล่า โปรดดูรายละเอียดที่หัวข้อการยกเลิกจุดเข้าใช้งาน Wi-Fi ที่ไม่มีประโยชน์ |
signalStrength |
number (double ) |
ความแรงของสัญญาณปัจจุบันวัดในหน่วย dBm | สำหรับจุดเข้าใช้งาน Wi-Fi ค่า dBm มักจะอยู่ที่ -35 หรือต่ำกว่า และอยู่ในช่วง -128 ถึง -10 dBm อย่าลืมใส่เครื่องหมายลบ |
age |
number (uint32 ) |
จำนวนมิลลิวินาทีนับตั้งแต่ตรวจพบจุดเข้าใช้งานนี้ | |
channel |
number (uint32 ) |
ช่องทางที่ลูกค้ากำลังสื่อสารกับจุดเข้าใช้งาน | |
signalToNoiseRatio |
number (double ) |
อัตราส่วนสัญญาณต่อเสียงรบกวนในปัจจุบัน วัดเป็นหน่วย dB |
ตัวอย่างของออบเจ็กต์จุดเข้าใช้งาน Wi-Fi แสดงอยู่ด้านล่าง
{ "macAddress": "f0:d5:bf:fd:12:ae", "signalStrength": -43, "signalToNoiseRatio": 0, "channel": 11, "age": 0 }
คำขอตัวอย่าง
หากต้องการลองใช้ Geolocation 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 }
การนำจุดเข้าใช้งาน Wi-Fi ที่ไม่ได้ใช้ออก
กำลังนำออบเจ็กต์จุดเข้าใช้งาน Wi-Fi ออกด้วย macAddress
รายการที่
ดูแลเฉพาะพื้นที่
จะช่วยเพิ่มอัตราความสำเร็จของการเรียก Geolocation API ที่ใช้ Wi-Fi เป็นอินพุต
หลังจากกรองแล้ว สามารถระบุได้ว่าการเรียก Geolocation API
ไม่สำเร็จ การลดปัญหา เช่น การใช้สัญญาณตำแหน่งที่เก่ากว่า หรือ Wi-Fi AP กับ
ก็อาจใช้สัญญาณที่อ่อนกว่าได้ วิธีนี้เป็นอุปสรรคระหว่าง
ที่แอปพลิเคชันต้องการการประมาณตำแหน่ง รวมถึงความแม่นยำและการจดจำ
เทคนิคการกรองต่อไปนี้แสดงวิธีการกรอง
แต่ไม่ต้องแสดงการลดการรบกวนที่คุณ ในฐานะที่เป็น
เลือกสมัคร
ที่อยู่ MAC ที่มีการดูแลจัดการในระบบไม่ใช่สัญญาณแจ้งตำแหน่งที่เป็นประโยชน์สำหรับ
API และตัดออกจากคำขอโดยไม่มีการแจ้งเตือน คุณนำที่อยู่ MAC ดังกล่าวออกได้ โดยตรวจสอบว่าบิตที่มีค่าน้อยที่สุดลำดับที่ 2 ของไบต์ที่มีค่ามากที่สุดของ macAddress
คือ 0
เช่น 2
ใน 02:00:00:00:00:00
ที่อยู่ MAC ของการออกอากาศ
(FF:FF:FF:FF:FF:FF
) เป็นตัวอย่างของที่อยู่ MAC ที่
ถูกยกเว้นอย่างมีประโยชน์โดยตัวกรองนี้
ช่วงที่อยู่ 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
รายการในรายการ เนื่องจากรายการนี้มี
คือที่อยู่ MAC ของ Wi-Fi น้อยกว่า 2 รายการ
จะไม่สามารถดำเนินการสำเร็จ และ HTTP 404
(notFound
)
การตอบกลับ
การตอบกลับตำแหน่งทางภูมิศาสตร์
คำขอตำแหน่งทางภูมิศาสตร์ที่ประสบความสำเร็จจะแสดงการตอบกลับในรูปแบบ JSON การกำหนดสถานที่ตั้งและรัศมี
location
: ละติจูดและลองจิจูดโดยประมาณของผู้ใช้ พิกัดเป็นองศา มีlat
1 รายการและlng
1 รายการ ช่องย่อยaccuracy
: ความแม่นยำของตำแหน่งโดยประมาณใน เมตร แสดงรัศมีของวงกลมlocation
{ "location": { "lat": 37.421875199999995, "lng": -122.0851173 }, "accuracy": 120 }