পলি রেখার সাথে দূরত্ব প্রদত্ত শেষ পয়েন্টগুলি থেকে একটি পললিতে বিন্দু পান


10

আমার কাছে একটি পললাইনটির প্রারম্ভ ও শেষ পয়েন্ট আছে। প্রদত্ত দুরত্বের দ্বারা নির্দিষ্ট করা শেষ পয়েন্টগুলি থেকে আমি কীভাবে সেই পললাইনটিতে একটি পয়েন্ট পেতে পারি।

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

আরকিপি ব্যবহার করে আমি কীভাবে এটি পেতে পারি তবে শর্ত থাকে যে এই স্ক্রিপ্টটি কোনও মডিউল আমদানি না করে আর্কভিউতে কাজ করা উচিত ( এই উত্তরটির মতো )। আমি হার্ড কোড মান না চেষ্টা করছি।

সম্পর্কিত প্রশ্ন:


আপনি অবজেক্ট.ইন্টারপোলেট (দূরত্ব [, স্বাভাবিকীকরণ = মিথ্যা]) ব্যবহার করে কোনও ফল পাচ্ছেন না?
বিনয়ন

1
কোথায় পেলেন object.interpolate(distance[, normalized=False])। এটি কি আরকি পদ্ধতি? যদি তা হয় তবে আপনি দয়া করে লিঙ্কটি পোস্ট করতে পারেন। আমি এটি googled, কিন্তু এটি খুঁজে না।
ব্যবহারকারীর

এটি সুবোধের পদ্ধতি .. toblerity.github.com/ Shapely/ … মনে করেন আপনি অন্য প্রশ্নে এটি চেষ্টা
করেছেন..আপনি

2
সম্পর্কিত আরও একটি প্রশ্ন হ'ল gis.stackexchange.com/questions/6476/… , যা এই সমস্যার বিপরীতটিকে উদ্বেগ করে ( বিন্দুটি দেখিয়ে দূরত্বটি সন্ধান করবে)। দুটি সমাধান ঘনিষ্ঠভাবে সম্পর্কিত: একবার পললাইনটি পরিমাপযোগ্য হয়ে উঠলে, এর সাথে সমস্ত পয়েন্টগুলি তাদের দূরত্বের দিক দিয়ে সম্বোধন করা যেতে পারে (এবং এর সাথে স্বেচ্ছাচারিত অংশগুলি দূরত্বের পরিসীমা দ্বারা চিহ্নিত করা যেতে পারে)।
শুশুক

উত্তর:


7

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

লিনিয়ার রেফারেন্সিংয়ের জন্য ইএসআরআই সহায়তার লিঙ্ক


1
+1 এই সমস্যার জন্য স্পষ্টতই তৈরি একটি পরিপক্ক সক্ষমতার ব্যবহারের অর্থে এটি "ডান" পদ্ধতির।
হুশিয়ারি

6

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

ব্যাখ্যা হিসাবে, নীচে ব্যবহৃত লিনিয়ার রেফারেন্সিং সরঞ্জামটি "রাউটস" নেয়, আপনার ক্ষেত্রে লাইন বৈশিষ্ট্যগুলি এবং আপনার ক্ষেত্রে পয়েন্টগুলি দূরত্বের ক্ষেত্রের উপর ভিত্তি করে "ইভেন্টগুলি" রাখে। এটি মেশিনে সংরক্ষিত ফিচারলায়ারের ফলস্বরূপ, এটি শেষ ফাংশনের কারণ যা আউটপুট ফিচার ক্লাসে বৈশিষ্ট্যগুলি অনুলিপি করে।

import arcpy
import os
from arcpy import env

#Working directory
wkspace        = arcpy.GetParameterAsText(0)
#Line feature class
rtecls         = arcpy.GetParameterAsText(1)
#Line Unique ID
rtecls_ID      = arcpy.GetParameterAsText(2)
#Table of points to be located
pnttbl         = arcpy.GetParameterAsText(3)
#Field in point table that references line point will be located along
pttbl_rteid    = arcpy.GetParameterAsText(4)
#Distance field in point table
pttbl_dst      = arcpy.GetParameterAsText(5)
#Output Layer, layer is stored in memory.  Features still need to be copied to feature class saved to disk
outlayer       = arcpy.GetParameterAsText(6)
#Output Feature Class - If shapefile, make sure to include ".shp" at the end.
outclass       = arcpy.GetParameterAsText(7)

#Type of feature being located
fttype = "POINT"

#Set Workspace
env.workspace = wkspace

#Build String for input parameters in Linear Referencing tool
pt_props = pttbl_rteid + " " + fttype + " " + pttbl_dst

#Output featureclass path
outfclass = wkspace + os.sep + outclass

# Execute MakeRouteEventLayer
arcpy.MakeRouteEventLayer_lr (rtecls, rtecls_ID, pnttbl, pt_props, outlayer)

#Save feature layer to feature class on disk
arcpy.CopyFeatures_management(outlayer, outfclass)

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


5

