คำถามติดแท็ก antimeridian

2
แนวทางปฏิบัติที่ดีที่สุดสำหรับฐานข้อมูลและ API ด้วยข้อมูลทางภูมิศาสตร์ที่ขยายแอนติเมริเดียน
แนวปฏิบัติที่ดีที่สุดสำหรับการจัดเก็บคุณลักษณะทางภูมิศาสตร์ (เส้นรูปหลายเหลี่ยมและเทียบเท่าหลายส่วน) เมื่อคุณสมบัติเหล่านี้ครอบคลุม antimeridian (± 180 °ลองจิจูด) และต้องถูกส่งไปและรับจากเว็บแอปพลิเคชันลูกค้าเป็น GeoJSON ฉันเริ่มทำงานกับเว็บ API ฝั่งเซิร์ฟเวอร์ด้วยการสนับสนุนจากฐานข้อมูล Postgres / PostGIS เพื่อทำงานกับแทร็กไซโคลนเขตร้อนและประวัติศาสตร์และพยากรณ์ลม พายุไซโคลนจำนวนมากในมหาสมุทรแปซิฟิกมีแนวโน้มที่จะโชคร้ายที่จะข้ามแอนติเมริเดียนซึ่งบางครั้งก็มีอายุการใช้งานหลายครั้ง: ในฐานะชาวนิวซีแลนด์ที่อาศัยอยู่ใกล้กับ antimeridian ฉันพบปัญหานี้บ่อยครั้งในข้อมูลระดับภูมิภาคที่จะมีกลวิธีการเผชิญปัญหา แต่ฉันอยากจะรู้ว่าสิ่งใดที่ถือว่าเป็นวิธีปฏิบัติที่ดีที่สุด น่าเสียดายที่ไม่มีคำถามที่ติดแท็กantimeridian อยู่ดังนั้นจึงยากที่จะค้นหาคำถามที่เกี่ยวข้อง คำถามเหล่านั้นที่ฉันได้เห็นการดิ้นรนปัญหานี้ทั้งหมดดูเหมือนจะหาคำแนะนำเฉพาะแอปพลิเคชันมาก คำถามนี้กล่าวถึง antimeridian สั้น ๆ สำหรับกรณีของรูปหลายเหลี่ยม GeoJSON ที่ครอบคลุมทั่วโลกโดยไม่มีขอบเขต คำถามนี้ค่อนข้างใกล้กับสิ่งที่ฉันถาม ฉันต้องเก็บไซโคลนประวัติศาสตร์และการพยากรณ์ในฐานข้อมูลเชิงพื้นที่ แต่ฉันคาดว่าจะมีปัญหากับแอนติเมริเดียน ตัวอย่างเช่นเส้นเริ่มต้นที่ละติจูด / ลองจิจูด(0,179)และสิ้นสุดที่(0,-179)ไม่ชัดเจนเกี่ยวกับทิศทางของมัน: ไม่ว่าจะใช้เส้นทางสั้นข้าม antimeridian หรือ "ล้อมรอบ" ทั่วทั้งดาวเคราะห์ เส้นทางดังกล่าวควรจัดเก็บไว้ในฐานข้อมูลเชิงพื้นที่อย่างไร (โดยเฉพาะฉันทำงานกับ PostGIS แต่ฉันหวังว่าโซลูชันนี้จะใช้งานได้ทั่วไป) ความคิดบางอย่างที่ฉันมี: ไม่ทำการเปลี่ยนแปลงรูปทรงเรขาคณิตและเลื่อนความกำกวมไปยังแอปพลิเคชันไคลเอนต์ แยกคุณลักษณะใด ๆ …

