পোস্টজিআইজে একাধিক জিপিএক্স ফাইলের ব্যাচ লোড স্বয়ংক্রিয় করা হচ্ছে?


9

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

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

আমার সাধারণ চিন্তার প্রক্রিয়াটি হ'ল:

  1. প্রক্রিয়া করার জন্য জিপিএক্স ফাইলগুলির একটি তালিকা পান (স্ট্যান্ডার্ড পাইথন সরঞ্জামগুলির মাধ্যমে যথেষ্ট সহজ)
  2. প্রতিটি জিপিএক্স ফাইলের মধ্য দিয়ে লুপ করুন এবং প্রয়োজনীয় ডেটাটি এক্সট্র্যাক্ট / পোস্টজিআইএস ফর্ম্যাটে রূপান্তর করুন
  3. সাইকোপগ পাইথন লাইব্রেরিটি ব্যবহার করে পোস্টজিআইএসে জিপিএস ডেটা .োকান

আমি মনে করি আমি পদক্ষেপগুলি 1 এবং 3 পরিচালনা করতে পারি তবে ভাবছি যদি এমন কোনও তুলনামূলক সহজ পদ্ধতি / লাইব্রেরি রয়েছে যা ডেটা (ট্র্যাক এবং ট্র্যাকপয়েন্টস) পোস্টজিআইএস ফর্ম্যাটে রূপান্তর করতে পারে বা কেবল টেবুলার ফর্মটি যা আমি ইতিমধ্যে তৈরি টেবিলের মধ্যে couldোকাতে পারি ।

আমি ইতিমধ্যে পড়েছি " সেখানে একটি ভাল জিপিএস ট্র্যাক বিশ্লেষণ গ্রন্থাগার আছে কি? ", " কিভাবে জিপিএস লগ ভৌগলিক ডাটাবেসের গড়ে তুলবেন? ", এবং " কিভাবে পাইথন সাথে ডেটা .gpx বের করে আনতে ", এবং GDAL / OGR মধ্যে তাকিয়ে আছে এবং এফডাব্লুটিউলস পাইথন বাইন্ডিংস, তবে চাকাটি পুনর্বিবেচনা করতে চান না কারও কাছে ইতিমধ্যে এর জন্য একটি ভাল পদ্ধতি রয়েছে।

উত্তর:


10

খাঁটি পাইথনের জন্য, জিডিএল এর ওজিআর মডিউলটি ব্যবহার করুন:

import os
from osgeo import ogr
from glob import glob

# Establish a connection to a PostGIS database
pg = ogr.GetDriverByName('PostgreSQL')
if pg is None:
    raise RuntimeError('PostgreSQL driver not available')
conn = pg.Open("PG:dbname='postgis' user='postgres'", True)
if conn is None:
    raise RuntimeError('Cannot open dataset connection')

# Loop through each GPX file
for gpx_file in glob('/path/to/*.gpx'):
    ds = ogr.Open(gpx_file)
    if ds is None:
        print('Skipping ' + gpx_file)
    print('Opened ' + gpx_file)
    prefix = os.path.splitext(os.path.basename(gpx_file))[0]
    # Get each layer
    for iLayer in range(ds.GetLayerCount()):
        layer = ds.GetLayer(iLayer)
        layer_name = prefix + '_' + layer.GetName()
        if layer.GetFeatureCount() == 0:
            print(' -> Skipping ' + layer_name + ' since it is empty')
        else:
            print(' -> Copying ' + layer_name)
            pg_layer = conn.CopyLayer(layer, layer_name)
            if pg_layer is None:
                print(' |-> Failed to copy')

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

2 টি সমস্যা যার সাথে আমি এখন রয়েছি: 1) "জিপিএক্স" বিকল্পটি রয়েছে যাতে সমস্ত জিপিএক্স ফাইল একই ফাইলের সাথে সংযুক্ত হয় (বর্তমানে এটি প্রদর্শিত হয় যে এটি কেবল প্রথম লোড হওয়া) এবং 2) কোনও উপায় আছে? নতুন টেবিলগুলিতে সংরক্ষণের জন্য স্কিমাটি সংজ্ঞায়িত করতে হবে?
রায়ানকডালটন 20'13

গন্তব্য স্তর নাম (টেবিলের নাম) হল দ্বিতীয় প্যারামিটার CopyLayer। আমি জিপিএক্স ফাইল থেকে একটি উপসর্গ হিসাবে নাম যুক্ত করেছি, সুতরাং টেবিলগুলি ইনপুট ফাইলের নামের মতো অনন্য হওয়া উচিত। Ogr2ogr এর "সংযোজন" বিকল্পটি একটি মুশকিল যা আমি এই মুহুর্তে কীভাবে করব তা নিশ্চিত নই।
মাইক টি

5

অতিরিক্ত গবেষণার পরে, আমি আমার নিজস্ব gpx2postgis.py পাইথন স্ক্রিপ্ট লিখেছি যা বিদ্যমান টেবিলগুলিতে জিপিএক্স বৈশিষ্ট্যগুলি সংযোজন প্রক্রিয়াটিকে স্বয়ংক্রিয় করে তোলে । স্ক্রিপ্টটি উপরে @ মাইক টি দ্বারা সরবরাহকৃত কাজের অংশগুলি এবং অন্যদের ব্যবহার করে। আপনি যদি ডাউনলোড বা অবদান রাখতে চান তবে আমি এটিকে গিটহাবের সাথে যুক্ত করেছি। এটি জিপিএক্স সাবলেয়ারদের ইনপুটের উপর ভিত্তি করে নতুন টেবিল স্কিমার (প্রয়োজন হিসাবে) তৈরি করে এবং সেই টেবিলগুলিতে বৈশিষ্ট্যগুলি সংযোজন করে।

পাইথন সমাধান না হলেও, আমি স্ট্যাকওভারফ্লোতে এই একই প্রশ্নটি পেয়েছি যা আমাকে বুঝতে পেরেছিল যে আমি আমার সমস্ত জিপিএক্স ফাইলগুলি লুপ করতে পারি এবং জিপিএক্স বৈশিষ্ট্য প্রকারগুলি ব্যবহার করে তাদের প্রক্রিয়া করতে ogr2ogr কমান্ড লাইনটি কল করতে পারি

ogr2ogr -append -f PostgreSQL "PG:dbname=your_db user=xxxx password=yyyy" filename.gpx

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