กลับไปหน้าบทความ

อ่าน 7 นาที

จีโอแฮช

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

จีโอแฮช

เซลล์ 6g [ 1 ]และซับกริดของมัน

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และแสดงค่าด้วยตัวอักษรต่อไปนี้ ซึ่งก็คือ "การแสดงค่าแบบข้อความมาตรฐาน"

ทศนิยม 0123456789101112131415
ฐาน 32 0123456789อีเอฟจี
 
ทศนิยม 16171819202122232425262728293031
ฐาน 32 ชม.เจเคnพีqทีคุณวีxyz

"อักษรจีโอแฮช" (32ghs) ใช้ตัวเลขทั้งหมด 0-9 และตัวอักษรพิมพ์เล็กทั้งหมด ยกเว้น "a", "i", "l" และ "o"

ตัวอย่างเช่น เมื่อใช้ตารางด้านบนและค่าคงที่Geohash สามารถแปลงเป็นรูปแบบทศนิยมได้โดยใช้สัญกรณ์ตำแหน่ง แบบธรรมดา : ezs42

[ ezs42] 32ghs =
=
=
= =

การแสดงผลทางเรขาคณิต

รูปทรงเรขาคณิตของ Geohash มีการแสดงผลเชิงพื้นที่แบบผสมผสาน:

  • Geohash ที่มี 2, 4, 6, ... eหลัก ( เลข คู่ ) จะถูกแทนด้วยเส้นโค้งลำดับ Zใน "ตารางปกติ" โดยที่คู่ที่ถอดรหัสแล้ว (ละติจูด ลองจิจูด) มีความไม่แน่นอนสม่ำเสมอ ซึ่งถือเป็นGeo URIที่ ถูกต้อง
  • จีโอแฮชที่มี 1, 3, 5, ... dหลัก (หลักคี่) จะถูกแทนด้วย "เส้นโค้งลำดับที่ И" ละติจูดและลองจิจูดของคู่ที่ถอดรหัสแล้วจะมีค่าความไม่แน่นอนต่างกัน (ลองจิจูดถูกตัดทอน)
เส้นโค้งของตาราง 32 เซลล์ได้มาจากการรวมเซลล์ 2x2 ของ "ระดับถัดไป" (ตาราง 64 เซลล์ที่แสดงในภาพนี้) เพื่อให้ได้การแสดงผลทางเรขาคณิตของ "Geohash เลขคี่"

สามารถสร้าง "เส้นโค้งลำดับที่ 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
ตำแหน่งบิต ค่าบิต นาที กลาง สูงสุด ค่าเฉลี่ย ข้อผิดพลาดสูงสุด
01-90,0000.00090,000 บาท45,000 บาท45,000 บาท
100.00045,000 บาท90,000 บาท22,500 บาท22,500 บาท
210.00022,500 บาท45,000 บาท33.75011.250
3122,500 บาท33.75045,000 บาท39.3755.625
4133.75039.37545,000 บาท42.1882.813
5139.37542.18845,000 บาท43.5941.406
6042.18843.59445,000 บาท42.8910.703
7042.18842.89143.59442.5390.352
8142.18842.53942.89142.7150.176
9042.53942.71542.89142.6270.088
10042.53942.62742.71542.5830.044
11142.53942.58342.62742.6050.022
รหัสลองจิจูด 0111110000000
ตำแหน่งบิต ค่าบิต นาที กลาง สูงสุด ค่าเฉลี่ย ข้อผิดพลาดสูงสุด
00−180,0000.000180,000 บาท-90,00090,000 บาท
11−180,000-90,0000.000-45,00045,000 บาท
21-90,000-45,0000.000−22.50022,500 บาท
31-45,000−22.5000.000−11.25011.250
41−22.500−11.2500.000−5.6255.625
51−11.250−5.6250.000−2.8132.813
60−5.625−2.8130.000−4.219 1.406
70−5.625−4.219 −2.813−4.922 0.703
80−5.625−4.922 −4.219 −5.273 0.352
90−5.625−5.273 −4.922 −5.449 0.176
100−5.625−5.449 −5.273 −5.537 0.088
110−5.625−5.537 −5.449 −5.581 0.044
120−5.625−5.581 −5.537 −5.603 0.022

(ตัวเลขในตารางด้านบนได้ถูกปัดเศษเป็นทศนิยม 3 ตำแหน่งเพื่อให้มองเห็นได้ชัดเจนยิ่งขึ้น)

การปัดเศษขั้นสุดท้ายควรทำอย่างระมัดระวังในลักษณะที่ว่า

ดังนั้น ในขณะที่การปัดเศษ 42.605 เป็น 42.61 หรือ 42.6 นั้นถูกต้อง แต่การปัดเศษเป็น 43 นั้นไม่ถูกต้อง

ตัวเลขและความแม่นยำในหน่วยกิโลเมตร

