আরকভিউ 3.x অ্যাভিনিউ বিটম্যাপস (ট্যাব?) বনাম আরকভিউ 10 পাইথন কার্সার


9

দ্রষ্টব্য: যদিও এই প্রশ্নের উত্তর রয়েছে, কার্সার প্রক্রিয়াটিকে অনুকূল করার জন্য আরও কোনও টিপস প্রশংসিত হবে। আমি কোনও আপডেটের জন্য পর্যবেক্ষণ করব।

বর্তমানে, আমার বস (যিনি এভিনিউতে কাজ করেন) এবং আমি (পাইথনে কর্মরত) দুজনেই একই সমস্যা সমাধানের চেষ্টা করছি। বরং আমরা উভয়ই এর সমাধান করেছি, তবে আমাদের সমাধানগুলি যে গতিতে চালিত হয় তা হ'ল ... হতাশ, কমপক্ষে বলতে গেলে। 2 ঘন্টার মধ্যে তাঁর স্ক্রিপ্টটি কীভাবে প্রক্রিয়া করতে পারে তা 6 টা পর্যন্ত নিতে পারে log বাক্সের বিটম্যাপস এবং 10.x এর কার্সার থেকে যুক্তিবিদ্যার বাক্য গঠন এবং প্রয়োগের একমাত্র আসল পার্থক্য আসে। আমরা উভয়:

1) সারণি 1 থেকে মান সংরক্ষণ
করুন । 2) সারণি 2-এ একটি সারি জিজ্ঞাসা করার জন্য এই মানগুলি ব্যবহার করুন
3) সারণি 2 থেকে নতুন সারি হিসাবে সারণির জন্য সারণি 2 থেকে মানগুলি সঞ্চয় করুন।

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

এখানে আমার স্ক্রিপ্টটি বহিরাগত বিটগুলি সান করেছে:

import arcpy
import time
import sys
import os

def recordfindcopy(inFile,query,outFile):
    findRecord = arcpy.SearchCursor(inFile,query)
    for record in findRecord:
        copyRecord = arcpy.InsertCursor(outData) # <--- D'oh! (See answer)
        field = record.FIELD
        copy = copyRecord.newRow()
        copy.FIELD = field
        copyRecord.insertRow(copy)

StreetsFileList = [r"Path", 
                r"Path"]

for sfile in StreetsFileList:
    inStreets = sfile
    inTable = r"Path"
    outData = r"Path"
    fsaEntry = arcpy.SearchCursor(inTable)
    for row in fsaEntry:
        id = row.ID
        sQuery = "ID = %s " % (str(id))
        recordfindcopy(inStreets,sQuery,outData)

সম্পাদনা : এ পর্যন্ত কিছু মন্তব্য দেওয়া, আমি আশ্চর্য হয়েছি যে এর সাথে যোগ দেওয়ার মাধ্যমে আরও ভাল উপায় হতে পারে, যদিও আমি টেবিলগুলির ব্রোবডিংনাগিয়ান (দিনের শব্দ!) আকারের কারণে সন্দেহজনক। প্রসেসিংয়ের হৃদয়টি হ'ল এক টেবিল থেকে দ্বিতীয় সারণীতে যেকোন ম্যাচের রেকর্ডে তথ্য সংযোজন করা এবং কেবলমাত্র গুরুত্বপূর্ণ ক্ষেত্র যুক্ত একটি তৃতীয় টেবিল তৈরি করা। আমি এসডিই ব্যবহার করে এটি চেষ্টা করতে চেয়েছিলাম, তবে এটি কোনও উপলভ্য বিকল্প নয় বলে মনে হয়। থটস? যদি আমার প্রশ্নগুলি সর্বদা এতটা জড়িত থাকে তবে আমি ক্ষমাপ্রার্থী , তবে আমি দীর্ঘস্থায়ী বিরক্তির নীচে যাওয়ার চেষ্টা করছি।

উত্তর : জাকুবের সহজ পরামর্শটি একাই প্রসেসিংয়ের সময়কে 500 রেকর্ডের প্রতি 30 সেকেন্ড থেকে 500 রেকর্ডে 3 সেকেন্ডে হ্রাস করেছে । প্রতিটি sertোকাতে সন্নিবেশ কর্সার পুনরায় আরম্ভ করা জিনিসগুলিকে যথেষ্ট (ধীরে ধীরে) কমিয়ে দেয়। আরকভিউ ৩.০ এর গতির বিপরীতে যখন এই প্রক্রিয়াটির জন্য কেউ করতে পারে তবে এটি সবচেয়ে বেশি অপ্টিমাইজেশন নাও হতে পারে, তবে আমার উদ্দেশ্যগুলির পক্ষে এটি যথেষ্ট। আরও পরামর্শ খুব স্বাগত!


1
আপনার স্ক্রিপ্ট পোস্ট করার মতো মনে হচ্ছে? আমি জিপি বেঞ্চমার্ক ব্যবহার করে কোনও অ্যাভিনিউ / পাইথন সম্পর্কে জানি না।
ডেরেক সুইংলে

