এলএএস ফাইলটিকে ন্যালি অ্যারেতে রূপান্তর করা হচ্ছে?


15

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

# Import modules
from liblas import file
import numpy as np

if __name__=="__main__":
    '''Read LAS file and create an array to hold X, Y, Z values'''
    # Get file
    las_file = r"E:\Testing\ground_filtered.las"
    # Read file
    f = file.File(las_file, mode='r')
    # Get number of points from header
    num_points = int(f.__len__())
    # Create empty numpy array
    PointsXYZIC = np.empty(shape=(num_points, 5))
    # Load all LAS points into numpy array
    counter = 0
    for p in f:
        newrow = [p.x, p.y, p.z, p.intensity, p.classification]
        PointsXYZIC[counter] = newrow
        counter += 1

আমি arcpy.da.featureClassToNumpyArray দেখেছি, তবে আমি আরকিটি আমদানি করতে চাইনি বা শেফফাইলে রূপান্তর করতে চাইনি।

আর কীভাবে আমি এলএএস ডেটাটিকে একটি অদ্ভুত অ্যারেতে ফিল্টার / পড়তে পারি?


ত্রুটি বার্তা কি (যদি থাকে)?
til_b

কোনও ত্রুটি নেই। আমি কীভাবে ফিল্টার করব তা জানতাম না, এবং LAS কে অ্যারে করে দেওয়ার আরও ভাল উপায় যদি থাকে তবে আমি নিশ্চিত নই।
বারবারোসা

উত্তর:


14

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

#the values we're classifying against
unclassified = 1
ground = 2

#create an array of booleans
filter_array = np.any(
    [
        PointsXYZIC[:, 4] == unclassified, #The final column to index against
        PointsXYZIC[:, 4] == ground,
    ],
    axis=0
)

#use the booleans to index the original array
filtered_rows = PointsXYZIC[filter_array]

আপনার এখন সমস্ত মান সহ একটি নমপি অ্যারে থাকা উচিত যেখানে ডেটা শ্রেণিবদ্ধ বা স্থল। শ্রেণিবদ্ধ করা হয়েছে এমন মানগুলি পেতে আপনি ব্যবহার করতে পারেন:

filter_array = np.all(
    [
        PointsXYZIC[:, 4] != unclassified, #The final column to index against
        PointsXYZIC[:, 4] != ground,
    ],
    axis=0
)

ফিল্টারটি কাজ করছে বলে মনে হচ্ছে তবে কেবল 5 টি রেকর্ড লিখেছেন। আমি কেবল 1 এবং 2 ক্লাস ফিল্টার করার চেষ্টা করেছি এবং তারপরে 1 এবং 2 ব্যতীত সমস্ত ফিল্টার করার চেষ্টা করেছি, উভয়ই আমাকে কেবল 5 টি ফলাফল দিয়েছিল। কোন ধারনা?
বারবারোসা

এই 5 টি রেকর্ড 1-ডি অ্যারেতে রয়েছে।
বারবারোসা

দুঃখিত, উপরের কোডটি আপডেট করেছে কারণ যেকোন গণনা করতে অক্ষের স্পেসিফিকেশন প্রয়োজন (এটি ছাড়াই এটি অ্যারের সমস্ত মাত্রা জুড়ে বা সম্পাদন করে)।
ওমেনার্স

5

এলএএস ফাইলগুলি পড়ার জন্য লাস্পি ব্যবহার করুন এবং সহজেই ডেটা ফিরিয়ে আনুন আপনার সাথে কথা বলতে পারেন py ল্যাস্পি খাঁটি পাইথন, এটি প্রায় লিব্লাএলএসের মতো দ্রুত, লিবলাস পাইথন বাইন্ডিংয়ের চেয়ে আরও বেশি বৈশিষ্ট্যযুক্ত এবং এটি স্থাপন করা আরও সহজ।


0

আপনি যদি ইতিমধ্যে এটি সম্পর্কে অবগত হন তবে আমি ক্ষমাপ্রার্থী, তবে লাসটুলগুলি একটি দুর্দান্ত ওপেন সোর্স সরঞ্জাম যা এখন আরকিজিআইএস এবং কিউজিআইএস ২.০ উভয়ের সাথে একীভূত হয়েছে - এতে আপনি যেভাবে অনুসন্ধান করছেন তাতে ডেটা ফিল্টার করার বিকল্প রয়েছে।


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