มีวิธีแก้ไขปัญหา FOSS สำหรับการวิเคราะห์คำในตำนานในสภาพแวดล้อมการทำแผนที่เว็บหรือไม่?


14

ข้อกำหนดการแมปเว็บของเรานั้นค่อนข้างเป็นมาตรฐาน - การสืบค้นพื้นฐานและความสามารถในการพิมพ์แผนที่ผลลัพธ์ (หรือบันทึกภาพ) โดยทั่วไปแล้วเราเคยใช้ผลิตภัณฑ์ ESRI ในอดีต (ตอนนี้เรากำลังใช้ GeoCortex) แต่เรายังไม่สามารถแก้ปัญหาการแยกวิเคราะห์ข้อมูลตำนานเพื่อให้ตรงกับสิ่งที่แสดงจริงบนแผนที่ ตัวอย่างเช่นหากมีรูปหลายเหลี่ยมสี่รูปปรากฏขึ้นบนแผนที่ควรมีสี่รายการในตำนานสำหรับรูปหลายเหลี่ยมเท่านั้น มีวิธีแก้ปัญหาโอเพนซอร์ซสำหรับปัญหานี้หรือไม่?

แก้ไข : มาดูกันว่าฉันจะอธิบายเพิ่มเติมได้ไหม ขณะนี้เรามีชั้นธรณีวิทยาที่มีรูปหลายเหลี่ยมมากกว่า 33,000 รูป เลเยอร์ของเลเยอร์นี้เป็นภาพเดียวและมีหลายร้อยรายการที่เป็นเลเยอร์ (เช่นเป็นเลเยอร์สำหรับธรณีวิทยาทั้งเลเยอร์ที่เก็บใน JPEG / PNG)

โดยทั่วไปผู้ใช้จะซูมเข้าในพื้นที่ (เช่นแผ่นแผนที่ NTS แผ่นเดียวหรือเล็กกว่า) และส่วนย่อยของรูปหลายเหลี่ยมทางธรณีวิทยาจะปรากฏบนหน้าจอ พวกเขาจะบันทึกแผนที่เป็นเอกสารการพิมพ์ (PDF หรือภาพ) ซึ่งสร้างโดยเซิร์ฟเวอร์ GeoCortex / ArcGIS เอกสารการพิมพ์จะมีส่วนหัวภาพของแผนที่และคำอธิบายประกอบ อย่างไรก็ตามตำนานสำหรับเลเยอร์ธรณีวิทยาจะเป็นเลเยอร์สำหรับเลเยอร์ธรณีวิทยาทั้งหมดไม่ใช่สิ่งที่แสดงบนแผนที่ (เช่นชุดย่อยที่เล็กกว่า)

ดังนั้นฉันกำลังมองหาเพื่อดูว่ามีวิธีแก้ไขปัญหา FOSSเพื่อให้ฉันสามารถตัดออกหรือสร้างในส่วนย่อยของตำนานทางธรณีวิทยาซึ่งสะท้อนถึงรายการจริงบนหน้าจอ / บนแผนที่เพื่อไปกับเอกสารการพิมพ์ . ฉันหวังว่าสิ่งที่ชัดเจน; ฉันขอโทษถ้ามันไม่ได้!


1
สวัสดี ollyoop - ฉันมีเวลายากที่จะจินตนาการถึงผลลัพธ์ที่คุณต้องการ คุณสามารถใส่ตัวอย่างของตำนานที่ไม่ดีและเป็นตัวอย่างของตำนานที่ดีได้หรือไม่? ฉันคิดว่าอาจช่วยฉันหรือคนอื่นให้คำตอบ ขอบคุณ
andytilia

คุณลักษณะนี้รวมอยู่ในเซิร์ฟเวอร์ Arcgis 10.1 ฉันได้เห็นมันในระหว่างการนำเสนอของ ESRI
geogeek

อืมเราจะมาดูกันว่ามันมีผลอย่างไร ในระหว่างนี้มีโซลูชั่น FOSS หรือไม่?
ollyoop

1
ตาม FOSS หรือ ESRI ดูเหมือนว่าคุณจะต้องใช้รหัสที่กำหนดเอง
Ragi Yaser Burhum

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

คำตอบ:


3

เป็นไปได้แน่นอนที่จะทำสิ่งที่คุณต้องการขึ้นอยู่กับเงื่อนไขบางประการ ลองดูที่นี้ Flex App ฉันได้พัฒนาสองสามปีหลัง: http://india-wris.nrsc.gov.in/LULCApp.html