ความยาวจีโอแฮช บิตละติจูด บิตยาว ข้อผิดพลาด lat ข้อผิดพลาด lng ข้อผิดพลาดกิโลเมตร
123±23±23±2,500 กม. (1,600 ไมล์)
255±2.8±5.6±630 กม. (390 ไมล์)
378±0.70±0.70±78 กม. (48 ไมล์)
41010±0.087±0.18±20 กม. (12 ไมล์)
51213±0.022±0.022±2.4 กม. (1.5 ไมล์; 2,400 เมตร)
61515±0.0027±0.0055±0.61 กม. (0.38 ไมล์; 610 เมตร)
71718±0.00068±0.00068±0.076 กม. (0.047 ไมล์; 76 เมตร)
82020±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 ฐาน 32 เดียวกันในเส้นโค้งดัชนีที่แตกต่างกันได้ สำหรับการปูพื้นด้วยรูปสี่เหลี่ยมเส้นโค้ง Hilbertเป็นทางเลือกที่ดีที่สุดแทนเส้นโค้ง Mortonซึ่งใช้ในเรขาคณิต S2 เป็นต้นรหัสที่มีจำนวนหลักเป็นเลขคู่ (2, 4, ...) จะถูกแมปไปยังตารางปกติ แต่รหัสที่มีจำนวนหลักเป็นเลขคี่ (1, 3, ...) จะต้องถูกแมปไปยังตารางตัวกลางที่ไม่ปกติ โดยมีเซลล์ที่จัดทำดัชนีโดยเส้นโค้งที่เสื่อมสภาพ

ทางเลือกอื่นนอกเหนือจากการจัดเก็บ Geohash เป็นสตริงในฐานข้อมูลคือรหัสตำแหน่งซึ่งเรียกอีกอย่างว่าคีย์เชิงพื้นที่และคล้ายกับ QuadTiles [ 11 ] [ 12 ]

ใน ระบบสารสนเทศทางภูมิศาสตร์ บางระบบ และฐานข้อมูลเชิงพื้นที่บิ๊กดาต้าสามารถใช้การจัดทำดัชนีตามเส้นโค้งฮิลเบิร์ต เป็นทางเลือกแทน เส้นโค้งลำดับ Z ได้ เช่นในไลบรารีเรขาคณิต S2 [ 13 ]

การใช้งานหลักของ Geohash คือการทำหน้าที่เป็นgeocodeซึ่งก็คือรหัสข้อความสั้นๆ ที่มนุษย์อ่านได้ โดยใช้แทนพิกัดทางภูมิศาสตร์ ในบริบทนี้ ยังมีเทคโนโลยีอื่นๆ ที่ "คล้ายคลึงกัน" อีกด้วย:

การออกใบอนุญาต

อัลกอริทึม Geohash ถูกเปิดเผยสู่สาธารณะโดยผู้คิดค้นในการประกาศต่อสาธารณะเมื่อวันที่ 26 กุมภาพันธ์ พ.ศ. 2551 [ 16 ]

แม้ว่าอัลกอริทึมที่เทียบเคียงได้จะได้รับการจดสิทธิบัตรสำเร็จแล้ว[ 17 ]และมีการอ้างสิทธิ์ในลิขสิทธิ์[ 18 ] [ 19 ]แต่ GeoHash นั้นใช้พื้นฐานจากอัลกอริทึมและวิธีการที่แตกต่างออกไปโดยสิ้นเชิง

มาตรฐานอย่างเป็นทางการ

Geohash ได้รับการกำหนดมาตรฐานเป็น CTA-5009 [ 20 ]   มาตรฐานนี้เป็นไปตามบทความ Wikipedia ฉบับปี 2023 แต่ให้รายละเอียดเพิ่มเติมในเอกสารอ้างอิงอย่างเป็นทางการ (เชิงบรรทัดฐาน) เนื่องจากไม่มีข้อกำหนดอย่างเป็นทางการนับตั้งแต่การสร้าง Geohash องค์กร CTA WAVE จึงได้เผยแพร่ CTA-5009 เพื่อช่วยในการนำไปใช้และความเข้ากันได้ในวงกว้างมากขึ้นในหมู่ผู้ใช้งานในอุตสาหกรรม

ดูเพิ่มเติม

  • เว็บไซต์อย่างเป็นทางการ
  • การประมาณค่าจีโอแฮชสำหรับรูปทรงเรขาคณิต JTS
  • สนามเด็กเล่น Geohash
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Geohash&oldid=1356068763 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ จีโอแฮช

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

ประวัติศาสตร์

ส่วนหลักของอัลกอริทึม Geohash และความคิดริเริ่มแรกในการแก้ปัญหาที่คล้ายกันได้รับการบันทึกไว้ในรายงานของ GM Morton ในปี 1966 เรื่อง "ฐานข้อมูลทางภูมิศาสตร์ที่มุ่งเน้นคอมพิวเตอร์และเทคนิคใหม่ในการจัดลำดับไฟล์" [ 3 ] งานของ Morton ถูกนำมาใช้สำหรับการใช้งาน...

การใช้งานทั่วไปและหลักๆ

ในการรับ Geohash ผู้ใช้จะต้องป้อนที่อยู่ที่จะแปลงเป็น พิกัดทางภูมิศาสตร์ หรือ พิกัด ละติจูดและลองจิจูด ในช่องป้อนข้อมูลช่องเดียว (โดยทั่วไปจะรองรับรูปแบบคู่ละติจูดและลองจิจูดที่ใช้กันทั่วไป) แล้วทำการร้องขอ

คำอธิบายทางเทคนิค

คำอธิบายอย่างเป็นทางการสำหรับมุมมองเชิงคำนวณและคณิตศาสตร์