আরকিপি ব্যবহার করে একাধিক এমএক্সডি-তে ডেটা উত্সগুলি মেরামত করছেন?


14

আমার প্রায় 50 টি এমএক্সডি রয়েছে এমন সমস্ত ভাঙ্গা স্তর যা আমি যাচ্ছি এবং ম্যানুয়ালি পুনরায় সেট করছি।

ডেটা অন্য কম্পিউটার থেকে সরানো হয়েছিল এবং ফোল্ডারের কাঠামো পরিবর্তন করা হয়েছিল তাই এটি পরিবর্তন করার সহজ প্রক্রিয়া নয় (উদাহরণস্বরূপ):

"এফ: \ ডেটা \ রিভার্স.এসপিপি" থেকে "সি: \ ডেটা \ রিভারস.এসপিপি"

এটি আরও মত:

"এফ: \ ডেটা \ রিভার্স.এসপিপি" থেকে সি: \ ডেটা \ পার্ক \ জল \ রিভারস.এসপিপি

এবং তাদের নিজস্ব সাব-ফোল্ডারে প্রতিটি ধরণের ডেটা (সীমানা, ভেজ কভার, রাস্তা ইত্যাদি) এর জন্য।

আমি এমন একটি স্ক্রিপ্ট তৈরি করতে চাই যা আমি যখনই এই এমএক্সডি এর একটি খুলি তখন বার বার চালাতে পারি যা কমপক্ষে আমার বেশিরভাগ এমএক্সডি এর মধ্যে পাওয়া যায় এমন আরও কয়েকটি সাধারণ স্তরকে মেরামত করতে পারে এবং তারপরে আমি নিজে বাকীটি মেরামত করতে পারি। এইভাবে আমি অন্তত কিছুটা সময় বাঁচাতে পারি ।

আমি এর লাইনে কিছু ব্যবহার করছি:

import arcpy
mxd = arcpy.mapping.MapDocument("CURRENT")

for lyr in arcpy.mapping.ListLayers(mxd):
    if lyr == "Rivers": #Should this be the layner name in TOC or FC name?
        lyr.replaceDataSource(r"C:\Data\Park\Water", "SHAPEFILE_WORKSPACE", "Rivers")

তারপরে এই ধারণাটি হ'ল আমার এমএক্সডি-তে থাকা অন্যান্য সাধারণ স্তরগুলির জন্য উপরে কোনওভাবে একাধিক "প্রতিস্থাপন" স্ক্রিপ্ট যুক্ত করা উচিত।

তবে উপরের লিপিটি এমনকি নদীর স্তরও ঠিক করে না।

আমি কীভাবে এটি কাজ করতে পারি, এবং অন্য স্তরগুলিতে মেরামত করতে অন্যান্য স্তরগুলিতে যুক্ত করতে পারি যা বিভিন্ন ফাইল পাথ রয়েছে?

উত্তর:


14

আপনি আপনার স্ক্রিপ্টটি দিয়ে সঠিক পথে রয়েছেন। কিভাবে এটি আপনার তুলনা করা হয় আপনার সমস্যা মিথ্যা মত দেখায় Layer, বস্তু নাম এর Layerমধ্যে সূচীপত্র

আপনি যখন তালিকাগুলি ফাংশনটি ব্যবহার করেন , তখন কী ফিরে আসে তা একটি Layerঅবজেক্ট। এরপরে এটি text stringসমান কিনা তা দেখতে আপনি এটির তুলনা করতে পারবেন না , পরিবর্তে আপনার নামটি অ্যাক্সেস করতে Layerহবে।

import arcpy
mxd = arcpy.mapping.MapDocument("CURRENT")

for lyr in arcpy.mapping.ListLayers(mxd):
    if lyr.name.lower() == "rivers": #This should be the Layer name in the TOC?
        lyr.replaceDataSource(r"C:\Data\Park\Water", "SHAPEFILE_WORKSPACE", "Rivers")

আরও নির্বাচক যুক্ত করতে, আপনি if/thenবিভিন্ন স্তরের নামের সন্ধানের জন্য কেবল কোডটির অংশটি প্রসারিত করুন ।

for lyr in arcpy.mapping.ListLayers(mxd):
    if lyr.name.lower() == "rivers": #This should be the Layer name in the TOC?
        lyr.replaceDataSource(r"C:\Data\Park\Water", "SHAPEFILE_WORKSPACE", "Rivers")
    elif lyr.name.lower() == "streets":
        lyr.replaceDataSource(r"C:\Data\Facilities\Streets", "SHAPEFILE WORKSPACE", "Streets")

nameআপনার কোনও নির্দিষ্ট অনন্য স্তর সন্ধানকারীকে কেবল পরিবর্তন করতে .mxdএবং replaceDataSourceএটিকে পরিচালনা করার জন্য একটি ফাংশন যুক্ত করুন । দয়া করে লক্ষ্য করুন যে আমি lowerনামের জন্য পরীক্ষা করার সময় ফাংশনটি ব্যবহার করেছি । এটি ইএসআরআই তাদের সহায়তার নথিগুলিতেও ব্যবহার করে, যুক্তিযুক্ত কারণের সাথে এটি পুঁজিতে অসামঞ্জস্যের সম্ভাবনা সরিয়ে দেয়, যার ফলে স্তরের নামের সাথে একটি মিল নেই।

আরকিপি ম্যাপিংয়ের মাধ্যমে ডেটা উত্স আপডেট এবং ঠিক করার বিষয়ে ESRI সহায়তা নিবন্ধটি এখানে দেওয়া হয়েছে is

সাধারণভাবে আরকজিআইএসের জন্য সহায়তা ফাইলগুলি খুব দরকারী কারণ সেগুলিতে স্পষ্ট ব্যাখ্যা রয়েছে এবং প্রচুর পাইথন কোড নমুনা রয়েছে যা আপনি কেবল আপনার নির্দিষ্ট প্রয়োজন অনুসারে কপি / পেস্ট এবং সংশোধন করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.