ดูการเคลื่อนไหวNoSQL ที่เพิ่มขึ้นและพิจารณาว่าฐานข้อมูลอย่างMongoDBนำเสนอมุมมองใหม่ในการจัดเก็บข้อมูลที่ยืดหยุ่นสำหรับ GIS วิธีที่ดีที่สุดในการจัดเก็บบรรทัดและรูปหลายเหลี่ยมในเอกสาร JSON เพื่อใช้ประโยชน์จากดัชนี 2dและฟังก์ชันเชิงพื้นที่คืออะไร
ดูการเคลื่อนไหวNoSQL ที่เพิ่มขึ้นและพิจารณาว่าฐานข้อมูลอย่างMongoDBนำเสนอมุมมองใหม่ในการจัดเก็บข้อมูลที่ยืดหยุ่นสำหรับ GIS วิธีที่ดีที่สุดในการจัดเก็บบรรทัดและรูปหลายเหลี่ยมในเอกสาร JSON เพื่อใช้ประโยชน์จากดัชนี 2dและฟังก์ชันเชิงพื้นที่คืออะไร
คำตอบ:
GeoJSONนี่เป็นรายละเอียด
นี่คือตัวอย่างของเส้นและรูปหลายเหลี่ยม:
{ "type": "FeatureCollection",
"features": [
{ "type": "Feature",
"geometry": {"type": "Point", "coordinates": [102.0, 0.5]},
"properties": {"prop0": "value0"}
},
{ "type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]
]
},
"properties": {
"prop0": "value0",
"prop1": 0.0
}
},
{ "type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0],
[100.0, 1.0], [100.0, 0.0] ]
]
},
"properties": {
"prop0": "value0",
"prop1": {"this": "that"}
}
}
]
}
สิ่งหนึ่งที่ควรทราบคือการสนับสนุน MongoDB สำหรับประเภทข้อมูลเชิงพื้นที่นั้นไม่ดีอย่างน่ากลัวสำหรับการค้นหาเชิงพื้นที่ใด ๆ ที่ร้ายแรงและสิ่งนี้ใช้ได้กับทุกกระดานเมื่อใช้ NoSQL เมื่อฉันตรวจสอบ ฉันไม่ชอบ GeoCouch ค่อนข้างน้อย แต่ก็ยังมีวิธีไปด้วย
GeoJSON เป็นรูปแบบที่ยอดเยี่ยม แต่เพื่อใช้ประโยชน์จากดัชนีเชิงพื้นที่ที่ จำกัด (เฉพาะจุด) ใน Mongo คุณจะต้องมีคอลเล็กชั่นที่มีการจัดทำดัชนีเชิงพื้นที่โดยไม่มีอะไรเลยนอกจากบันทึกสำหรับคะแนนแต่ละจุดของรูปหลายเหลี่ยม เร็กคอร์ดเชิงพื้นที่ที่อาศัยอยู่ในคอลเล็กชันอื่นจากนั้นใช้เคียวรีบ็อกซ์ขอบเขตเพื่อรับ ID เร็กคอร์ดจากหนึ่งและเลือกจากอื่น ๆ จำลองการเข้าร่วมได้อย่างมีประสิทธิภาพ
คุณสามารถไปแฮ็คและทำมุมของกล่องขอบเพื่อเป็นจุดสำหรับบันทึกของคุณ แต่จากนั้นการค้นหากล่องอาจจะล้มเหลวและทั้งหมดนี้มันส่งผลให้รูปแบบการออกแบบที่ไม่มีประสิทธิภาพและผลักดันความรับผิดชอบทุกประเภท
เป็นการดำเนินการอ้างอิงคุณอาจต้องการอ้างถึงรหัสนี้ซึ่งถูกนำเสนอในการประชุมสุดยอดนักพัฒนา Esri ในปีนี้
ฉันไม่ได้มีความสุขเลยด้วยการสนับสนุนเชิงพื้นที่ในฐานข้อมูล NoSQL ต่างๆ พวกเขาไปไกลพอสำหรับการค้นหา cloud dumb point ซึ่งเหมาะสมแล้วเมื่อพิจารณาว่าแอพส่วนใหญ่ที่ใช้แอพนี้กำลังวาง pushpins ลงบนแผนที่ Google บนเบราว์เซอร์ที่ไหนสักแห่ง PostGIS ยังคงเป็นสิ่งที่ดีที่สุดสำหรับโอเพ่นซอร์สในการจัดการข้อมูลเชิงพื้นที่สำหรับอนาคตอันใกล้
นี้เป็นเพียงไม่เป็นความจริง,
"เพื่อใช้ประโยชน์จากดัชนีเชิงพื้นที่ใน Mongo คุณจะต้องมีการจัดทำดัชนีเชิงพื้นที่โดยไม่เก็บอะไรเลยนอกจากบันทึกสำหรับแต่ละจุดของรูปหลายเหลี่ยมด้วยค่าเพิ่มเติมสำหรับรหัสระเบียนของเร็กคอร์ดเชิงพื้นที่ของคุณที่อาศัยอยู่ในคอลเล็กชันอื่น เคียวรีบ็อกซ์ขอบเขตเพื่อรับ ID เร็กคอร์ดจากหนึ่ง [คอลเลกชัน] และเลือก [บันทึกข้อมูล] จากอีก [คอลเลกชัน] โดยจำลองการเข้าร่วมได้อย่างมีประสิทธิภาพ "
ฉันมีข้อมูลจุด USGS ที่เก็บอยู่ในคอลเลกชัน Mongo เดียวพร้อมระเบียนที่มีลักษณะเช่นนี้:
> db.names.find({FEATURE_NAME: 'Mount Saint Helens', STATE_ALPHA: 'WA'})
{ "_id" : ObjectId("4e262106d7a99b7db41a4919"),
"_ID" : 1525360,
"FEATURE_NAME" : "Mount Saint Helens",
"FEATURE_CLASS" : "Summit",
"STATE_ALPHA" : "WA",
"STATE_FIPS" : 53,
"COUNTY_NAME" : "Skamania",
"COUNTY_FIPS" : "059",
"COORDS" : [ -122.1944, 46.1912 ],
"ELEV_IN_FT" : "8356" }
ฉันสามารถที่จะทำการสืบค้นกล่องข้อมูลที่ส่งคืนระเบียนทั้งหมด (โดยไม่จำเป็นต้องมีการรวบรวมอื่น) ได้ดี
ค้นหา:
> box = [[-126.562500,45.089036], [-123.750000,47.040182]]
[ [ -126.5625, 45.089036 ], [ -123.75, 47.040182 ] ]
> db.names.find({"COORDS" : {"$within" : {"$box" : box}}, FEATURE_CLASS: "Summit"}, {FEATURE_NAME: true, COUNTY_NAME: true, STATE_ALPHA: true, ELEV_IN_FEET: true}).limit(5);
การตอบสนอง:
{ "_id" : ObjectId("4e2620f8d7a99b7db4146cec"), "FEATURE_NAME" : "Harlocker Hill", "STATE_ALPHA" : "OR", "COUNTY_NAME" : "Coos" }
{ "_id" : ObjectId("4e2620f8d7a99b7db414a349"), "FEATURE_NAME" : "Neskowin Crest", "STATE_ALPHA" : "OR", "COUNTY_NAME" : "Tillamook" }
{ "_id" : ObjectId("4e2620f8d7a99b7db414a105"), "FEATURE_NAME" : "Miles Mountain", "STATE_ALPHA" : "OR", "COUNTY_NAME" : "Tillamook" }
{ "_id" : ObjectId("4e2620f8d7a99b7db414934a"), "FEATURE_NAME" : "Mount Gauldy", "STATE_ALPHA" : "OR", "COUNTY_NAME" : "Tillamook" }
{ "_id" : ObjectId("4e2620f8d7a99b7db4149d06"), "FEATURE_NAME" : "Little Hebo", "STATE_ALPHA" : "OR", "COUNTY_NAME" : "Yamhill" }
Mongo ยังให้ความสามารถในการทำการค้นหาเพื่อนบ้านที่ใกล้ที่สุดรวมถึงจุดในการค้นหารูปหลายเหลี่ยม นี่เป็นเอกสารที่ดีที่mongodb.org