লিনিয়ার রেফারেন্স সমস্যাটির মতো সমাধান করা without importing any modulesআমার সীমা ছাড়িয়ে ..

আমি ব্যবহার করেছি Shapely(2 ডি জিওপ্যাটিয়াল জ্যামিতির হেরফের এবং বিশ্লেষণের জন্য পাইথন প্যাকেজ And এবং এটি বিএসডি লাইসেন্সযুক্ত :-))

এখান থেকে ডাউনলোড করুন । ২.6 সংস্করণ যা কেবলমাত্র আরকিসকে ১০ টি আরকি সমর্থন করে এটি একটি সাধারণ ইনস্টলেশন (১.৫ এমবি আকার)

এবং এখন উদ্দেশ্যটি অর্জন করার জন্য এখানে আরকি স্ক্রিপ্টটি দেওয়া হয়েছে .. আমার অজগরকে ক্ষমা করুন..আজকেই আমি লুপস, টিপলস ইত্যাদি সম্পর্কে শিখেছি :)

import arcpy
import math
from arcpy import env

env.workspace = r"C:\testshape"

desc = arcpy.Describe("Rivers.shp")
shapefieldname = desc.ShapeFieldName

rows = arcpy.SearchCursor("Rivers.shp")

temptup = ()

# get ESRI geometries out of their cage..
for row in rows:

    feat = row.getValue(shapefieldname)
    partnum = 0
    for part in feat:
        for pnt in feat.getPart(partnum):
            if pnt:
                temptup += ((pnt.X, pnt.Y),)
            else:
                print "Interior Ring:"
        partnum += 1    

# and now the shapely magic :)

import shapely
from shapely.geometry import LineString
lnstr = LineString(temptup)
rsltPoint = lnstr.interpolate(0.5)
print(rsltPoint.x,rsltPoint.y)

দ্রষ্টব্য : বৈশিষ্টটিতে কার্ভের বিভাগ থাকলে এটি কাজ করবে না


2

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

    line = arcpy.Polyline(arrayPts)
    pt = line.positionAlongLine (0.99, 'True')

এর জন্য 10.1 বা তারও বেশি আর্ক প্রয়োজন; আমার কাছে আর্কআইএনফো লাইসেন্সিং স্তরের (ওপি নির্দিষ্ট করা আর্কভিউ) এর নীচে এটি উপলব্ধ ছিল কিনা তা আমি বুঝতে সক্ষম হয়েছি।

উপরের আমার উদাহরণে, আমি একটি নির্দিষ্ট দুরত্বের চেয়ে নয়, সামগ্রিক লাইনের দৈর্ঘ্যের শতকরা একটি পয়েন্ট চেয়েছিলাম। এটি করার জন্য, আমি দ্বিতীয় alচ্ছিক যুক্তি সরবরাহ করেছি positionAlongLine। আপনি যদি কেবল একটি নিখুঁত দূরত্ব নির্দিষ্ট করতে চান তবে আপনি দ্বিতীয় আরগটি এড়িয়ে যান। এখানে ডক এর

পূর্ণ কোড নমুনা হয়

import numpy
ptsList = list()
id = 0

with arcpy.da.SearchCursor('flFL', ["SHAPE@"]) as cursor:
    for row in cursor: 
        arrayPts = row[0].getPart()
        line = arcpy.Polyline(arrayPts)
        pt = line.positionAlongLine (0.99, 'True')
        ptsList.append((id, (pt.getPart().X, pt.getPart().Y)))
        id += 1

array = numpy.array([ptsList], \
numpy.dtype([('idfield',numpy.int32),('XY', '<f8', 2)]))

SR = arcpy.Describe("flFL").spatialReference
arcpy.da.NumPyArrayToFeatureClass(array, 'nsegSamplePts', ['XY'], SR)

'flFL'লাইনগুলির লাইনগুলির আমার বৈশিষ্ট্য যা আমি পয়েন্টগুলি সনাক্ত করতে চাই। বেশ দ্রুত চলে। NumPyArrayToFeatureClassআমার সমস্ত পয়েন্টগুলি ফিচার ক্লাসে ফিরিয়ে দেওয়ার জন্য খুব সুন্দর উপায় ছিল (সেই অংশটির জন্য আমার সহকর্মী কার্টিসকে ধন্যবাদ!)। ডাব্লু / Append_managementকিন্তু পরীক্ষা করা হয়েছে তবে এটি মোটামুটি ধীর ছিল।


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

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

1

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

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

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


-1

আমি মনে করি আপনি এটি ফিচার ভার্টেস টু পয়েন্টস (ডেটা ম্যানেজমেন্ট) পদ্ধতিতে পেতে পারেন। আপনি এখানে আরও তথ্য পেতে পারেন ।

বা আপনি খুঁজে স্প্লিট লাইনে পয়েন্ট (তথ্য ম্যানেজমেন্ট) পরীক্ষা করতে পারবেন এখানে

এগুলি পুরোপুরি পর্যাপ্ত নয় তবে আপনি নিজের কোডটি লিখতে পারেন ...

আমি এটি আপনাকে সাহায্য করে আশা করি...


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