ตำนานและสถิติเปลี่ยนแปลงขึ้นอยู่กับข้อมูลที่มองเห็นได้ในขอบเขตปัจจุบัน อัลกอริทึมต้องการให้แต่ละชั้นมีสีที่แตกต่าง Flex Application รู้จักคลาสและสีของมัน ทุกครั้งที่มีการเปลี่ยนแปลงขอบเขตมันจะแปลงขอบเขตแผนที่ปัจจุบันเป็นบิตแมปแล้วค้นหาสีในนั้น เมื่อใช้สิ่งนี้คุณจะสามารถค้นหาสีหรือคลาสที่มองเห็นได้ในปัจจุบัน จากข้อมูลนี้ตำนานถูกสร้างขึ้นแบบไดนามิก

ฉันใช้ Flex ในเวลานั้น แต่สิ่งนี้สามารถใช้ Canvas ใน HTML5 ได้เช่นกัน หรือคุณสามารถใช้รหัสฝั่งเซิร์ฟเวอร์เพื่อทำสิ่งเดียวกันกับอิมเมจแผนที่ของคุณเพื่อรับตำนานที่สร้างขึ้นแบบไดนามิก


แค่นั้นแหละ! ยอดเยี่ยมในการดูตัวอย่างในทางปฏิบัติ ชื่นชมมาก !!!
ollyoop

5

AFAIK ใน FOSS4G หรือ ESRI คุณจะต้องเขียนโค้ดที่กำหนดเองเพื่อสร้างเลเยอร์นี้

มันไม่ได้เป็นที่ยาก แต่ก็จะนำคุณมากกว่าไม่กี่บรรทัดของรหัส

สำหรับ ArcMap นี้สามารถทำได้โดยใช้องค์ประกอบที่กำหนดเอง ช่วยเหลือเว็บไซต์ ESRI จะเต็มไปด้วยตัวอย่างเก่าและตัวอย่างใหม่

ในอดีตที่ผ่านมาผมได้ประสบความสำเร็จสิ่งที่คล้ายกับสิ่งที่คุณอธิบายโดยใช้ Pagelayout องค์ประกอบกรอบ

หากคุณไม่เคยทำ ArcObjects (แต่ได้ตั้งโปรแกรมไว้) รหัสการวาดอาจทำให้ยุ่งยากเล็กน้อย ขณะ

อัลกอริทึมง่าย:

  • (1) รับวัตถุแผนที่ของPageLayoutที่คุณต้องการใช้เป็นข้อมูลอ้างอิงในการสร้างตำนาน ... คุณอาจต้องจัดการกับหลาย ๆ เฟรมเพื่อเข้าถึงแผนที่ที่คุณต้องการเพราะ Pagelayout สามารถมีวัตถุแผนที่หลายอย่างที่แตกต่างกัน extents ซึ่งค่อนข้างแปลกถ้าคุณยังไม่ได้ทำการเขียนโปรแกรม ArcMap Pagelayout แบบกำหนดเองใด ๆ (คิดเกี่ยวกับแผนที่สิ่งที่ใส่เข้าไปเล็กน้อยที่คุณมี)

  • (2) หยิบVisible Extentของ ActiveView ของแผนที่ที่คุณต้องการ

  • (3) การใช้งานที่เป็นของคุณแบบสอบถามกรองเรขาคณิตห่วงและค้นหาผ่านทุกชั้นในแผนที่

  • (4) ถ้าเลเยอร์ส่งคืนระเบียนใด ๆคุณต้องวาดดังที่แสดงในตัวอย่างที่ฉันให้ไว้ก่อนหน้านี้

ขออภัยฉันไม่สามารถเสนอวิธีแก้ปัญหาที่ง่ายขึ้นให้คุณได้ แต่อย่างน้อยคุณจะสามารถทำให้มันดูได้ แต่คุณต้องการให้มันดู

ปรับปรุง:

เนื่องจากคุณต้องการทำสิ่งนี้ในบริบทของเว็บแอ็พพลิเคชันฉันจึงตรวจสอบเอกสารและมีหลายวิธีในการทำโดยใช้อัลกอริทึมที่คล้ายกัน

