আর্কজিআইএস ডেস্কটপ ব্যবহার করে বহুভুজ (ওয়েল পাথস) এর অভ্যন্তরে সমান্তরাল রেখাগুলি আঁকছেন?


11

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

সুতরাং লাইন কোণ, লাইনগুলির মধ্যে প্রস্থ, নূন্যতম / সর্বাধিক দৈর্ঘ্য এবং বহুভুজের দিকগুলি থেকে বাফার প্রস্থ আমার বুনিয়াদি মানদণ্ডগুলি।

চিত্র যদি সংযুক্ত থাকে তবে এটি সহায়তা করে।

এখানে চিত্র বর্ণনা লিখুন


বহুভুজ প্রান্ত থেকে নির্দিষ্ট দূরত্ব শেষ করার জন্য কি লাইনগুলির প্রয়োজনীয়তা রয়েছে?
cndnflyr

হ্যাঁ, আমার প্রান্তগুলি থেকে দূরে থাকা দরকার। আমি যদি সেই মানটি ঘোষণা করতে পারি তবে তা দুর্দান্ত হবে। ধন্যবাদ।
Tx_Dan

উত্তর:


9

@Cndnflyr যেমন উল্লেখ করেছে, এটি পাইথনে স্ক্রিপ্ট করা যায়।

স্ক্রিপ্ট সরঞ্জাম UI:

এখানে চিত্র বর্ণনা লিখুন

নমুনা আউটপুট: এখানে চিত্র বর্ণনা লিখুন

# import libraries
import arcpy

# set input/output parameters
polyFC = arcpy.GetParameterAsText(0)        # input polygons
outParallel = arcpy.GetParameterAsText(1)   # output parallel lines
lineSpacing = arcpy.GetParameterAsText(2)   # line spacing
buffDist = arcpy.GetParameterAsText(3)      # inner buffer distance

# parse numbers from parameters
lineSpaceNum = float(lineSpacing.split(' ')[0])
buffNum = float(buffDist.split(' ')[0])

# establish spatial reference
desc = arcpy.Describe(polyFC)
SR = desc.spatialReference

# set overwrite environment
arcpy.env.overwriteOutput = True
arcpy.env.outputCoordinateSystem = SR

parallels = []
# loop through each input shape
for row in arcpy.da.SearchCursor(polyFC, ["SHAPE@"], spatial_reference=SR):

    # create inner buffer
    polyBuff = row[0].buffer(buffNum * -1)

    # create hull rectangle to establish a rotated area of interest
    coordSplit = row[0].hullRectangle.split(' ')

    # collect corner coordinates
    coordList = arcpy.Array([arcpy.Point(coordSplit[0],coordSplit[1]),arcpy.Point(coordSplit[2],coordSplit[3]),arcpy.Point(coordSplit[4],coordSplit[5]),arcpy.Point(coordSplit[6],coordSplit[7]),arcpy.Point(coordSplit[0],coordSplit[1])])

    # create lines from hull rectangle
    currentLines = []
    for pointNum in range(0,4):
        arcpy.Array([coordList.getObject(pointNum),coordList.getObject(pointNum+1)])
        hullRecLine = arcpy.Polyline(arcpy.Array([coordList.getObject(pointNum),coordList.getObject(pointNum+1)]))
        currentLines.append(hullRecLine)

    # compare first and second line to determine if first line is short or long
    firstLong = 0
    if currentLines[0].length > currentLines[1].length:
        firstLong = 1

    # calculate number of points needed along short axis
    numPoints = int(math.floor(currentLines[firstLong].length/lineSpaceNum))

    # create and join points to create parallel lines
    for point in range(1,numPoints+1):
        shortPoint1 = currentLines[firstLong].positionAlongLine(lineSpaceNum*point)
        shortPoint2 = currentLines[firstLong + 2].positionAlongLine(currentLines[firstLong + 2].length - (lineSpaceNum*point))
        parallel = arcpy.Polyline(arcpy.Array([shortPoint1.centroid,shortPoint2.centroid]), SR)

        # intersect parallel lines with buffer
        parallelBuff = parallel.intersect(polyBuff,2)
        parallels.append(parallelBuff)