সারণী যোগদান এবং কোয়েরিগুলি কোনও আর্কিআইএস 8.x থেকে 10 এর চেয়ে পুরানো আরকভিউ 3.2 (অ্যাভিনিউ) তে খুব দ্রুত * * আরকিপি / পাইথন। মূলত আর্কজিআইএস পণ্যগুলিতে কোডের পরিমাণ (আরও অনেক) কারণে।
ম্যাপের্জ

2
@ ম্যাপের্জ আপনি সঠিকভাবে বলেছেন যাইহোক, প্রতিটি অনুরোধের জন্য 10,000 এক্স ইন্টারপ্রিটিভ ওভারহেডের কারণে আর্কভিউ 3.x এ সারি-বাই-সারি প্রক্রিয়াকরণ আড়ালভাবে ধীর গতিতে রয়েছে (আমি এটি বেঞ্চমার্ক করেছি)। যখন কেউ লুপগুলি এড়াতে পারে - "উচ্চ স্তরের" অনুরোধগুলি যেমন আপনার পরামর্শ অনুসারে যোগ দেয় এবং ব্যবহার করে - আর্কভিউ ৩.x আর্কজিআইএস-এর প্যান্টগুলিকে পরাজিত করবে, তবে এটি প্রশংসনীয় যে রেকর্ডের বাইরে স্পষ্ট লুপ জড়িত একটি মাথা থেকে মাথা পরীক্ষায় হয়, কেউ তুলনামূলকভাবে সামান্য ব্যবধানে জিততে পারে।
whuber

@ ভুবার @ ডেরেক থার এটি হোন।
নাথানাস

উত্তর:


2

আমি প্রোগ্রামিংয়ে নতুন নই তবে পাইথনের কাছে খুব নতুন তাই এটি একটি লবণের দানা দিয়ে নিয়ে যান ...

copyRecord = arcpy.InsertCursor(outData)

Nextোকানো কার্সারটি ফর নেক্সট লুপের আগে সেট করা উচিত নয় ? আমার কাছে মনে হয় যে "আউট" ডেটাতে যাওয়ার পথটি যদি "আউটডেটা" ভেরিয়েবলে সঞ্চিত থাকে তবে প্রতিবার পুনরুক্তি করার সময় এটি পুনরায় সেট করার দরকার নেই। আমি ভাবব যে এটি জিনিসগুলিকে উল্লেখযোগ্যভাবে গতি বাড়িয়ে তুলবে।


ভালো বল ধরা. আমি পরের সপ্তাহে অফিসে ফিরে আসার পরে চেষ্টা করব।
নাথানাস

5

আমি ধরে নিচ্ছি আপনি আরকিপি বা আরকিসিস্ক্রিপ্টিং সার্কা 9.3 ব্যবহার করছেন। যে কোনও উপায়ে এখানে কৌশলগুলি আপনার প্রক্রিয়াকরণকে ত্বরান্বিত করবে .... সম্ভবত আপনার কর্তাদের চেয়ে ভাল।

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

সুতরাং প্রথমে
এটি ব্যবহার করে দেখুন : 1. পদ্ধতিগুলি ব্যবহার করে আপনার যে সারণীগুলি মেমরিতে ব্যবহার করতে হবে তা অনুলিপি করুন -

  • জিপি.কপি ফিচারস ("ফিচার ক্লাসের পথ \ ফিচার ক্লাসনাম", "'ইন_মেমরি' \ ফিচার ক্লাসনাম") - বৈশিষ্ট্য শ্রেণীর জন্য এবং;
  • gp.CopyRow ("ফিচার ক্লাসের পথ \ ফিচারট্যাবলনেম", "'ইন_মেমরি' ature ফিচারট্যাবলনেম") - একটি 'ইন_মেমরি' বৈশিষ্ট্য শ্রেণি বা সারণীতে টেবিলগুলির জন্য।

    এটি আপনাকে র‌্যাম ডিস্কের মতো মেমোরি ব্যবহার করার অনুমতি দেয় এবং ডিস্কে ছড়িয়ে দেওয়া অনেক সংরক্ষণ করে। আপনি 'ইন_মেমোরি' দিয়ে ফিচারড্যাটাসেট প্যারামিটারটি স্থাপন করে মেমোরিতে একটি বৈশিষ্ট্য বর্গ বা টেবিল তৈরি করতে পারেন।

যতটা সম্ভব পাইথন পাত্রে ব্যবহার করুন। এতে গতিও বাড়বে।

শেষ পর্যন্ত ইএসআরআই ফর্ম্যাটগুলির জন্য তথ্য পড়ার এবং লেখার দক্ষতার জন্য আদেশ

  1. শেপফিল (দুঃখজনক তবে সত্য)
  2. ব্যক্তিগত জিওডাটাবেস
  3. ফাইল জিওডাটাবেস
  4. আর্কএসডিই (সরাসরি সংযোগ সহ এটি ধীরে ধীরে)

এই পরামর্শগুলি চেষ্টা করে দেখুন, আমি এখানে gis.stackexchange.com এ কাজ করে এমন একটি জিনিসের তালিকা তৈরি করার চেষ্টা করছি বলে এখানে দেখুন


