อ่าน 7 นาที
จีโอแฮช
Geohash เป็น ระบบ geocode สาธารณะ ที่คิดค้นขึ้นในปี 2008 โดย Gustavo Niemeyer [ 2 ] ซึ่งเข้ารหัสตำแหน่งทางภูมิศาสตร์เป็นสตริงสั้นๆ ของตัวอักษรและตัวเลข...
จีโอแฮช

Geohashเป็นระบบ geocode สาธารณะ ที่คิดค้นขึ้นในปี 2008 โดย Gustavo Niemeyer [ 2 ]ซึ่งเข้ารหัสตำแหน่งทางภูมิศาสตร์เป็นสตริงสั้นๆ ของตัวอักษรและตัวเลข แนวคิดที่คล้ายกันนี้ได้รับการแนะนำโดย GM Morton ในปี 1966 [ 3 ]เป็นโครงสร้างข้อมูลเชิงพื้นที่แบบลำดับชั้นซึ่งแบ่งพื้นที่ออกเป็นกลุ่ม รูปทรง ตารางซึ่งเป็นหนึ่งในแอปพลิเคชันมากมายของสิ่งที่เรียกว่าเส้นโค้งลำดับ Zและเส้นโค้งที่เติมเต็มพื้นที่โดย ทั่วไป
จีโอแฮชมีคุณสมบัติหลายอย่าง เช่น ความแม่นยำที่กำหนดเองได้ และความเป็นไปได้ในการค่อยๆ ลบอักขระออกจากส่วนท้ายของรหัสเพื่อลดขนาด (และค่อยๆ สูญเสียความแม่นยำ) การสร้างจีโอแฮชรับประกันว่ายิ่งส่วนนำหน้าที่ใช้ร่วมกันระหว่างจีโอแฮชสองตัวยาวเท่าใด ตำแหน่งของทั้งสองก็จะยิ่งใกล้กันมากขึ้นเท่านั้น แต่ในทางกลับกันนั้นไม่ได้รับการรับประกันเสมอไป เนื่องจากจุดสองจุดอาจอยู่ใกล้กันมากแต่มีส่วนนำหน้าที่ใช้ร่วมกันสั้นหรือไม่มีเลย
ประวัติศาสตร์
ส่วนหลักของอัลกอริทึม Geohash และความคิดริเริ่มแรกในการแก้ปัญหาที่คล้ายกันได้รับการบันทึกไว้ในรายงานของ GM Morton ในปี 1966 เรื่อง "ฐานข้อมูลทางภูมิศาสตร์ที่มุ่งเน้นคอมพิวเตอร์และเทคนิคใหม่ในการจัดลำดับไฟล์" [ 3 ]งานของ Morton ถูกนำมาใช้สำหรับการใช้งานเส้นโค้งลำดับ Z อย่างมีประสิทธิภาพ เช่นในเวอร์ชัน Geohash-integer ที่ทันสมัย (2014) นี้ (โดยอิงจากการสลับจำนวนเต็ม 64 บิต โดยตรง ) แต่ ข้อเสนอ geocode ของเขา ไม่สามารถอ่านได้โดยมนุษย์และไม่เป็นที่นิยม
เห็นได้ชัดว่าในช่วงปลายทศวรรษ 2000 G. Niemeyer ยังไม่ทราบเกี่ยวกับงานของ Morton และได้คิดค้นขึ้นใหม่โดยเพิ่มการใช้ การแสดงผล แบบ base32ในเดือนกุมภาพันธ์ 2008 พร้อมกับการประกาศระบบ[ 2 ]เขาได้เปิดตัวเว็บไซต์geohash.orgซึ่งอนุญาตให้ผู้ใช้แปลงพิกัดทางภูมิศาสตร์เป็นURL สั้นๆ ที่ระบุตำแหน่งบนโลก ได้อย่างเฉพาะเจาะจง เพื่อให้การอ้างอิงในอีเมลฟอรัมและเว็บไซต์สะดวกยิ่งขึ้น
มีการพัฒนารูปแบบต่างๆ มากมาย รวมถึงลิงก์สั้นของ OpenStreetMap [ 4 ] (โดยใช้base64แทน base32) ในปี 2552 Geohash 64 บิต[ 5 ]ในปี 2557 Hilbert-Geohash [ 6 ] ที่แปลกใหม่ ในปี 2559 และอื่นๆ
การใช้งานทั่วไปและหลักๆ
ในการรับ Geohash ผู้ใช้จะต้องป้อนที่อยู่ที่จะแปลงเป็นพิกัดทางภูมิศาสตร์หรือ พิกัด ละติจูดและลองจิจูดในช่องป้อนข้อมูลช่องเดียว (โดยทั่วไปจะรองรับรูปแบบคู่ละติจูดและลองจิจูดที่ใช้กันทั่วไป) แล้วทำการร้องขอ
นอกจากการแสดงค่าละติจูดและลองจิจูดที่ตรงกับ Geohash ที่กำหนดแล้ว ผู้ใช้ที่นำทางไปยัง Geohash ที่ geohash.org ยังจะได้รับแผนที่แบบฝังตัว และสามารถดาวน์โหลด ไฟล์ GPXหรือถ่ายโอนจุดอ้างอิงไปยัง เครื่องรับ GPS บางรุ่นได้โดยตรง นอกจากนี้ยังมีลิงก์ไปยังเว็บไซต์ภายนอกที่อาจให้รายละเอียดเพิ่มเติมเกี่ยวกับตำแหน่งที่ระบุอีกด้วย
ตัวอย่างเช่น คู่พิกัด57.64911,10.40744(ใกล้ปลายคาบสมุทร จัตแลนด์ ประเทศเดนมาร์ก ) จะสร้างค่าแฮชที่สั้นกว่าu4pruydqqvjเล็กน้อย
การใช้งานหลักของ Geohash มีดังนี้:
- ในฐานะตัวระบุที่ไม่ซ้ำกัน
- เพื่อแสดงข้อมูลแบบจุด เช่น ในฐานข้อมูล
มีการเสนอให้ใช้ Geohash สำหรับการติดแท็กตำแหน่งทางภูมิศาสตร์ด้วย เช่นกัน
เมื่อนำไปใช้ในฐานข้อมูล โครงสร้างของข้อมูลที่ติดแฮชทางภูมิศาสตร์มีข้อดีสองประการ ประการแรก ข้อมูลที่จัดทำดัชนีด้วยแฮชทางภูมิศาสตร์จะมีจุดทั้งหมดสำหรับพื้นที่สี่เหลี่ยมผืนผ้าที่กำหนดอยู่ในส่วนย่อยที่ต่อเนื่องกัน (จำนวนส่วนย่อยขึ้นอยู่กับความแม่นยำที่ต้องการและการมีอยู่ของ "รอยแตก" ในแฮชทางภูมิศาสตร์) ซึ่งมีประโยชน์อย่างยิ่งในระบบฐานข้อมูลที่การค้นหาในดัชนีเดียวทำได้ง่ายกว่าหรือเร็วกว่าการค้นหาในหลายดัชนี ประการที่สอง โครงสร้างดัชนีนี้สามารถใช้สำหรับการค้นหาระยะใกล้แบบรวดเร็วและไม่ซับซ้อนได้ กล่าวคือ จุดที่ใกล้ที่สุดมักจะอยู่ในกลุ่มแฮชทางภูมิศาสตร์ที่ใกล้ที่สุด
คำอธิบายทางเทคนิค
คำอธิบายอย่างเป็นทางการสำหรับมุมมองเชิงคำนวณและคณิตศาสตร์
การนำเสนอข้อความ
สำหรับการแปลงค่าละติจูดและลองจิจูดที่แม่นยำ Geohash เป็นดัชนีเชิงพื้นที่ฐาน4เนื่องจากมันแปลงพิกัดละติจูดและลองจิจูดแบบต่อเนื่องให้เป็นตารางแบบไม่ต่อเนื่องเชิงลำดับชั้น โดยใช้การแบ่งพื้นที่ออกเป็นสี่ส่วนแบบวนซ้ำ เพื่อให้เป็นรหัสที่กระชับ จึงใช้ฐาน 32และแสดงค่าด้วยตัวอักษรต่อไปนี้ ซึ่งก็คือ "การแสดงค่าแบบข้อความมาตรฐาน"
| ทศนิยม | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ฐาน 32 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ข | ค | ง | อี | เอฟ | จี | |||
| ทศนิยม | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |||
| ฐาน 32 | ชม. | เจ | เค | ม | n | พี | q | ร | ส | ที | คุณ | วี | ว | x | y | z | |||
"อักษรจีโอแฮช" (32ghs) ใช้ตัวเลขทั้งหมด 0-9 และตัวอักษรพิมพ์เล็กทั้งหมด ยกเว้น "a", "i", "l" และ "o"
ตัวอย่างเช่น เมื่อใช้ตารางด้านบนและค่าคงที่Geohash สามารถแปลงเป็นรูปแบบทศนิยมได้โดยใช้สัญกรณ์ตำแหน่ง แบบธรรมดา : ezs42
- [
ezs42] 32ghs =
- =
- =
- = =
การแสดงผลทางเรขาคณิต
รูปทรงเรขาคณิตของ Geohash มีการแสดงผลเชิงพื้นที่แบบผสมผสาน:
- Geohash ที่มี 2, 4, 6, ... eหลัก ( เลข คู่ ) จะถูกแทนด้วยเส้นโค้งลำดับ Zใน "ตารางปกติ" โดยที่คู่ที่ถอดรหัสแล้ว (ละติจูด ลองจิจูด) มีความไม่แน่นอนสม่ำเสมอ ซึ่งถือเป็นGeo URIที่ ถูกต้อง
- จีโอแฮชที่มี 1, 3, 5, ... dหลัก (หลักคี่) จะถูกแทนด้วย "เส้นโค้งลำดับที่ И" ละติจูดและลองจิจูดของคู่ที่ถอดรหัสแล้วจะมีค่าความไม่แน่นอนต่างกัน (ลองจิจูดถูกตัดทอน)


