กำหนดเวอร์ชันของไฟล์ ArcGIS Layer (*. lyr) โดยทางโปรแกรม


10

ฉันใช้ IStorage, Microsoft Compound File Spec, ArcObjects deserialization และอื่น ๆ พยายามตรวจสอบรุ่นของไฟล์. lyr

การใช้ ArcObjects ฉันสามารถรับได้ที่คุณสมบัติ Layer แหล่งข้อมูลขอบเขต ฯลฯ แต่คุณสมบัติ documentVersion ของ LayerFileClass จะรายงานกลับมา 'esriArcGISVersion10' ในไฟล์ 9.3 Layer เสมอ

ILayerFile l = new LayerFileClass();
l.Open(fileName);
LayerFileClass t = (LayerFileClass)l;
string version = t.DocumentVersion.ToString();

ความช่วยเหลือใด ๆ ที่ชื่นชม

หมายเหตุโพสต์ฟอรั่มที่คึกคักจากปี 2007


คุณได้รับผลลัพธ์ที่แตกต่างใน. NET vs java?
Kirk Kuykendall

1
คุณลองใช้ MemoryBlobStreamClass แทน LayerFileClass หรือไม่? เปิดไฟล์ lyr ด้วย IMemoryBlobStream.LoadFromFile จากนั้นส่งไปยัง IDocumentVersion
Kirk Kuykendall

ความคิดเห็นที่ 2: ฉันเพิ่งลอง - ฉันได้รับ esriArcGISVersion10 สำหรับไฟล์เลเยอร์ 8.3, 9 / 9.1, 9.2 และ 9.3 ความคิดเห็นที่ 1: Java .... ? นั่นอะไร? ;) ขอบคุณสำหรับความช่วยเหลือของคุณ. ฉันไม่คิดว่ามันเป็นไปได้
valveLondon

อาจเป็นประโยชน์หากเราเข้าใจว่าเหตุใดคุณจึงพยายามตรวจหารุ่นของไฟล์. lyr
Stephen Quan

1
เพราะฉันต้องการทราบว่ารุ่นคืออะไร
valveLondon

คำตอบ:


6

เมื่อโหลดไฟล์เลเยอร์แล้วจะเป็นเวอร์ชันปัจจุบันเมื่อเปิดอัปเกรด คุณสมบัติ DocumentVersion มีอยู่เพื่อตั้งค่ารุ่นสำหรับบันทึกกลับไปเป็นรุ่นก่อนหน้าด้วยคลาส LayerFile เท่านั้น

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


ขอบคุณสำหรับคำตอบ แต่ฉันหลงทางนิดหน่อย 'ประเภทเลเยอร์ที่เป็นไปได้' มีความหมายอย่างไร - เท่าที่ฉันสามารถบอกได้ว่ามีห้าเวอร์ชันที่เป็นไปได้: 8.3, 9 / 9.1, 9.2, 9.3 และ 10
valveLondon

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