หนึ่งในนั้นคือผ่านส่วนขยายของวัตถุ ArcGIS เซิร์ฟเวอร์ คุณจะทำตามขั้นตอนทั้งหมดยกเว้น (1) (ไม่จำเป็นต้องกังวลเกี่ยวกับ Pagelayout ในบริบทนี้) เปิดเผยผลลัพธ์โดยใช้ REST

จากที่นี่คุณมีหลายตัวเลือก (ขึ้นอยู่กับว่าคุณต้องการใช้ Flex หรือ Javascript) แต่แนวคิดนี้เหมือนกัน - ในการรีเฟรชหน้าเว็บจะเรียกเว็บเซอร์ REST ที่คุณสร้างและวาดตำนาน

ข้อดีของวิธีนี้เมื่อเทียบกับผู้อื่นที่ได้รับการแนะนำคือคุณสามารถใช้สัญลักษณ์ใด ๆกับคุณลักษณะของคุณ (และไม่ จำกัด เฉพาะสีที่ต่างกันสำหรับสัญลักษณ์ของคุณลักษณะ) คุณสามารถใช้ภาษาเว็บที่คุณชื่นชอบสำหรับรหัสฝั่งไคลเอ็นต์ สัญลักษณ์ที่คุณสร้างขึ้นสำหรับตำนานสามารถสร้างขึ้นโดยอัตโนมัติจากแผนที่

ข้อเสียคือคุณจะต้องเขียน Server Object Extension! โชคดีที่มีตัวอย่าง ESRI ที่ทำ 75% ของสิ่งที่คุณต้องการอยู่แล้วและควรให้ความคิดที่ชัดเจนเกี่ยวกับวิธีดำเนินการกับความคิดเห็นที่ฉันทำไว้ข้างต้น

อัปเดต 2:เท่าที่เป็นโซลูชัน FOSS4G สำหรับแนวทางนี้วิธีเดียวกันนี้จะทำงานกับเซิร์ฟเวอร์ FOSS ใด ๆ แม้ว่า API จะแตกต่างกันเล็กน้อย


1
ขอบคุณมากสำหรับคำตอบ! มีเครื่องมือชื่อ Legend Limiter ที่ทำสิ่งนี้แล้วสำหรับสภาพแวดล้อม ArcGIS สิ่งที่ฉันต้องการทำคือพอร์ทนั้นสามารถทำแผนที่เว็บ
ollyoop

@ollyoop อย่างน้อยก็จนกว่า 9.3 ฉันรู้ว่าวิธีการเดียวกันนี้จะทำงานได้ดีอย่างสมบูรณ์สำหรับเซิร์ฟเวอร์ ArcGIS ฉันรู้ว่ามีการเปลี่ยนแปลงที่สำคัญในสถาปัตยกรรมการเรนเดอร์เซิร์ฟเวอร์ตั้งแต่ 9.3 และฉันยอมรับว่าไม่ได้ติดตามสิ่งนั้น ฉันจะแปลกใจถ้าองค์ประกอบที่กำหนดเองถูกดึงออกมาจาก 10.1
Ragi Yaser Burhum

@ollyoop เพิ่มวิธีการที่จะทำงานกับ ArcGIS Server
Ragi Yaser Burhum

3

เมื่อคุณส่งออกเป็น PDF ด้วย Geocortex Essentials ตำนานจะถูกสร้างขึ้นโดยรายงานย่อยในเทมเพลตการพิมพ์ รายงานย่อยนี้ได้รับเลเยอร์ที่มองเห็นได้ทั้งหมดที่ใช้ในการสร้างภาพแผนที่และ swatches คำอธิบายภาพทั้งหมดที่ผลิตโดย ArcGIS Server มันไม่ได้ออกแบบสอบถามเชิงพื้นที่เพื่อตรวจสอบว่ามีการวาดเลเยอร์ใด ๆ ในตำนานจริง ๆ ตามขอบเขตของพื้นที่พิมพ์หรือไม่

ดังนั้นหากคุณต้องการเปลี่ยนลักษณะการทำงานของตำนานคุณสามารถปรับแต่งรายงานย่อยคำอธิบายภาพหรือคุณสามารถใช้รูปภาพแทนรายงานย่อยเพื่อใส่คำอธิบายแผนภูมิลงในเทมเพลตการพิมพ์ หากคุณกำลังสร้างอิมเมจคำอธิบายอย่างใดเพื่อใช้ในวิวเวอร์ของคุณคุณควรจะสามารถใช้บริการนั้นซ้ำจากเอ็นจิ้นการพิมพ์