สามารถสร้าง "เส้นโค้งลำดับที่ 1" จากเส้นโค้งลำดับที่ z ได้โดยการรวมเซลล์ที่อยู่ติดกันและกำหนดดัชนีให้กับตารางสี่เหลี่ยมผืนผ้าที่ได้ด้วยฟังก์ชัน ภาพประกอบแสดงวิธีการสร้างตารางที่มีเซลล์สี่เหลี่ยมผืนผ้า 32 เซลล์จากตารางที่มีเซลล์สี่เหลี่ยมจัตุรัส 64 เซลล์
คุณสมบัติที่สำคัญที่สุดของ Geohash สำหรับมนุษย์คือการรักษาระดับลำดับชั้นเชิงพื้นที่ในคำนำหน้าของรหัสตัวอย่างเช่น ในภาพประกอบ "ตาราง Geohash 1 หลัก" ที่ประกอบด้วยสี่เหลี่ยมผืนผ้า 32 รูปด้านบน บริเวณเชิงพื้นที่ของรหัสe(สี่เหลี่ยมผืนผ้าที่มีวงกลมสีเทาอมฟ้าอยู่ที่ตำแหน่ง 4,3) จะถูกรักษาไว้ด้วยคำนำหน้าeใน "ตาราง 2 หลัก" ที่ประกอบด้วยสี่เหลี่ยมผืนผ้า 1024 รูป (แสดงมาตราส่วนemและวงกลมสีเทาอมเขียวถึงสีน้ำเงินในตาราง)
อัลกอริทึมและตัวอย่าง
ยกตัวอย่างเช่น การใช้แฮชezs42เพื่อถอดรหัสเป็นละติจูดและลองจิจูดในรูปแบบเลขฐานสิบ ขั้นตอนแรกคือการถอดรหัสจากข้อความ " base 32ghs " ดังที่แสดงไว้ข้างต้น เพื่อให้ได้การแสดงผลในรูปแบบเลขฐานสอง:
- .
การดำเนินการนี้ส่งผลให้ได้บิต0110111111110000010000010เริ่มนับจากด้านซ้ายโดยให้เลข 0 อยู่ในตำแหน่งแรก ตัวเลขในตำแหน่งคู่จะประกอบเป็นรหัสลองจิจูด ( 0111110000000) ในขณะที่ตัวเลขในตำแหน่งคี่จะประกอบเป็นรหัสละติจูด ( 101111001001)
จากนั้น รหัสไบนารีแต่ละรหัสจะถูกนำไปใช้ในการหารหลายครั้ง โดยพิจารณาทีละบิต จากซ้ายไปขวา สำหรับค่าละติจูด ช่วง −90 ถึง +90 จะถูกหารด้วย 2 ทำให้ได้สองช่วง คือ −90 ถึง 0 และ 0 ถึง +90 เนื่องจากบิตแรกเป็น 1 จึงเลือกช่วงที่มีค่ามากกว่า และกลายเป็นช่วงปัจจุบัน กระบวนการนี้จะถูกทำซ้ำสำหรับทุกบิตในรหัส สุดท้าย ค่าละติจูดจะเป็นค่ากลางของช่วงที่ได้ ลองจิจูดจะถูกประมวลผลในลักษณะเดียวกัน โดยคำนึงว่าช่วงเริ่มต้นคือ −180 ถึง +180
ตัวอย่างเช่น ในรหัสละติจูด101111001001บิตแรกคือ 1 ดังนั้นเรารู้ว่าละติจูดของเราอยู่ระหว่าง 0 ถึง 90 หากไม่มีบิตเพิ่มเติม เราจะเดาว่าละติจูดคือ 45 ซึ่งจะทำให้เกิดข้อผิดพลาด ±45 เนื่องจากมีบิตเพิ่มเติม เราจึงสามารถดำเนินการต่อด้วยบิตถัดไป และแต่ละบิตถัดไปจะลดข้อผิดพลาดนี้ลงครึ่งหนึ่ง ตารางนี้แสดงผลกระทบของแต่ละบิต ในแต่ละขั้นตอน ครึ่งหนึ่งของช่วงที่เกี่ยวข้องจะถูกไฮไลต์ด้วยสีเขียว บิตต่ำจะเลือกช่วงล่าง บิตสูงจะเลือกช่วงบน
คอลัมน์ "ค่าเฉลี่ย" แสดงค่าละติจูด ซึ่งก็คือค่าเฉลี่ยของช่วงระยะทาง แต่ละบิตถัดไปจะทำให้ค่านี้มีความแม่นยำมากขึ้น
| รหัสละติจูด 101111001001 | ||||||
|---|---|---|---|---|---|---|
| ตำแหน่งบิต | ค่าบิต | นาที | กลาง | สูงสุด | ค่าเฉลี่ย | ข้อผิดพลาดสูงสุด |
| 0 | 1 | -90,000 | 0.000 | 90,000 บาท | 45,000 บาท | 45,000 บาท |
| 1 | 0 | 0.000 | 45,000 บาท | 90,000 บาท | 22,500 บาท | 22,500 บาท |
| 2 | 1 | 0.000 | 22,500 บาท | 45,000 บาท | 33.750 | 11.250 |
| 3 | 1 | 22,500 บาท | 33.750 | 45,000 บาท | 39.375 | 5.625 |
| 4 | 1 | 33.750 | 39.375 | 45,000 บาท | 42.188 | 2.813 |
| 5 | 1 | 39.375 | 42.188 | 45,000 บาท | 43.594 | 1.406 |
| 6 | 0 | 42.188 | 43.594 | 45,000 บาท | 42.891 | 0.703 |
| 7 | 0 | 42.188 | 42.891 | 43.594 | 42.539 | 0.352 |
| 8 | 1 | 42.188 | 42.539 | 42.891 | 42.715 | 0.176 |
| 9 | 0 | 42.539 | 42.715 | 42.891 | 42.627 | 0.088 |
| 10 | 0 | 42.539 | 42.627 | 42.715 | 42.583 | 0.044 |
| 11 | 1 | 42.539 | 42.583 | 42.627 | 42.605 | 0.022 |
| รหัสลองจิจูด 0111110000000 | ||||||
|---|---|---|---|---|---|---|
| ตำแหน่งบิต | ค่าบิต | นาที | กลาง | สูงสุด | ค่าเฉลี่ย | ข้อผิดพลาดสูงสุด |
| 0 | 0 | −180,000 | 0.000 | 180,000 บาท | -90,000 | 90,000 บาท |
| 1 | 1 | −180,000 | -90,000 | 0.000 | -45,000 | 45,000 บาท |
| 2 | 1 | -90,000 | -45,000 | 0.000 | −22.500 | 22,500 บาท |
| 3 | 1 | -45,000 | −22.500 | 0.000 | −11.250 | 11.250 |
| 4 | 1 | −22.500 | −11.250 | 0.000 | −5.625 | 5.625 |
| 5 | 1 | −11.250 | −5.625 | 0.000 | −2.813 | 2.813 |
| 6 | 0 | −5.625 | −2.813 | 0.000 | −4.219 | 1.406 |
| 7 | 0 | −5.625 | −4.219 | −2.813 | −4.922 | 0.703 |
| 8 | 0 | −5.625 | −4.922 | −4.219 | −5.273 | 0.352 |
| 9 | 0 | −5.625 | −5.273 | −4.922 | −5.449 | 0.176 |
| 10 | 0 | −5.625 | −5.449 | −5.273 | −5.537 | 0.088 |
| 11 | 0 | −5.625 | −5.537 | −5.449 | −5.581 | 0.044 |
| 12 | 0 | −5.625 | −5.581 | −5.537 | −5.603 | 0.022 |
(ตัวเลขในตารางด้านบนได้ถูกปัดเศษเป็นทศนิยม 3 ตำแหน่งเพื่อให้มองเห็นได้ชัดเจนยิ่งขึ้น)
การปัดเศษขั้นสุดท้ายควรทำอย่างระมัดระวังในลักษณะที่ว่า
ดังนั้น ในขณะที่การปัดเศษ 42.605 เป็น 42.61 หรือ 42.6 นั้นถูกต้อง แต่การปัดเศษเป็น 43 นั้นไม่ถูกต้อง
ตัวเลขและความแม่นยำในหน่วยกิโลเมตร
| ความยาวจีโอแฮช | บิตละติจูด | บิตยาว | ข้อผิดพลาด lat | ข้อผิดพลาด lng | ข้อผิดพลาดกิโลเมตร |
|---|---|---|---|---|---|
| 1 | 2 | 3 | ±23 | ±23 | ±2,500 กม. (1,600 ไมล์) |
| 2 | 5 | 5 | ±2.8 | ±5.6 | ±630 กม. (390 ไมล์) |
| 3 | 7 | 8 | ±0.70 | ±0.70 | ±78 กม. (48 ไมล์) |
| 4 | 10 | 10 | ±0.087 | ±0.18 | ±20 กม. (12 ไมล์) |
| 5 | 12 | 13 | ±0.022 | ±0.022 | ±2.4 กม. (1.5 ไมล์; 2,400 เมตร) |
| 6 | 15 | 15 | ±0.0027 | ±0.0055 | ±0.61 กม. (0.38 ไมล์; 610 เมตร) |
| 7 | 17 | 18 | ±0.00068 | ±0.00068 | ±0.076 กม. (0.047 ไมล์; 76 เมตร) |
| 8 | 20 | 20 | ±0.000085 | ±0.00017 | ±0.019 กม. (0.012 ไมล์; 19 เมตร) |
ข้อจำกัดเมื่อนำไปใช้ในการตัดสินความใกล้เคียง
กรณีพิเศษ
รหัส Geohash สามารถใช้ค้นหาจุดที่อยู่ใกล้เคียงกันโดยอาศัยคำนำหน้าเดียวกัน อย่างไรก็ตาม ในกรณีพิเศษสถานที่ที่อยู่ใกล้กันแต่คนละฝั่งของเส้นเมริเดียน 180 องศา จะทำให้รหัส Geohash ไม่มีคำนำหน้าเดียวกัน (ลองจิจูดต่างกันสำหรับสถานที่ใกล้เคียงกัน) จุดที่อยู่ใกล้ขั้วโลกเหนือและขั้วโลกใต้จะมีรหัส Geohash ที่แตกต่างกันมาก (ลองจิจูดต่างกันสำหรับสถานที่ใกล้เคียงกัน)
สองตำแหน่งที่อยู่ใกล้กันบนสองซีกโลกของเส้นศูนย์สูตร (หรือเส้นเมริเดียนกรีนิช) จะไม่มีคำนำหน้าชื่อร่วมกันยาวๆ เนื่องจากตำแหน่งเหล่านั้นอยู่ใน "ซีกโลก" ที่แตกต่างกัน กล่าวคือ ละติจูด (หรือลองจิจูด) ในระบบเลขฐานสองของตำแหน่งหนึ่งจะเป็น 011111... และอีกตำแหน่งหนึ่งจะเป็น 100000.... ดังนั้นจึงไม่มีคำนำหน้าชื่อร่วมกัน และบิตส่วนใหญ่จะสลับกัน นี่อาจเป็นผลมาจากการใช้เส้นโค้งลำดับ Z (ซึ่งอาจเรียกได้ว่าเป็นลำดับการเยี่ยมชม N ในกรณีนี้) ในการจัดเรียงจุด เนื่องจากสองจุดที่อยู่ใกล้กันอาจถูกเยี่ยมชมในเวลาที่ต่างกันมาก อย่างไรก็ตาม สองจุดที่มีคำนำหน้าชื่อร่วมกันยาวๆ จะอยู่ใกล้กัน
เพื่อทำการค้นหาความใกล้เคียง เราสามารถคำนวณมุมตะวันตกเฉียงใต้ (geohash ต่ำที่มีละติจูดและลองจิจูดต่ำ) และมุมตะวันออกเฉียงเหนือ (geohash สูงที่มีละติจูดและลองจิจูดสูง) ของกล่องขอบเขต และค้นหา geohash ระหว่างสองมุมนั้น การค้นหานี้จะดึงจุดทั้งหมดในเส้นโค้งลำดับ z ระหว่างสองมุม ซึ่งอาจมีจุดมากเกินไป วิธีนี้ยังใช้ไม่ได้ผลที่เส้นเมริเดียน 180 องศาและขั้วโลก Solr ใช้รายการตัวกรองของคำนำหน้า โดยคำนวณคำนำหน้าของช่องสี่เหลี่ยมที่ใกล้ที่สุดกับ geohash [1 ]
ความไม่เป็นเชิงเส้น
เนื่องจาก geohash (ในการใช้งานนี้) อิงตามพิกัดลองจิจูดและละติจูดระยะห่างระหว่าง geohash สองค่าจึงสะท้อนถึงระยะห่างในพิกัดละติจูด/ลองจิจูดระหว่างสองจุด ซึ่งไม่ได้แปลงเป็นระยะทางจริง โปรดดูสูตร Haversine
ตัวอย่างความไม่เป็นเชิงเส้นสำหรับระบบพิกัดละติจูด-ลองจิจูด:
- ที่เส้นศูนย์สูตร (0 องศา) ความยาวของหนึ่งองศาของเส้นลองจิจูดคือ 111.320 กิโลเมตร ในขณะที่หนึ่งองศาของเส้นละติจูดวัดได้ 110.574 กิโลเมตร ซึ่งมีความคลาดเคลื่อน 0.67%
- ที่ละติจูด 30 องศา (ละติจูดกลาง) ค่าความคลาดเคลื่อนคือ 110.852/96.486 = 14.89%
- ที่ละติจูด 60 องศา (อาร์กติกตอนเหนือ) ค่าความคลาดเคลื่อนคือ 111.412/55.800 = 99.67% และจะเพิ่มขึ้นเป็นอนันต์ที่ขั้วโลก
โปรดทราบว่าข้อจำกัดเหล่านี้ไม่ได้เกิดจาก geohashing และไม่ได้เกิดจากพิกัดละติจูด-ลองจิจูด แต่เกิดจากความยากลำบากในการแมปพิกัดบนทรงกลม (ไม่เป็นเชิงเส้นและมีการวนซ้ำของค่า คล้ายกับการคำนวณโมดูลัส) ไปยังพิกัดสองมิติ และความยากลำบากในการสำรวจพื้นที่สองมิติอย่างสม่ำเสมอ ข้อแรกเกี่ยวข้องกับระบบพิกัดทางภูมิศาสตร์และการฉายภาพแผนที่ส่วนข้อหลังเกี่ยวข้องกับเส้นโค้งฮิลเบิร์ตและเส้นโค้งลำดับ zเมื่อพบระบบพิกัดที่แสดงจุดในเชิงเส้นตามระยะทางและวนซ้ำที่ขอบ และสามารถสำรวจได้อย่างสม่ำเสมอ การใช้ geohashing กับพิกัดเหล่านั้นจะไม่ประสบปัญหาข้อจำกัดข้างต้น
แม้ว่าจะเป็นไปได้ที่จะใช้ geohashing กับพื้นที่ที่มีระบบพิกัดคาร์ทีเซียนแต่ก็จะใช้ได้เฉพาะกับพื้นที่ที่ระบบพิกัดนั้นใช้ได้เท่านั้น
แม้จะมีปัญหาเหล่านั้น แต่ก็ยังมีวิธีแก้ปัญหาที่เป็นไปได้ และอัลกอริทึมนี้ถูกนำไปใช้สำเร็จใน Elasticsearch [ 7 ] MongoDB [ 8 ] HBase, Redis [ 9 ]และAccumulo [ 10 ]เพื่อดำเนินการค้นหาระยะใกล้
ระบบการจัดทำดัชนีที่คล้ายกัน

