คำขอตำแหน่งทางภูมิศาสตร์
คำขอตำแหน่งทางภูมิศาสตร์จะได้รับการส่งคำขอโดยใช้ POST ไปยัง URL ต่อไปนี้
https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY
คุณต้องระบุคีย์ในคำขอที่รวมอยู่ในพารามิเตอร์ key
key
คือคีย์ API ของแอปพลิเคชัน คีย์นี้ระบุแอปพลิเคชันของคุณเพื่อวัตถุประสงค์ด้านการจัดการโควต้า ดูวิธีรับคีย์
เนื้อหาของคำขอ
ส่วนเนื้อหาของคำขอต้องอยู่ในรูปแบบ JSON หากไม่รวมเนื้อหาของคำขอ ระบบจะแสดงผลตามที่อยู่ IP ของตำแหน่งคำขอ ระบบรองรับช่องต่อไปนี้และไม่บังคับ เว้นแต่ว่าจะระบุไว้เป็นอย่างอื่น
ฟิลด์ | ประเภท JSON | คำอธิบาย | Notes |
---|---|---|---|
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 ซึ่งจะทำให้ได้ผลลัพธ์ที่ไม่ถูกต้องหรือเป็น 0 หากประเภทวิทยุที่มีสมมติฐานไม่ถูกต้อง |
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 | คำอธิบาย | Notes |
---|---|---|---|
cellId |
number (uint32 ) |
ตัวระบุที่ไม่ซ้ำกันของเซลล์ | ต้องระบุสำหรับ radioType gsm (ค่าเริ่มต้น), cdma , wcdma และ lte ปฏิเสธสำหรับ nr ดูส่วนการคํานวณ CellId ด้านล่าง ซึ่งจะแสดงช่วงค่าที่ถูกต้องสำหรับสัญญาณแต่ละประเภทด้วย |
newRadioCellId |
number (uint64 ) |
ตัวระบุที่ไม่ซ้ำกันของเซลล์ NR (5G) | ต้องระบุสำหรับ radioType nr ปฏิเสธสำหรับประเภทอื่นๆดูส่วน Calculation 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 | คำอธิบาย | Notes |
---|---|---|---|
age |
number (uint32 ) |
จำนวนมิลลิวินาทีนับตั้งแต่เซลล์นี้เป็นค่าหลัก | หากอายุเป็น 0 ตัว cellId หรือ newRadioCellId จะแทนค่าการวัดปัจจุบัน |
signalStrength |
number (double ) |
ความแรงของสัญญาณวิทยุวัดเป็นหน่วย dBm | |
timingAdvance |
number (double ) |
ค่าระยะเวลาล่วงหน้า |
กำลังคำนวณ cellId
ประเภทวิทยุก่อน NR (5G) จะใช้ช่อง cellId
แบบ 32 บิตเพื่อส่งรหัสเซลล์ของเครือข่ายไปยัง Geolocation API
- เครือข่าย GSM (2G) ใช้รหัสเซลล์ (CID) 16 บิตตามที่มีอยู่ ช่วงที่ใช้ได้คือ 0–65535
- เครือข่าย CDMA (2G) ใช้รหัสสถานีพื้นฐาน 16 บิต (BID) ตามที่เป็น ช่วงที่ใช้ได้คือ 0–65535
- เครือข่าย WCDMA (3G) ใช้ UTRAN/GERAN Cell Identity (UC-ID) ซึ่งเป็นค่าจำนวนเต็ม 28 บิตที่เชื่อมโยงกับตัวระบุตัวควบคุมเครือข่ายวิทยุ 12 บิต (RNC-ID) และ Cell ID (CID) 16 บิต
สูตร:rnc_id << 16 | cid
ช่วงที่ใช้ได้: 0–268435455
หมายเหตุ: การระบุเฉพาะค่า Cell ID แบบ 16 บิตในเครือข่าย WCDMA จะทำให้ผลลัพธ์ไม่ถูกต้องหรือเป็น 0 - เครือข่าย LTE (4G) ใช้ E-UTRAN Cell Identity (ECI) ซึ่งเป็นค่าจำนวนเต็ม 28 บิต
การเชื่อมต่อ E-UTRAN Node B Identifier 20 บิต (eNBId) และ Cell ID (CID) 8 บิต (CID)
สูตร:enb_id << 8 | cid
ช่วงที่ใช้ได้: 0–268435455
หมายเหตุ: การระบุเฉพาะค่า Cell ID แบบ 8 บิตในเครือข่าย LTE จะทำให้ผลลัพธ์ไม่ถูกต้องหรือเป็น 0
การวางค่าไว้นอกช่วงเหล่านี้ในคำขอ 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) ใช้ 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 | คำอธิบาย | Notes |
---|---|---|---|
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": "9c:1c:12:b0:45:f1", "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": "94:b4:0f:fd:c1:40", "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.4241876, "lng": -122.0917381 }, "accuracy": 32.839 }
ยกเลิกจุดเข้าใช้งาน Wi-Fi ที่ไม่ได้ใช้
การนำออบเจ็กต์จุดเข้าใช้งาน Wi-Fi ด้วย macAddress
ที่มีการดูแลจัดการภายในออกจะช่วยเพิ่มอัตราความสำเร็จของการเรียกใช้ Geolocation API ที่ใช้ Wi-Fi เป็นอินพุต
หลังจากกรองแล้ว หากพบว่าการเรียก 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 }