আর্কম্যাপ নথি সংস্করণ নির্ধারণ করতে আরকিপি ব্যবহার করছেন?


21

ম্যাপ ডকুমেন্ট (এমএক্সডি) এর সংস্করণ সনাক্ত করার জন্য আরকিপাইয়ের সাথে কি কোনও উপায় আছে ? আমি আমাদের এমএক্সডি এর ইনভেন্টরির সমাধানে কাজ করছি এবং এটি জানতে চাই যে কোনও নথি 8.1, 9.2, 10.0 ইত্যাদি আছে কিনা know

আমি বর্তমানে আরকিজিআইএস 10.0 ব্যবহার করছি, তবে যদি 10.1-তে কোনও আপডেট থাকে যা 10.0-তে বিদ্যমান না থাকে, আমি তা শুনেও প্রশংসা করব।

আমি দেখতে পাচ্ছি এখানে পূর্ববর্তী প্রশ্ন রয়েছে কীভাবে আপনি আর্গজিআইএস সংস্করণটি অগ্রগতিতে খুঁজে পাবেন? , তবে এটি সমস্ত আর্কওবজেক্টস সমাধানগুলির রেফারেন্স করে (যা আমি মনে করি যে আমি পাইথন থেকে কল করতে পারি , তবে আমি পছন্দ না করব)।


2
আমি মনে করি এটির জন্য কেবলমাত্র পঠনযোগ্য সংস্করণের বৈশিষ্ট্যটি মানচিত্র ডকুমেন্ট অবজেক্টে যুক্ত করার জন্য বর্ধনের অনুরোধের প্রয়োজন হতে পারে । যদি আপনি একটি খুঁজে পান / তৈরি করেন তবে এটির সাথে এখানে লিঙ্ক দিন এবং আমি এটির পক্ষে ভোট দেব।
পলিজিও

একটি সংস্করণ নিয়ন্ত্রণ আরকগিস আইডিয়া রয়েছে। (ভাল, 3 একটিতে একীভূত হয়েছে)
gm70560

আমি আপনার স্ক্রিপ্টটি অনুলিপি করেছি, আমার পরিবেশের জন্য এটি কিছুটা সংশোধন করেছি এবং এটি আমার কয়েকটি ফাইলে চালিয়েছি, তবে কিছু ফাইলগুলি 9.3 বা 10.0-এ সংরক্ষিত হয়েছে জানার পরেও কোনও সংস্করণ ফেরেনি। আমি নিশ্চিত নন যে ভাঙা ডেটা উত্সগুলি আপনার স্ক্রিপ্টটিকে গোলমাল করবে।

সম্পর্কিত: gisnuts.com/terra/blog/2014/02/24/… এখানে গৃহীত উত্তরের উত্তর অনুসরণের প্রশ্নে একটি মন্তব্যে @ উদঞ্জারেল একটি দুর্দান্ত সন্ধান পেয়েছেন । এই ব্লগ পোস্টের উপর ভিত্তি করে, এটি করার কোনও 100% নির্ভরযোগ্য উপায় নেই কারণ তথ্যটি কেবল অনুমানযোগ্য পদ্ধতিতে ফাইলটিতে সঞ্চয় করা হয়নি। এখানে উভয় উত্তর কিছু সময় কাজ করবে তবে সমস্ত সময় নয়।
ক্রিস ডাব্লু

উত্তর:


23

আমি জানি এই প্রশ্নটি কয়েক মাস পুরানো, তবে এটি অন্যকে সাহায্য করার ক্ষেত্রে আমি এটি পোস্ট করছি। আমি এই ক্লেজটি এমএক্সডি ডকুমেন্টগুলি থেকে সংস্করণ নম্বরগুলি পার্স করতে বিকাশ করেছি। এটি মূলত একটি এমএক্সডি ডকুমেন্টের প্রথম 4000 বা তত অক্ষর পড়ে এবং একটি সংস্করণ নম্বর অনুসন্ধান করে। আমি এমএক্সডি 9.2, 9.3, 10.0 এবং 10.1 সংস্করণ দিয়ে পরীক্ষা করেছি।

import re

def getMXDVersion(mxdFile):
    matchPattern = re.compile("9.2|9.3|10.0|10.1|10.2")
    with open(mxdFile, 'rb') as mxd:
        fileContents = mxd.read().decode('latin1')[1000:4500]
        removedChars = [x for x in fileContents if x not in [u'\xff',u'\x00',u'\x01',u'\t']]
        joinedChars = ''.join(removedChars)
        regexMatch = re.findall(matchPattern, joinedChars)
        if len(regexMatch) > 0:
            version = regexMatch[0]
            return version
        else:
            return 'version could not be determined for ' + mxdFile

এখানে এমএক্সডি ফাইলগুলির জন্য একটি ফোল্ডার স্ক্যান করার এবং সংস্করণ এবং নামগুলি মুদ্রণের উদাহরণ রয়েছে

