আমি এমন কিছু জিনিস স্ক্রিপ্ট করতে সক্ষম হতে চাই যা arcgisscripting
আর্কপাইয়ের মাধ্যমে প্রকাশ করা হয়নি।
আমি পাইথন থেকে আরকঅবজেক্টগুলি কীভাবে অ্যাক্সেস করব ?
আমি এমন কিছু জিনিস স্ক্রিপ্ট করতে সক্ষম হতে চাই যা arcgisscripting
আর্কপাইয়ের মাধ্যমে প্রকাশ করা হয়নি।
আমি পাইথন থেকে আরকঅবজেক্টগুলি কীভাবে অ্যাক্সেস করব ?
উত্তর:
ডাউনলোড করে ইনস্টল করুন comtypes *, করা Snippets
কোনো PYTHONPATH মার্ক Cederholm থেকে মডিউল, এবং আপনি পুরোপুরি তৈরি।
from snippets102 import GetLibPath, InitStandalone
from comtypes.client import GetModule, CreateObject
m = GetModule(GetLibPath() + "esriGeometry.olb")
InitStandalone()
p = CreateObject(m.Point, interface=m.IPoint)
p.PutCoords(2,3)
print p.X, p.Y
পটভূমির জন্য "পাইথনের আর্কওবেক্টস ব্যবহার করে " উপর উবারপাইগিক্সের জন্য মার্ক সিডারহোলমের উপস্থাপনাগুলি দেখুন । ভিবিএ এবং সি ++ বিকাশকারী দৃষ্টিভঙ্গির জন্য আলাদা আলাদা রয়েছে। তারা ভিজ্যুয়াল স্টুডিও (হ্যাঁ এক্সপ্রেস ঠিক আছে) এবং উইন্ডোজ এসডিকে ব্যবহার করে তবে এগুলি প্রয়োজন হয় না, কেবল আর্কজিআইএস, পাইথন এবং কমপিপগুলি যথেষ্ট।
* 10.1+ এর জন্য দ্রষ্টব্য আপনাকে automation.py
কমপ্লেস মডিউলে একটি ছোট পরিবর্তন করতে হবে । আরকোবজেক্টস + কমপিপগুলি 10.1 এ দেখুন ।
... বা: মস্তিস্কে কি বেহালতা ? সি # কোড উদাহরণগুলি দেখে আপনার চোখটি সাঁতার কাটবে, এবং এমন চেষ্টা করুন যা আপনি কেবল ক্রেনের মতো ভাবতে পারেন না ? এখানে দেখুন:
হ্যাঁ, ম্যাট উইলকি উপরে উল্লেখ করেছেন যে মার্ক সিডারহোলমের উপস্থাপনাটি শুরু করার জন্য দুর্দান্ত জায়গা। ম্যাট যে রেসিপি / কোডটি উপস্থাপন করছে তা অবশ্যই জিনিসগুলির মধ্যে যাওয়ার জন্য সম্ভবত একটি চতুর এবং সম্ভবত সেরা উপায়। আমি উল্লেখ করতে চেয়েছিলাম, তবে, বরং আমি বলছিলাম বরং আরজিজিআইএস 10.0-তে ব্যবহার করা উচিত ru আমার বেশ কয়েকটি অটোমেশন স্ক্রিপ্ট রয়েছে (স্ট্যান্ডআলোন, অ্যাপ্লিকেশন সীমার বাইরে) যা আমি এইভাবে চালাই এবং সেগুলি ঠিক কাজ করে। সর্বাধিক গতি যদি উদ্বেগের বিষয়, তবে, আপনি কেবল ম্যাট এর সমাধান নিয়ে যেতে পারেন এবং এটি দিয়ে সম্পন্ন করতে পারেন।
আমি সমস্ত আরকোবজেক্ট লাইব্রেরি (.olb) মোড়ানোর জন্য কমপাইটস প্যাকেজটি ব্যবহার করি। তারপরে পাইথনের সমস্ত আরকোবজেক্টে অ্যাক্সেস রয়েছে। আমি একটি ইএসআরআই ফোরাম পোস্টের মাধ্যমে ফ্র্যাঙ্ক পার্কের কাছ থেকে মোড়কের কোড পেয়েছি । আমার নিজস্ব কোড ছিল যা মূলত একই জিনিসটি করেছিল, তবে এটি ফুলে ওঠে এবং কেবল কার্যকরী ছিল, যখন তার অনেক সুন্দর ছিল। তাই:
import sys, os
if '[path to your Python script/module directory]' not in sys.path:
sys.path.append('[path to your Python script/module directory]')
import comtypes
#force wrapping of all ArcObjects libraries (OLBs)
import comtypes.client
# change com_dir to whatever it is for you
com_dir = r'C:\Program Files (x86)\ArcGIS\Desktop10.0\com'
coms = [os.path.join(com_dir, x) for x in os.listdir(com_dir) if os.path.splitext(x)[1].upper() == '.OLB']
map(comtypes.client.GetModule, coms)
তারপরে, মার্ক সিডারহোলমের উপস্থাপনা থেকে বেশ সোজা:
import comtypes.gen.esriFramework
pApp = GetApp()
def GetApp():
"""Get a hook into the current session of ArcMap"""
pAppROT = NewObj(esriFramework.AppROT, esriFramework.IAppROT)
iCount = pAppROT.Count
if iCount == 0:
print 'No ArcGIS application currently running. Terminating ...'
return None
for i in range(iCount):
pApp = pAppROT.Item(i) #returns IApplication on AppRef
if pApp.Name == 'ArcMap':
return pApp
print 'No ArcMap session is running at this time.'
return None
def NewObj(MyClass, MyInterface):
"""Creates a new comtypes POINTER object where\n\
MyClass is the class to be instantiated,\n\
MyInterface is the interface to be assigned"""
from comtypes.client import CreateObject
try:
ptr = CreateObject(MyClass, interface=MyInterface)
return ptr
except:
return None
এটাই. অ্যাপআরএফ অবজেক্টে আইপ্লিকেশন হ'ল পিপ্পিজ অবজেক্ট দিয়ে শুরু হওয়া আপনার আর্কওবজেক্টগুলিতে সম্পূর্ণ অ্যাক্সেস থাকা উচিত। আমার অভিজ্ঞতায়, প্রথম রান করে আরকোবজেক্টস লাইব্রেরি মোড়ানো আপত্তিজনকভাবে ধীর নয় এবং পরবর্তী রানগুলির জন্য মোড়কটি ঘটবে না। গ্রন্থাগারগুলি ইতিমধ্যে মোড়ানো এবং সংকলিত রয়েছে, তাই জিনিসগুলি আরও দ্রুততর হয়।
যোগ করা হয়েছে: এটির সাথে একটি বড় সতর্কতা রয়েছে। এখানে দেওয়া নিউওবিজে ফাংশন ধরে নিয়েছে পাইথন স্ক্রিপ্টটি প্রক্রিয়াধীন চলছে। যদি তা না হয় তবে এই ফাংশনটি পাইথন প্রক্রিয়াতে (যেমন প্রসেস অফ আউট প্রসেস) তৈরি করবে এবং অবজেক্টের রেফারেন্সগুলি ভুল হবে। বাহ্যিক পাইথন স্ক্রিপ্ট থেকে প্রক্রিয়া অবজেক্ট তৈরি করতে আপনার আইওবজেক্টফ্যাক্টরি ব্যবহার করা উচিত। আরও তথ্যের জন্য এই স্ট্যাকেক্সচেঞ্জ পোস্টে কার্ক কুইকেনডালের মন্তব্য এবং টিপস দেখুন।
অজগর থেকে আমি কীভাবে আরকোবজেক্টগুলি অ্যাক্সেস করব?
আপনি যা সন্ধান করছেন তা যদি সুনির্দিষ্ট কার্যকারিতা যা বিদ্যমান এবং এটি C ++ আরকোবজেক্টস কোডে রয়েছে, তবে আপনার সেরা বেট হবে তাদের কল করার জন্য সি ++ পদ্ধতি তৈরি করা .... এবং তারপরে সেই সি ++ পদ্ধতিগুলি অ্যাক্সেস করার জন্য একটি পাইথন মোড়ক তৈরি করা।
পাইথন থেকে সি ++ পদ্ধতি অ্যাক্সেস করার বেশ কয়েকটি উপায় রয়েছে এবং এর ফলে প্রচুর লোক সি ++ পদ্ধতির স্বাক্ষর থেকে পাইথন ক্লাসগুলি স্বয়ংক্রিয়ভাবে জেনারেট করতে এসডাব্লুআইজি -এর মতো একটি সরঞ্জাম ব্যবহার করে । আমার অভিজ্ঞতা হয়েছে যে এই অটো-জেনারেটেড এপিআইগুলি নন-নেটিভ সি ++ টাইপগুলি (ইনট, ফ্লোটস) পাস করার সময় বেশ খারাপ লাগে এবং কখনই খুব ' পাইথোনিক ' হয় না ।
আমার প্রস্তাবিত সমাধানটি হবে সিটিপিএস এপিআই ব্যবহার করা। একটি দুর্দান্ত টিউটোরিয়ালটি এখানে রয়েছে: http://python.net/crew/theller/ctypes/tutorial.html
প্রাথমিক পদক্ষেপগুলি হ'ল:
পাইথনের মধ্যে থেকে সি / সি ++ কোডটি উল্লেখ করার পক্ষে এটি সম্ভবত আরও সাধারণ উপায়, আপনাকে যদি COM অবজেক্টের সাথে ডিল করতে না হয় তবে দীর্ঘমেয়াদে এটি সম্ভবত আরও সহজ হতে চলেছে। এটি লিঙ্কযুক্ত লাইব্রেরি অবজেক্টের সংকলনে সিস্টেম নির্দিষ্ট সমস্ত কার্যকারিতাও মঞ্জুরি দেয় (যাতে পাইথন সিস্টেম / পাইথন বাস্তবায়ন নির্দিষ্ট হবে না)।
অন্য বিকল্পটি। নেট জন্য পাইথন ব্যবহার করা - এটি সেটআপ করা খুব সহজ, এবং আরকোবজেক্টস সহ যে কোনও নেট নেটএলএল এর সাথে কাজ করতে পারে।
আমি প্রক্রিয়াধীন পর্যবেক্ষণগুলির সাথে কোনও সমস্যা অনুভব করি নি, এবং আর্কেম্যাপের একটি উদাহরণ খোলার জন্য এবং স্তরগুলি সংযোজন ও পরিচালনা করে আমার পক্ষে ভাল কাজ করে।
কেবলমাত্র প্রয়োজনীয়তাগুলি .NET লাইব্রেরির জন্য পাইথনযুক্ত একটি ফোল্ডার এবং একটি স্ট্যান্ডার্ড পাইথন ইনস্টল।
আরও বিশদ এবং নমুনা স্ক্রিপ্ট এখানে । নমুনা স্ক্রিপ্টটি সরাসরি http://gist.github.com/923954 এও দেখা যাবে
দুর্ভাগ্যক্রমে, যদিও এটি কোনও স্থানীয় বিকাশ মেশিনে সমস্যা ছাড়াই কাজ করে, অন্য কোথাও এটি মোতায়েনের জন্য আরকোবজেক্টস এসডিকে এবং ভিজ্যুয়াল স্টুডিও (ফ্রি এক্সপ্রেস সংস্করণ সহ) ইনস্টল করা দরকার। আরাকোবজেক্ট মোতায়েন দেখুন। নেট ডিএলএল
আমি অন্য জবাবগুলিতে উল্লিখিত দেখতে পাই না এমন একটি পদ্ধতি হ'ল আরকি লাইব্রেরিগুলি নিজেরাই ব্যবহার করে এমন পদ্ধতিগুলি ব্যবহার করে। যেমন সি: \ প্রোগ্রাম ফাইলস \ আর্কজিআইএস \ ডেস্কটপ ১০.০ \ আরকিপি \ আরকিপি \ কার্টোগ্রাফি.পি, আমরা পাইথন কলিং আর্কওবজেক্টস সরঞ্জামগুলি কিছু ফিক্সার্গস এবং অবজেক্ট রূপান্তর ফাংশন ব্যবহার করে দেখি।
কোডটি "ট্রেড সিক্রেটস: ইএসআরআই স্বত্বাধিকারী এবং গোপনীয়" বলে যেহেতু এখানে এটি পোস্ট করা কতটা ঠিক আছে তা আমি জানি না; তবে আপনি এটি ওয়েবে অন্য কোথাও খুঁজে পাবেন। যাইহোক, SimplifyBuilding_cartography()
এটি কমপিপস বা অন্য কোনও অতিরিক্ত লাইব্রেরি ইনস্টল না করে ফাংশনগুলিতে কল করার তুলনামূলক সহজ উপায় বলে মনে হচ্ছে ।
সম্পাদনা:
নীচে জেসন এর মন্তব্য দেখুন। উপরের মতো করার মতো শব্দগুলি আপনাকে বেশি দামে কিনবে না।