একটি পললাইন সমস্ত পয়েন্ট পান


11

পাইথনে আমার কয়েকটি পললাইন বৈশিষ্ট্যযুক্ত বস্তু রয়েছে। এখন আমি পলিনের সমস্ত পয়েন্ট পেতে চাই।

উদাহরণস্বরূপ, যদি কোনও পললাইনটিতে শুরুর পয়েন্টের [0,0]শেষ পয়েন্ট থাকে [5,5]। ফলাফল: [1,1];[2,2];[3,3];[4,4];[5,5]

আমি শেষ পয়েন্ট সহ সেই লাইনে সমস্ত পূর্ণসংখ্যার পয়েন্টগুলি খুঁজতে চাই। সরলরেখার জন্য এটি মৃত সহজ, তবে যদি পললাইনটিতে বিজার কার্ভ, সার্কুলার আর্ক, এলিপটিক আর্ক জ্যামিতির ধরণ থাকে তবে আমি কীভাবে এটি করতে পারি?

সম্পাদনা করুন:

আমি কেবল সেই সরঞ্জামগুলি ব্যবহার করতে পারি যা আর্কজিআইএসের সমস্ত লাইসেন্স স্তরে পাওয়া যায়। উদাহরণস্বরূপ, আরকজিআইএস বেসিক।


2
সাধারণভাবে আপনি প্রায়শই ভাল 'পূর্ণসংখ্যা' পয়েন্ট পাবেন না। এটি আপনার উদাহরণে কাজ করে তবে বাস্তব জীবনে প্রায়শই নয়। সাধারণত, আপনি কেবল শীর্ষেগুলির জন্য অবস্থানগুলি পান, সুতরাং আপনার ক্ষেত্রে আপনি [0,0] এবং [5,5] পাবেন। 'মধ্যবর্তী' পয়েন্টগুলি 'ধরে নেওয়া যেতে পারে'। পাইথনে এটি কীভাবে করবেন তা নিশ্চিত নন, তবে বেশ কয়েকটি সরঞ্জাম আপনাকে একটি লাইন থেকে শীর্ষে বিন্দু ফাইল তৈরি করতে দেয়।
ড্যারেন কোপ

উত্তর:


18

আমি জানি এটি পুরানো তবে আমি ফিচারভিটিসটোপয়েন্টস সরঞ্জামগুলির জন্য আমার যেমন আর্কআইএনফো নেই তেমনটি খুঁজছিলাম । উপরের অনুসন্ধান কার্সর সমাধানটি ব্যবহার করার পরে আমি কোডটি সহজ করার জন্য এগিয়ে গিয়েছিলাম এবং দেখেছি যে ডেটা অ্যাক্সেস মডিউলে NumPy অ্যারে ব্যবহার করে একটি সহজ এবং খুব দ্রুত স্ক্রিপ্ট তৈরি করা যেতে পারে। আমি এটি একটি স্ক্রিপ্ট সরঞ্জাম হিসাবে ব্যবহার করছি।

দ্রষ্টব্য: কীটি হল explode_to_pointsপ্যারামিটারarcpy.da.FeatureClassToNumPyArray

এখানে আর্কজিআইএস সংগ্রহস্থলের অবস্থানের লিঙ্ক: পয়েন্টগুলিতে বৈশিষ্ট্য শ্রেণি

# Feature Class to Points
# 
# Paul Smith (2012) paul@neoncs.com.au

# Imports
import arcpy
import numpy

#Inputs from user parameters
InFc  = arcpy.GetParameterAsText(0) # input feature class
OutFc = arcpy.GetParameterAsText(1) # output feature class

# Spatial reference of input feature class
SR = arcpy.Describe(InFc).spatialReference

# Create NumPy array from input feature class
array = arcpy.da.FeatureClassToNumPyArray(InFc,["SHAPE@XY"], spatial_reference=SR, explode_to_points=True)

# Check array and Exit if no features found
if array.size == 0:
    arcpy.AddError(InFc + " has no features.")

# Create a new points feature class
else:
    arcpy.da.NumPyArrayToFeatureClass(array, OutFc, ['SHAPE@XY'], SR)

জিআইএস.সি পলকে স্বাগতম :) :) বুট করার কোড সহ একটি ভাল গোলাকার এবং গড় প্রথম অবদানের চেয়ে ভাল জন্য for ধন্যবাদ! কিছু সম্পাদনা টিপস: নির্বাচন পাঠ্য, ইনলাইন বা একটি ব্লক, এবং তারপর ctrl-kকোড বিন্যাস (জন্য একই আবেদন করতে bপুরানো এবং italic)। সম্মেলনে আমরা "হাই", "থ্যাঙ্কস", "চিয়ার্স" এর মতো চ্যাট বিটগুলি এড়ানোর ঝোঁক রাখি। এগুলি সর্বদা উপস্থিত থাকাকালীনভাবে বোঝানো হয় এবং ধারণাটি জোরদার করতে এই জায়গাটি সাধারণ ফোরাম এবং ইমেল থেকে আলাদা help বিদেশে স্বাগতম.
ম্যাট উইলকি