import os
import glob
folder = r'C:\Users\Administrator\Desktop\mxd_examples'
mxdFiles = glob.glob(os.path.join(folder, '*.mxd'))
for mxdFile in mxdFiles:
    fileName = os.path.basename(mxdFile)
    version = getMXDVersion(mxdFile)
    print version, fileName

যা এটি ফেরত দেয়:

>>> 
10.0 Arch_Cape_DRG.mxd
9.2 class_exercise.mxd
9.3 colored_relief2.mxd
10.1 CountyIcons.mxd
10.0 DEM_Template.mxd
9.2 ex_2.mxd
10.0 nairobimap.mxd
10.0 slope_script_example.mxd
10.1 TrailMapTemplateBetter.mxd
10.0 Wickiup_Mountain_DEM.mxd
>>>

এটা খুব সুন্দর! খুব দরকারী. এখন আমরা স্তর এবং জিওডাটাবেসগুলি পাশাপাশি এটি করতে পারি?
মাইক 19

এটি খাঁটি দুর্দান্ত!
dchaboya

10.4 এর আগে ওয়ার্ক উইল আমি মেক্সডিকে হেক্সা রিডার সহ বিশ্লেষণ করেছি এবং সংস্করণটির অবস্থানের পরিবর্তন হয়েছে (এটি পথের আগে এবং আজ এটি পথের আগে এবং "বিল্ড নম্বর" উপসর্গের শব্দের মান যোগ করুন (10.4.0.5524)। 10.3.1 I দিয়ে
হেক্সা

1
এটি আমার পক্ষে কাজ করছে বলে মনে হচ্ছে না, 10.2.2 এ পুনরায় স্থান প্রাপ্ত 10.6.1 এমএক্সএসডিএস পরীক্ষা করা (সমস্ত রিটার্ন 'সংস্করণ নির্ধারণ করা যায়নি') ... এই স্ক্রিপ্টটিতে সংহত করার জন্য এমএক্সডি ডক্সে কোনও আপডেট আছে?
জেসনবিকে

14

নীচের ফাংশনটি রায়ের ধারণার উপর ভিত্তি করে তৈরি হয়েছে তবে এটি আরও কিছুটা সরাসরি। আর্কজিআইএস মানচিত্রের নথিগুলি আসলে ওএলই নথি হয়, যা oletoolsমডিউলটির মাধ্যমে পার্স করা যায় (পাইপিতে পাওয়া যায়: https://pypi.python.org/pypi/oletools )। ফাংশনটি ফাইলটি খোলে এবং সংস্করণটির স্ট্রিং পড়ে। 9.0, 9.3, 10.1 এবং 10.3 দিয়ে পরীক্ষিত, তবে যে কোনও কিছুর সাথে কাজ করা উচিত (3.x সম্পর্কে নিশ্চিত নয় ...)।

from oletools.thirdparty import olefile

def mxd_version(filename):
    ofile = olefile.OleFileIO(filename)
    stream = ofile.openstream('Version')
    data = stream.read().decode('utf-16')
    version = data.split('\x00')[1]
    return version

if __name__ == '__main__':
    import sys
    print(mxd_version(sys.argv[-1]))

1
এটিও দুর্দান্ত কাজ। এই ফাংশনটি ব্যবহার করার বিরুদ্ধে আমি কেবল দ্বিধা বোধ করব তা হ'ল এটির জন্য কোনও তৃতীয় পক্ষের লাইব্রেরি (ওলিটলস) ডাউনলোড / ইনস্টল করা প্রয়োজন যা কিছু সংস্থায় ব্যবহারকারীরা করতে সক্ষম নাও হতে পারে।
রায়ানডাল্টন

আমি কেবল একটি ভোট পেয়েছি, তবে এটি অন্য ক্ষেত্রে উত্তর না দেয় এমন ক্ষেত্রে কাজ করবে।
ডিওয়াইন

Snorfalorpagus 10.3 অবধি এটি ভালভাবে কাজ করে তবে 10.4-র জন্য অন্য একটি স্ট্রিম কী 'এমএক্স ডকুমেন্ট ভার্সন ইনফো' রয়েছে সম্পূর্ণ বিল্ড নম্বর সংস্করণ সহ। আমি আরকিসের বিভিন্ন সংস্করণ এবং আমার শেষ সংস্করণটি 10.4.0.5524 এর সাথে চেক করেছি
জিওস্টোনমার্টেন

মজাদার. আমি এখনও 10.4 এ আপগ্রেড করি নি। আপনি কি আমাকে দেখার জন্য একটি ফাঁকা এমএক্সডি ভাগ করতে পারেন?
Snorfalorpagus

1
ধন্যবাদ জিস্টোনমার্টেন ধন্যবাদ আপনার প্রেরিত দলিলটি আমি দেখেছি। এটি আসল কোডটি নিয়ে কাজ করছে বলে মনে হচ্ছে - আমি "এমএক্স ডকুমেন্ট সংস্করণ তথ্য" প্রবাহটি দেখছি না?
স্নোরফালোরপাগাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.