মেমরি বিকল্পটি দরকারী বলে মনে হচ্ছে, তবে আমি প্রায় 1 জিবি ঘড়ির বিরুদ্ধে জিজ্ঞাসা করছি টেবিলের সম্মিলিত শক্তি। আমি বিশ্বাস করি এটি সম্ভব করার জন্য আমার যথেষ্ট পরিমাণে র‌্যাম রয়েছে, তবে কি টেবিলের নিখুঁত আকারে কোনও হিংস্র ক্রাশ হওয়ার ঝুঁকি রয়েছে? এছাড়াও, একটি অজগর ধারক কি?
নাথানাস

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

এটি বর্তমানে আমি যে প্রক্রিয়াটি নিয়ে কাজ করছি এটি হতে পারে তবে আমি খুঁজে পেয়েছি যে একটি ফাইল জিডিবি ধীর, তবে কেবলমাত্র। আমি বলব যে এগুলি সমান, এবং আমি ফাইলের সীমাবদ্ধতার কারণে খালি ব্যক্তিগত জিডিবি-র উপরে একটি ফাইল জিডিবি বেছে নেব। আমি এর জন্য একটি মানদণ্ড তৈরি করতে খুব আগ্রহী। আপনি কিছু পরীক্ষা সংজ্ঞায়িত করতে সাহায্য করতে আগ্রহী?
অনুকূল করুন

আমি মেমরিতে শেফফাইলটি রাখার চেষ্টা করেছি এবং এটি সাহায্য করার জন্য খুব কমই করেছে বলে মনে হচ্ছে ... সত্যই, এরপরের পরে স্ক্রিপ্টটি প্রক্রিয়া বন্ধ করে দিয়েছে।
নাথানাস

3

আমি বাজি ধরেছি যে অ্যাভিনিউ পাইথনের চেয়ে দ্রুত, তবে আরকভিউ 3 আর্কজিআইএসের চেয়ে দ্রুত (আপনি যা করার চেষ্টা করছেন)।

যেহেতু এর শব্দ থেকে এটি মূলত একটি স্থান-অ-অনুশীলন, আপনি সরাসরি ডাটাবেস টেবিলগুলি অ্যাক্সেস নিয়ে পরীক্ষা করতে চাইতে পারেন (উদাহরণস্বরূপ আরকিপি ব্যবহার করবেন না) এমন কিছু দিয়ে ডিবিএফপি বা ওডবিসি ( সেগুলির মধ্যে নিজেই চেষ্টা করেন নি)। ব্যক্তিগতভাবে আমি পেয়েছি কমান্ড ogr2ogr এর gdal / ogr স্যুট হতে দ্রুততর মাত্রার আদেশ arcgis মধ্যে সমতুল্য লেনদেন হয়। আমি যদিও কেবল ওজিআর ক্যোয়ারী ক্ষমতাগুলিতে হালকাভাবে ডুবিয়েছি, এবং আমি কেবল পাইথন বাইন্ডিং ব্যবহার করে কিছু নির্মাণ করি নি তাই বুঝতে পারি না যে এই গতিটি চলেছে কিনা।


এখানে কেবল ঘষে তা হল আমি স্থানিক ডেটাতে অ-স্থানীয় ডেটা যুক্ত করছি। IE আমি Shapeকয়েকজনকে সাথে নিয়ে ক্ষেত্রটি নিয়ে যাচ্ছি এবং একটি নতুন রেকর্ড তৈরি করছি যাতে জ্যামিতি এবং অতিরিক্ত অ-স্থানীয় ডেটা থাকবে। Dpfpy এবং odbc অ্যাকাউন্ট সরানোর Shapesক্ষেত্রগুলিতে (এবং তাদের জ্যামিতি) অ্যাকাউন্ট করবে ?
নাথানাস

এটি .dbf- তে Shapeসংরক্ষিত না হওয়ায় শেফফিলগুলি নিয়ে কাজ করবে না । তাত্ত্বিকভাবে এটি ওডিবিসি ব্যবহার করে একটি ব্যক্তিগত জিওডাটাবেস (.mdb) নিয়ে কাজ করতে পারে তবে আমি সেই পদ্ধতির বিষয়টি অবাক করছি, বিশেষত যেহেতু ওজিআর এর সাথে ইতিমধ্যে একটি প্রমাণিত রুট রয়েছে, যা ইতিমধ্যে শেফফাইল এবং ব্যক্তিগত জিডিবি উভয়ই জানেন।
ম্যাট উইলকি

1

এই মুহুর্তে এটি কোনও বিশেষ সহায়ক নয়, তবে আরকজিআইএস 10.1 এর জন্য অপেক্ষা করুন। এই বছরের এসরি দেব শীর্ষ সম্মেলনে আমাদের জানানো হয়েছিল যে আরকিপি 10.1 কার্সার সমর্থন সম্পূর্ণরূপে পুনরায় লেখা হয়েছে এবং তা উল্লেখযোগ্যভাবে দ্রুত। প্লেনারি চলাকালীন প্রায় 8x গতি উন্নতির দাবি ছিল।


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