কোড অ্যারে = arcpy.da.FeatureClassToNumPyArray (InFc, ["SHAPE @ XY"], "", স্থানিক_পরিচয় = এসআর, এক্সপ্লোড_টো_পয়েন্টস = ট্রু)
ট্রিস্টান ফরোয়ার্ড

4

আমি যেমন বুঝতে পেরেছি আপনার পললাইন বৈশিষ্ট্যগুলির জন্য আপনাকে উল্লম্ব সংখ্যা বৃদ্ধি করতে হবে। এবং সমস্ত "বিজার কার্ভ, সার্কুলার আর্ক, এলিপটিক আর্ক" বিভাগগুলিকে বিভিন্ন লাইন বিভাগে রূপান্তর করতে।

আরকজিআইএসে এই কাজের জন্য আপনি আরকটিউলবক্সে ডেনসিফ (সম্পাদনা) সরঞ্জামটি ব্যবহার করতে পারেন ।

তারপর আপনি আপনার পলিরেখার 'রূপান্তর করতে পারেন বিন্দু ছেদচিহ্ন হিসাবে প্রস্তাব ড্যারেন Cope এবং artwork21 বৈশিষ্ট্য।

আপনি যদি অর্কম্যাপে এটি করতে পছন্দ করেন তবে একটি লাইন সহায়তার বিষয়বস্তুতে নতুন পয়েন্ট তৈরি করা একবার দেখুন ।


3

নীচেরগুলিতে পলিন এবং বহুভুজগুলির উপর কাজ করা উচিত:

import arcpy

infc = r"D:\Projects\GDBs\slowbutter.gdb\fc"

desc = arcpy.Describe(infc)
shapefieldname = desc.ShapeFieldName

rows = arcpy.SearchCursor(infc)
for row in rows:
    # Create the geometry object
    feat = row.getValue(shapefieldname)
    print "Feature %i: " % row.getValue(desc.OIDFieldName)
    partnum = 0
    # Step through each part of the feature
    for part in feat:
        print "Part %i: " % partnum
        part_list = []
        for pnt in feat.getPart(partnum):
            if pnt:
                # Add to list
                part_list.append([pnt.X, pnt.Y])
            else:
                # If pnt is None, this represents an interior ring
                print "Interior Ring:"
        partnum += 1  
        print part_list

কিছু ইউকে রোড ডেটার জন্য, আমি এটি পেয়েছি; পললাইন তৈরি করে এমন প্রতিটি ভার্টেক্সের জন্য এক্স, ওয়াইয়ের একটি নেস্টেড তালিকা:

Feature 7: 
Part 0: 
[[-0.48053999999996222, 51.482510000000048], [-0.48032999999992398, 
51.482609000000082], [-0.48026999999996178, 51.48273800000004], 
[-0.48043999999993048, 51.482891000000052], [-0.48065999999994347, 51.482948000000079],
[-0.48123999999995704, 51.483009000000038]]

আমি এটি ESRI পৃষ্ঠায় দেখেছি। তবে আপনি যদি তাদের বর্ণনার সাথে মনোযোগ সহকারে লক্ষ্য করেন তবে এই কোডটি কেবল শেষ পয়েন্টগুলি দেয়, তাদের মধ্যে বিন্দুগুলি নয়
ব্যবহারকারী

2
@ ক্রুসিফাইসসুল - হ্যাঁ, এটি সেই ESRI নমুনার একটি প্রকরণ , তবে এটি কেবল শেষ পয়েন্টগুলি নয়, সমস্ত পয়েন্টের এক্স, ওয়াই জুড়ি দেয়। তুমি যা চাও তাই ঠিক?
চাদ কুপার

আমি পাই না। একমাত্র জিনিস পরিবর্তন করা হয় আপনি প্রতিস্থাপন হচ্ছে যাতে print pnt.X, pnt.Yসঙ্গে part_list.append([pnt.X, pnt.Y])। এবং আপনি এটি লুপ শেষে মুদ্রণ করা হয়। আপনার কোডটি কীভাবে একটি লাইনের সমস্ত পয়েন্ট পেতে পারে তবে ইএসআরআই কোড দেয় না?
ব্যবহারকারী

বর্ণনা পদ্ধতিটি আমার পক্ষে কার্যকর হয়নি। আমাকে কেবল আমার আকৃতি ক্ষেত্রটি নির্দিষ্ট করতে হয়েছিল - arcpy.da.SearchCursor (fc, ["SHAPE @"])
জাবাল্ক

1

ড্যারেন কোপ যেমন পরামর্শ দিয়েছেন, আপনার স্তরটিকে বিন্দু বিন্দুতে রূপান্তরকরণটি বৈশিষ্ট্য শীর্ষকটি পয়েন্টস সরঞ্জামে ব্যবহার করে করা যেতে পারে ।

এখানে পাইথন কোড স্নিপেট্ট:

# import system modules 
import arcpy
from arcpy import env

# Set environment settings
env.workspace = "C:/data"

# Set local variables
inFeatures = "majorrds.shp"
outFeatureClass = "c:/output/output.gdb/majorrds_midpt"

# Execute FeatureVerticesToPoints
arcpy.FeatureVerticesToPoints_management(inFeatures, outFeatureClass, "MID")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.