# write geometries to disk
arcpy.CopyFeatures_management(parallels, outParallel)

# add to map
mxd = arcpy.mapping.MapDocument("CURRENT")
dataFrame = arcpy.mapping.ListDataFrames(mxd, "*")[0]
addLayer = arcpy.mapping.Layer(outParallel)
arcpy.mapping.AddLayer(dataFrame, addLayer)

del row

বাহ এই সুন্দর, ফোলোম! একবার দেখে নেবেন। তোমাকে অনেক ধন্যবাদ!
Tx_Dan

এটি শ্যাপ অবজেক্টের পদ্ধতিগুলির দুর্দান্ত ব্যবহার। এটি মার্জিত। এটি কেবল অনুপস্থিত যা লাইনগুলির কোণ নির্ধারণ করছে। যেমনটি এটি বহুভুজের দীর্ঘতম বরাবর রেখাগুলি আঁকবে।
cndnflyr

4

পাইথন দিয়ে এটি করা যেতে পারে তবে এটি লিখতে কিছুটা সময় লাগবে।

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

  1. সম্পাদনার সময়, বহুভুজের উপর দিয়ে রেখাগুলি সরান।
  2. ঘোরানো সরঞ্জামটি ব্যবহার করুন, অ্যাঙ্কর পয়েন্টটি যেখানে প্যারালাল লাইন এবং বহুভুজ প্রান্তটি মিলে যায় সেখানে সরিয়ে নিন এবং লাইনগুলি ঘোরান যাতে এটি পলিগন প্রান্তের দিকে স্ন্যাপ করে আপনি এটিকে সাজিয়ে রেখেছেন।
  3. বহুভুজকে পললিনে রূপান্তর করুন
  4. সমান্তরাল লাইনগুলি বহুভুজ প্রান্ত হতে আপনি যে দূরত্বটি চান তা পলিলাইন বাফার করুন।
  5. বাফার্ড বহুভুজ এজ দ্বারা আচ্ছাদিত পলাইনগুলি মুছতে মুছতে সরঞ্জামটি ব্যবহার করুন
  6. বহুভুজের ভিতরে নয় এমন সমস্ত লাইন অবস্থান দ্বারা নির্বাচন করুন এবং সেগুলি মুছুন। অথবা আমি মনে করি ক্লিপ সরঞ্জামটিও কাজ করবে।
  7. নির্দিষ্ট দৈর্ঘ্যের চেয়ে কম সমস্ত লাইনের বৈশিষ্ট্য অনুসারে নির্বাচন করুন (রাখার জন্য খুব ছোট, যদিও আপনাকে প্রথমে কোনও ক্ষেত্র যুক্ত করতে এবং জ্যামিতির গণনা করতে হবে), এবং একটি নির্দিষ্ট দৈর্ঘ্যের চেয়েও বেশি (যদি আপনি চান তবে এটি রাখতে খুব দীর্ঘ) ), এগুলি মুছুন।
  8. পাখলান পুনরাবৃত্তি...

কোনও কোড না লিখে 3 থেকে Ste ধাপে মডেল করা যায়।

প্রক্রিয়াটি কোডিংয়ের জন্য অনেক একই প্রক্রিয়া ব্যবহার করা যেতে পারে তবে টেমপ্লেট লাইন থাকার পরিবর্তে আপনি কোডটি ডান কোণে লাইনগুলি আঁকতে পারেন, দূরত্ব দূরে রাখতে পারেন ইত্যাদি I আমি কিছুক্ষণের জন্য এটি করি নি তবে আমি মনে করি একটি মত পাইথন গ্রন্থাগার সুষম সাহায্যে পাঠাতে পারেন। এটি নিশ্চিত করুন যে এটি বহুভুজের চেয়ে বৃহত্তর অঞ্চল জুড়ে রয়েছে এবং সরঞ্জামগুলি স্বয়ংক্রিয়ভাবে পললাইন, বাফার, মুছতে, বহুভুজের অভ্যন্তরে নয় লাইনগুলি নির্বাচন করতে এবং সেগুলি মুছতে ব্যবহার করুন।


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