ทางเลือกอื่นนอกเหนือจากการจัดเก็บ Geohash เป็นสตริงในฐานข้อมูลคือรหัสตำแหน่งซึ่งเรียกอีกอย่างว่าคีย์เชิงพื้นที่และคล้ายกับ QuadTiles [ 11 ] [ 12 ]
ใน ระบบสารสนเทศทางภูมิศาสตร์ บางระบบ และฐานข้อมูลเชิงพื้นที่บิ๊กดาต้าสามารถใช้การจัดทำดัชนีตามเส้นโค้งฮิลเบิร์ต เป็นทางเลือกแทน เส้นโค้งลำดับ Z ได้ เช่นในไลบรารีเรขาคณิต S2 [ 13 ]
การใช้งานหลักของ Geohash คือการทำหน้าที่เป็นgeocodeซึ่งก็คือรหัสข้อความสั้นๆ ที่มนุษย์อ่านได้ โดยใช้แทนพิกัดทางภูมิศาสตร์ ในบริบทนี้ ยังมีเทคโนโลยีอื่นๆ ที่ "คล้ายคลึงกัน" อีกด้วย:
- ซี-สแควร์ (2002)
- FixPhrase (? ลิงก์หรืออ้างอิง)
- GeohashPhrase [ 14 ] [ 15 ] (2019) อ้างอิงจาก Geohash
- GeoKey (2018, ลิขสิทธิ์เฉพาะ)
- Ghana Post GPS (2017)
- ระบบรหัสไปรษณีย์ระหว่างประเทศโดยใช้หน่วยลูกบาศก์เมตร (CubicPostcode.com)
- ระบบระบุตำแหน่งเมเดนเฮด (1980)
- รหัสมาคานีย์ (2011)
- MapCode (2008)
- ระบบพิกัดอ้างอิงทางทหาร
- รหัสพื้นที่ธรรมชาติ
- รหัสตำแหน่งที่ตั้งแบบเปิด (ปี 2014 หรือที่รู้จักกันในชื่อ "รหัสพลัส" ในGoogle Maps )
- เครื่องระบุตำแหน่ง QRA (1959)
- ระบบพิกัด Universal Transverse Mercator
- การระบุตัวตนด้วยวาจา
- what3words (2013, ลิขสิทธิ์)
- WhatFreeWords
- wherewords.id
- โวโลโค้ด
- GEOREF (รหัสลำดับชั้น 2 หลักที่คล้ายกัน)
- ที่อยู่ X
- 3Geonames (2018, โอเพนซอร์ส)
การออกใบอนุญาต
อัลกอริทึม Geohash ถูกเปิดเผยสู่สาธารณะโดยผู้คิดค้นในการประกาศต่อสาธารณะเมื่อวันที่ 26 กุมภาพันธ์ พ.ศ. 2551 [ 16 ]
แม้ว่าอัลกอริทึมที่เทียบเคียงได้จะได้รับการจดสิทธิบัตรสำเร็จแล้ว[ 17 ]และมีการอ้างสิทธิ์ในลิขสิทธิ์[ 18 ] [ 19 ]แต่ GeoHash นั้นใช้พื้นฐานจากอัลกอริทึมและวิธีการที่แตกต่างออกไปโดยสิ้นเชิง
มาตรฐานอย่างเป็นทางการ
Geohash ได้รับการกำหนดมาตรฐานเป็น CTA-5009 [ 20 ] มาตรฐานนี้เป็นไปตามบทความ Wikipedia ฉบับปี 2023 แต่ให้รายละเอียดเพิ่มเติมในเอกสารอ้างอิงอย่างเป็นทางการ (เชิงบรรทัดฐาน) เนื่องจากไม่มีข้อกำหนดอย่างเป็นทางการนับตั้งแต่การสร้าง Geohash องค์กร CTA WAVE จึงได้เผยแพร่ CTA-5009 เพื่อช่วยในการนำไปใช้และความเข้ากันได้ในวงกว้างมากขึ้นในหมู่ผู้ใช้งานในอุตสาหกรรม
ดูเพิ่มเติม
- รายชื่อระบบพิกัดทางภูมิศาสตร์แบบจีโอเดสิก
- Geohash-36 (ไม่ใช่ Geohash-variant)
- ตาราง (ดัชนีเชิงพื้นที่)
- ระบบระบุตำแหน่งเมเดนเฮด
- ระบบพิกัดอ้างอิงทางทหาร
- จำนวนมอร์ตัน (ทฤษฎีจำนวน)
- รหัสพื้นที่ธรรมชาติ
- ระบบการกำหนดหมายเลข
- รหัสสถานที่แบบเปิด (รหัส Plus)
- เส้นโค้งเติมเต็มพื้นที่
- คำศัพท์ 3 คำ
- เส้นโค้งลำดับ Z
ลิงก์ภายนอก
- เว็บไซต์อย่างเป็นทางการ
- การประมาณค่าจีโอแฮชสำหรับรูปทรงเรขาคณิต JTS
- สนามเด็กเล่น Geohash
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ จีโอแฮช
Geohash เป็น ระบบ geocode สาธารณะ ที่คิดค้นขึ้นในปี 2008 โดย Gustavo Niemeyer [ 2 ] ซึ่งเข้ารหัสตำแหน่งทางภูมิศาสตร์เป็นสตริงสั้นๆ ของตัวอักษรและตัวเลข...
ประวัติศาสตร์
ส่วนหลักของอัลกอริทึม Geohash และความคิดริเริ่มแรกในการแก้ปัญหาที่คล้ายกันได้รับการบันทึกไว้ในรายงานของ GM Morton ในปี 1966 เรื่อง "ฐานข้อมูลทางภูมิศาสตร์ที่มุ่งเน้นคอมพิวเตอร์และเทคนิคใหม่ในการจัดลำดับไฟล์" [ 3 ] งานของ Morton ถูกนำมาใช้สำหรับการใช้งาน...
การใช้งานทั่วไปและหลักๆ
ในการรับ Geohash ผู้ใช้จะต้องป้อนที่อยู่ที่จะแปลงเป็น พิกัดทางภูมิศาสตร์ หรือ พิกัด ละติจูดและลองจิจูด ในช่องป้อนข้อมูลช่องเดียว (โดยทั่วไปจะรองรับรูปแบบคู่ละติจูดและลองจิจูดที่ใช้กันทั่วไป) แล้วทำการร้องขอ
คำอธิบายทางเทคนิค
คำอธิบายอย่างเป็นทางการสำหรับมุมมองเชิงคำนวณและคณิตศาสตร์