9
บรรทัดวันที่สากลล้อมรอบ
เมื่อใช้ OpenLayers ฉันเพิ่มเลเยอร์ WFS (บน GeoServer) ด้วยตัวกรองที่ส่งคืนฟีเจอร์ทั้งหมด (สีดำ) ที่ตัดกันรูปหลายเหลี่ยมของฉัน (สีเหลือง) ที่วางอยู่เหนือประเทศละตินอเมริกาบางแห่งภายในวันที่กำหนด อย่างไรก็ตามคุณสมบัติที่ข้ามในแนวนอนบนแผนที่ไม่ได้ตัดกับรูปหลายเหลี่ยมของฉัน คุณลักษณะนี้อยู่ที่ไหนสักแห่งในมหาสมุทรแปซิฟิกระหว่างฮาวายและฟิจิและไม่ใช่ในละตินอเมริกา ปัญหาคือแทนที่จะข้ามเส้นวันที่ระหว่างประเทศกำลังแสดงผลบนแผนที่โดยล้อมรอบทั้งโลก คุณสมบัติ problamatic ถูกกำหนด: POLYGON ((- 179.700417 14.202717, -178.687422 13.992875,179.024138 8.24716, -179.98241 8.035567, -179.700417 14.202717) ฉันมีคุณสมบัติของเส้นวันที่ที่เป็นปัญหาเช่นนี้ แต่มีการ จำกัด ให้แคบลงเป็นตัวอย่างนี้ ฉันไม่สามารถเพิกเฉยได้ในแอปพลิเคชันของฉันเพราะฉันมีหลายอย่าง ฉันได้ลองใช้ "wrapDateLine: true" ในชั้นฐานและชั้น WFS ด้วยผลลัพธ์เดียวกัน ไม่แน่ใจว่านี่จะเป็นปัญหา GeoServer หรือปัญหา OpenLayers ไม่มีใครรู้วิธีการแก้ปัญหาบรรทัดวันที่ระหว่างประเทศของฉัน?

3
รูปหลายเหลี่ยมข้าม dateline นานาชาติ [-180 .. + ลองจิจูด 180]
ฉันพยายามที่จะสร้างรูปหลายเหลี่ยมสำหรับ swaths วงโคจรของดาวเทียม จนถึงตอนนี้ฉันมีวิธีในการสร้างสองบรรทัดซึ่งแสดงถึงขอบของแต่ละ swath ใน [lat, long] บางส่วนของแนวเขตข้อมูลข้ามประเทศและล้อมรอบ: ฉันสามารถแก้ปัญหานี้ด้วยogr2ogr -wrapdateline: ogr2ogr -wrapdateline -f "ESRI Shapefile" test.shp orbits.shp ซึ่งจะแบ่งเส้นอาจ ตอนนี้ฉันต้องการที่จะสามารถสร้างรูปหลายเหลี่ยมในการตกแต่งภายในของทั้งสองสาย ตัวอย่างเช่นในกรณีที่ขอบหนึ่งของ swath ข้ามเส้นข้อมูลรูปหลายเหลี่ยมเติมเมื่อเกิดขึ้นในอีกด้านหนึ่งเช่น: ฉันต้องการวิธีการที่เป็นไปโดยอัตโนมัติตามที่ฉันต้องการเพื่อทำงานซ้ำมาก โดยเฉพาะอย่างยิ่งในงูหลามเนื่องจากเป็นวิธีที่ฉันสร้างบรรทัด นี่คือสองไฟล์รูปร่างที่มีเส้น: wraparound ; datelinefixed

4
การแยก Linestrings บน dateline ด้วย OpenLayers
สองสามปีที่ผ่านมาฉันโพสต์บรรทัดวันที่สากลล้อมรอบและ @jdeolive แนะนำให้ฉันแยกคุณสมบัติที่ dateLine ดังนั้นฉันจึงพยายาม เมื่อฉันพยายามที่จะแยกการติดตามดาวเทียมของฉันกับsplitWithnullในวันเดือนปีที่ผมได้รับกลับมา ฉันรู้ว่าฉันแยกอย่างถูกต้องเพราะเมื่อฉันแยกสายกรีนวิชฉันจะได้รับผลลัพธ์ที่คาดหวัง มีใครรู้บ้างว่าฉันสามารถแยกLinestringอย่างเป็นโปรแกรมตามบรรทัดวันที่ด้วย OpenLayers ได้อย่างไร ฉันค้นหาโค้ดตัวอย่างถ้าคุณมี ฉันลองแล้วwrapDateLineแต่ดูเหมือนว่ามันจะไม่ทำงานบนเลเยอร์เวกเตอร์แม้ว่าเลเยอร์เวกเตอร์ของฉันจะเป็นแบบนี้: vectorLayer = new OpenLayers.Layer.Vector("GroundTracks", { renderers: ['Canvas', 'VML'], wrapDateLine: true}); // <-- shoud be wraping. นี่คือรหัสของฉัน: var features = []; var format = new OpenLayers.Format.WKT({ 'internalProjection': map.baseLayer.projection, 'externalProjection': prjGeographic }); var satTrack = format.read("LINESTRING (95.538611 13.286511, 94.730711 16.908947, …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.