คำอธิบายแผนภูมิมีโค้ดแบบอินไลน์ที่ฝังอยู่แล้วบางส่วนซึ่งสลับการจัดรูปแบบสำหรับข้อความคำอธิบายแผนภูมิโดยขึ้นอยู่กับว่าสวอตช์นั้นเป็นเลเยอร์หรือคลาสในเลเยอร์ คุณสามารถดูรหัสแบบอินไลน์เมื่อเปลี่ยนเป็นแท็บ "การเขียนสคริปต์" ในเครื่องมือออกแบบรายงาน

(ฉันทำงานที่ Latitude Geographics)


1

เกี่ยวกับ "การทำแผนที่เว็บ" ด้วย "FOSS solution" เต็มรูปแบบ ...

  • "โซลูชั่น FOSS" จะต้อง "เป็นที่นิยม" (มีชุมชนขนาดใหญ่และเป็นระเบียบ) เพื่อความปลอดภัยมั่นคง ฯลฯ
  • แนวคิดสำคัญในการฟอสส์และระบบสารสนเทศภูมิศาสตร์เป็นมาตรฐาน : โซลูชั่นที่ดีที่สุดนำมาใช้มาตรฐานเช่นOGCคน
  • ทุกวันนี้ "web solution" ที่ได้รับความนิยมคือ OpenLayers, Mapserver, GeoServer, PostGIS และอื่น ๆ ทั้งหมดนี้มี core ที่สอดคล้องกับ OGC โซลูชัน "เซิร์ฟเวอร์ GeoCortex / ArcGIS" ไม่ใช่ FOSS แต่อาจเป็นไปตามมาตรฐาน OGC

และการพิจารณาทางเทคนิค: คุณกำลังใช้ "ความคุ้มครอง" ดังนั้นดี OGC มาตรฐานสำหรับการดึงข้อมูลเชิงพื้นที่ของคุณเป็น (?) WMS


วิธีง่ายๆ OGC ที่สอดคล้องกับปัญหาของคุณคือการใช้ WMS GetCapabilitiesและGetLegendGraphicบริการที่ส่งกลับคำอธิบายตำนานมาตรฐานเป็นไฟล์ XML และภาพที่มีตำนาน

หมายเหตุ: เมื่อคุณคิดถึงวิธีแก้ปัญหา GIS / FOSS คุณสามารถคิดด้วยมาตรฐานก่อนจากนั้นปัญหาจะลดลงเป็น "ปัญหาเลโก้ชิ้นที่รู้จักกันดี" และชิ้นส่วนมาจากผู้ขายรายใด

ArcGIS 10+ มี GetLegendGraphicแต่ตรวจสอบว่าคุณสามารถระบุ BBOX เพื่อแสดงเฉพาะชุดย่อยคำอธิบายได้หรือไม่


หากคุณต้องการสร้างเลย์เอาต์ของแผนที่พร้อมคำอธิบายแผนภูมิมีอีกส่วนหนึ่งของ "FOSS LEGO solution":

เซิร์ฟเวอร์แผนที่ FOSS เช่น MapServer (และผมคิดว่าการแก้ปัญหา ESRI เกินไป) สามารถนำเสนอJPEGภาพเป็น WMS (ไม่ได้ปูด้วยกระเบื้อง) คำขอแผนที่ - ดูWMS ของGetMapบริการ

PS: มันไม่ได้มาตรฐาน แต่บางทีเซิร์ฟเวอร์ของคุณสามารถกำหนดค่าให้แผนที่ที่มีคำอธิบายโดยเครื่องมือเทมเพลตเช่น MapServer

ในการสร้างเลย์เอาต์ของ "map with legend" คุณสามารถสร้าง HTML (หรือ "ไฟล์ PDF ได้ทันที") ด้วย Javascript, PHP หรือภาษาอื่นที่ทำหน้าที่ร้องขอบริการเว็บ (REST)สำหรับแผนที่และคำอธิบาย

ฉันต้องการสร้าง PDF จาก HTML: คุณสามารถใช้ wkHtmlToPdfซึ่งเป็นโซลูชัน FOSS สำหรับการแปลง HTML เป็น PDF ในการสร้างเลย์เอาต์ที่แย่กว่าด้วย "on JPEG JPEG" คุณสามารถใช้ชุดเครื่องมือ FOSS มาตรฐานเช่น imagemagickที่เซิร์ฟเวอร์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.