কিউজিআইএসে ষড়ভুজ গ্রিডে কোনও রাস্তা নেটওয়ার্ক কীভাবে স্ন্যাপ করা যায়?


13

আমি ষড়জাগরীয় গ্রিডে রোড নেটওয়ার্ক স্ন্যাপ করার জন্য কিউজিআইএস ২.১৪ ব্যবহার করার চেষ্টা করছি, তবে আমি অদ্ভুত নিদর্শনগুলি পাচ্ছি।

আমি এমএমকিউআইএস দিয়ে একটি হেক্স গ্রিড তৈরি করেছি , কোষগুলি প্রায় 20 x 23 মিটার হয়। আমি 1 মিটার দ্বারা রাস্তা নেটওয়ার্কটি বাফার করেছি এবং এটি ঘনকরণ করেছি যাতে প্রতি কয়েক মিটারে একটি নোড থাকে। নীচে আমি কী অর্জন করতে চাইছি তা আপনি দেখতে পারেন। আপনি দেখতে পাচ্ছেন, আমি এটি কিছু ক্ষেত্রে কাজ করতে পারি: -

  • নীল হল ঘন রাস্তা (একটি বাফার লাইন)
  • লাল হ'ল 'হেক্সিফাইড' সংস্করণ - এটি আমি খুঁজে পেতে চাই
  • ধূসর হেক্স গ্রিড হয়

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

আমি তখন নিকটতম ষড়ভুজ কোণে নোডগুলি স্ন্যাপ করতে নতুন স্ন্যাপ জ্যামিতি বৈশিষ্ট্যটি ব্যবহার করেছি । ফলাফল আশাব্যঞ্জক, তবে এমন কয়েকটি প্রান্তের ঘটনা রয়েছে যেখানে ষড়ভুজ (বা এর অংশ) পূরণের জন্য লাইনটি প্রসারিত হয়েছে: -

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

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

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

সাফল্য ছাড়াই আমি চেষ্টা করেছি: -

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

আমি দেখতে পেয়েছি যে আমি যদি কেবল লাইন লাইন স্তরগুলি ব্যবহার করে পরিবর্তন করি তবে এটি কিছুক্ষণ কাজ করে, তারপরে ক্র্যাশ হয়ে যায়। এটি এর কাজটি যেমন চলছে তেমনি সংরক্ষণ করছে বলে মনে হচ্ছে - কিছু লাইন আংশিকভাবে প্রক্রিয়াজাত হয়েছে।

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

অন্য কোনও লাইনের / বহুভুস্তরের স্তরটির নিকটতম বিন্দুতে পয়েন্টগুলি স্ন্যাপ করার জন্য কি অন্য কোনও উপায় জানেন, আদর্শভাবে পোস্টগ্রিজ / পোস্টগ্রিস ব্যবহার না করে (যদিও পোস্টগ্রিসের সাথে সমাধানটিও স্বাগত হবে)?

সম্পাদনা

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

মনে রাখবেন এটি ওএসবিবিতে রয়েছে (epsg: 27700) যা মিটারে ইউনিট যুক্তরাজ্যের জন্য একটি স্থানীয় ইউটিএম।


3
আপনি দয়া করে একটি নমুনা ডেটাसेट ভাগ করতে পারেন? আমি এটি চেষ্টা করে দেখতে চাই তবে স্ক্র্যাচ থেকে নমুনা ডেটা তৈরির প্রক্রিয়াটি এগিয়ে যেতে চাই না।
জার্মানি ক্যারিলো

@ জেরমান ক্যারিলিও - ধন্যবাদ আমি প্রশ্নের সাথে একটি নমুনা প্রকল্পের একটি লিঙ্ক যুক্ত করেছি।
স্টিভেন কে

উত্তর:


14

আমার সলিউশনে একটি পাইকিজিআইএস স্ক্রিপ্ট জড়িত যা স্ক্যান্পিংয়ের সাথে জড়িত একটি ওয়ার্কফ্লোর চেয়ে দ্রুত এবং আরও কার্যকর (আমি এটি চেষ্টা করেও দেখেছি)। আমার অ্যালগরিদম ব্যবহার করে আমি এই ফলাফলগুলি পেয়েছি:

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

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

আপনি QGIS (QGIS পাইথন কনসোলে) থেকে ক্রমানুসারে নিম্নলিখিত কোড স্নিপেটগুলি চালাতে পারেন। শেষে আপনি কিউজিআইএস-এ লোড হওয়া বিচ্ছিন্ন রুটগুলির সাথে একটি মেমরি স্তর পাবেন layer

একমাত্র পূর্বশর্ত হ'ল একাধিক রাস্তা শেফিল তৈরি করুন (ব্যবহার করুন Processing->Singleparts to multipart, আমি ক্ষেত্রটি প্যারামিটার fictitiuosহিসাবে ব্যবহার করেছি Unique ID field)। এটি আমাদের roads_multipart.shpএকক বৈশিষ্ট্যযুক্ত একটি ফাইল দেবে ।

এখানে অ্যালগরিদম ব্যাখ্যা করা হয়েছে:

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

    hexgrid = QgsVectorLayer("/docs/borrar/hex_grid_question/layers/normal-hexgrid.shp", "hexgrid", "ogr")
    roads = QgsVectorLayer("/docs/borrar/hex_grid_question/layers/roads_multipart.shp", "roads", "ogr")  # Must be multipart!
    
    roadFeat = roads.getFeatures().next() # We just have 1 geometry
    road = roadFeat.geometry() 
    indicesHexSides = ((0,1), (1,2), (2,3), (3,4), (4,5), (5,0))
    
    epsilon = 0.01
    # Function to compare whether 2 segments are equal (even if inverted)
    def isSegmentAlreadySaved(v1, v2):
        for segment in listSegments:        
            p1 = QgsPoint(segment[0][0], segment[0][1])
            p2 = QgsPoint(segment[1][0], segment[1][1])
            if v1.compare(p1, epsilon) and v2.compare(p2, epsilon) \
                or v1.compare(p2, epsilon) and v2.compare(p1, epsilon):
                return True
        return False
    
    # Let's find the nearest sides of hexagons where routes cross
    listSegments = []
    for hexFeat in hexgrid.getFeatures():
        hex = hexFeat.geometry()
        if hex.intersects( road ):
            for side in indicesHexSides:
                triangle = QgsGeometry.fromPolyline([hex.centroid().asPoint(), hex.vertexAt(side[0]), hex.vertexAt(side[1])])
                if triangle.intersects( road ):
                    # Only append new lines, we don't want duplicates!!!
                    if not isSegmentAlreadySaved(hex.vertexAt(side[0]), hex.vertexAt(side[1])): 
                        listSegments.append( [[hex.vertexAt(side[0]).x(), hex.vertexAt(side[0]).y()], [hex.vertexAt(side[1]).x(),hex.vertexAt(side[1]).y()]] )  
  2. পাইথন তালিকা, টিপলস এবং অভিধান ব্যবহার করে সংযোগ বিচ্ছিন্ন (বা 'ওপেন') বিভাগগুলি থেকে মুক্তি পান । এই মুহুর্তে, কিছু সংযোগ বিচ্ছিন্ন অংশ রয়েছে, যেমন একটি বিভাগ বিচ্ছিন্ন হয়েছে তবে অন্যটি কমপক্ষে অন্যান্য 2 টি বিভাগে সংযুক্ত রয়েছে (পরবর্তী চিত্রটিতে লাল বিভাগগুলি দেখুন)। আমাদের এগুলি থেকে মুক্তি দেওয়া দরকার।

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

    # Let's remove disconnected/open segments
    lstVertices = [tuple(point) for segment in listSegments for point in segment]
    dictConnectionsPerVertex = dict((tuple(x),lstVertices.count(x)-1) for x in set(lstVertices))
    
    # A vertex is not connected and the other one is connected to 2 segments
    def segmentIsOpen(segment):
        return dictConnectionsPerVertex[tuple(segment[0])] == 0 and dictConnectionsPerVertex[tuple(segment[1])] >= 2 \
            or dictConnectionsPerVertex[tuple(segment[1])] == 0 and dictConnectionsPerVertex[tuple(segment[0])] >= 2
    
    # Remove open segments
    segmentsToDelete = [segment for segment in listSegments if segmentIsOpen(segment)]        
    for toBeDeleted in segmentsToDelete:
        listSegments.remove( toBeDeleted )
  3. এখন আমরা স্থানাঙ্কগুলির তালিকা থেকে একটি ভেক্টর স্তর তৈরি করতে এবং এটিকে কিউজিআইএস মানচিত্রে লোড করতে পারি :

    # Create a memory layer and load it to QGIS map canvas
    vl = QgsVectorLayer("LineString", "Snapped Routes", "memory")
    pr = vl.dataProvider()
    features = []
    for segment in listSegments:
        fet = QgsFeature()
        fet.setGeometry( QgsGeometry.fromPolyline( [QgsPoint(segment[0][0], segment[0][1]), QgsPoint(segment[1][0], segment[1][1])] ) )
        features.append(fet)
    
    pr.addFeatures( features )
    vl.updateExtents()
    QgsMapLayerRegistry.instance().addMapLayer(vl)

ফলাফলের আরও একটি অংশ:

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

ছিটানো রুটে আপনার যদি গুনের প্রয়োজন হয় তবে আমরা ছেদগুলি দ্রুত মূল্যায়নের জন্য একটি স্পেসিয়াল ইনডেক্স ব্যবহার করতে পারি (যেমন /gis//a/130440/4972 তে ) তবে এটি অন্য গল্প।

আশাকরি এটা সাহায্য করবে!


1
আপনাকে ধন্যবাদ, যে পুরোপুরি কাজ করে! পাইথন কনসোলে এটি আটকে দিতে সমস্যা হয়েছিল ... আমি এটিকে কিগিস পাইথন সম্পাদকের একটি .py ফাইল হিসাবে সংরক্ষণ করেছি এবং এটি সেখান থেকে খুব ভালভাবে চলেছে। মাল্টিপার্ট পদক্ষেপটি বৈশিষ্ট্যগুলি সরিয়ে দেয়, তবে একটি বাফার / স্থানিক সংযুক্তি এটি ঠিক করবে!
স্টিভেন কে

1
গ্রেট! খুশি হলেন শেষ পর্যন্ত আপনি যে সমস্যার মুখোমুখি হয়েছিলেন তা সমাধান করে। আপনি কী ব্যবহার করছেন সে বিষয়টি জানার জন্য আমি আগ্রহী। আপনি কি মনে করেন আমরা কিউআইজিআইএস প্লাগইন বা প্রসেসিং স্ক্রিপ্টগুলিতে অন্তর্ভুক্ত এমন কোনও স্ক্রিপ্ট হয়ে উঠতে এটিকে উপার্জন করতে পারি?
জার্মেইন ক্যারিলো

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

1
স্ক্রিপ্টের পিছনে ধারণাটি ত্রিভুজ, স্কোয়ারস, পেন্টাগন, হেক্সাগন এবং আরও অনেকগুলি গ্রিডে কাজ করবে।
জার্মানি ক্যারিলো

6

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

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

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

  • প্রতিটি রোড পয়েন্টের জন্য নিকটস্থ ভোরোনাই পয়েন্টের স্থানাঙ্কগুলি সন্ধান করুন: এখানে চিত্র বর্ণনা লিখুন
  • একই ক্রমে নিকটস্থ পয়েন্টগুলি সংযুক্ত করে "রাস্তাগুলি" তৈরি করুন: এখানে চিত্র বর্ণনা লিখুন

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

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


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

সান্নিধ্য বহুভুজ সীমানা রেখা। বিটিডব্লিউ আমি খুব তাড়াতাড়ি থামলাম। টাস্কটি সম্পূর্ণ করার জন্য এটি প্রথম ফলাফলটি শীর্ষে বিভক্ত করার পক্ষে, মাঝখানে পয়েন্ট যুক্ত করুন এবং পুনরায় প্রক্রিয়াটি করুন
ফেলিক্সআইপি

4

আমি বুঝতে পেরেছি আপনি কিউজিআইএস পদ্ধতি জিজ্ঞাসা করছেন তবে একটি আরকি উত্তরের জন্য আমার সাথে সহ্য করুন:

roads = 'clipped roads' # roads layer
hexgrid = 'normal-hexgrid' # hex grid layer
sr = arcpy.Describe('roads').spatialReference # spatial reference
outlines = [] # final output lines
points = [] # participating grid vertices
vert_dict = {} # vertex dictionary
hex_dict = {} # grid dictionary
with arcpy.da.SearchCursor(roads,["SHAPE@","OID@"], spatial_reference=sr) as r_cursor: # loop through roads
    for r_row in r_cursor:
        with arcpy.da.SearchCursor(hexgrid,["SHAPE@","OID@"], spatial_reference=sr) as h_cursor: # loop through hex grid
            for h_row in h_cursor:
                if not r_row[0].disjoint(h_row[0]): # check if the shapes overlap
                    hex_verts = []
                    for part in h_row[0]:
                        for pnt in part:
                            hex_verts.append(pnt) # add grid vertices to list
                    int_pts = r_row[0].intersect(h_row[0],1) # find all intersection points between road and grid
                    hex_bnd = h_row[0].boundary() # convert grid to line
                    hex_dict[h_row[1]] = hex_bnd # add grid geometry to dictionary
                    for int_pt in int_pts: # loop through intersection points
                        near_dist = 1000 # arbitrary large number
                        int_pt = arcpy.PointGeometry(int_pt,sr)
                        for hex_vert in hex_verts: # loop through hex vertices
                            if int_pt.distanceTo(hex_vert) < near_dist: # find shortest distance between intersection point and grid vertex
                                near_vert = hex_vert # remember geometry
                                near_dist = int_pt.distanceTo(hex_vert) # remember distance
                        vert_dict.setdefault(h_row[1],[]).append(arcpy.PointGeometry(near_vert,sr)) # store geometry in dictionary
                        points.append(arcpy.PointGeometry(near_vert,sr)) # add to points list
for k,v in vert_dict.iteritems(): # loop through participating vertices
    if len(v) < 2: # skip if there was only one vertex
        continue
    hex = hex_dict[k] # get hex grid geometry
    best_path = hex # longest line possible is hex grid boundary
    for part in hex:
        for int_vert in v: # loop through participating vertices
            for i,pnt in enumerate(part): # loop through hex grid vertices
                if pnt.equals(int_vert): # find vertex index on hex grid corresponding to current point
                    start_i = i
                    if start_i == 6:
                        start_i = 0
                    for dir in [[0,6,1],[5,-1,-1]]: # going to loop once clockwise, once counter-clockwise
                        past_pts = 0 # keep track of number of passed participating vertices
                        cur_line_arr = arcpy.Array() # polyline coordinate holder
                        cur_line_arr.add(part[start_i]) # add starting vertex to growing polyline
                        for j in range(dir[0],dir[1],dir[2]): # loop through hex grid vertices
                            if past_pts < len(v): # only make polyline until all participating vertices have been visited
                                if dir[2] == 1: # hex grid vertex index bookkeeping
                                    if start_i + j < 6:
                                        index = start_i + j
                                    else:
                                        index = (start_i - 6) + j
                                else:
                                    index = j - (5 - start_i)
                                    if index < 0:
                                        index += 6
                                cur_line_arr.add(part[index]) # add current vertex to growing polyline
                                for cur_pnt in v:
                                    if part[index].equals(cur_pnt): # check if the current vertex is a participating vertex
                                        past_pts += 1 # add to counter
                        if cur_line_arr.count > 1:
                            cur_line = arcpy.Polyline(cur_line_arr,sr)
                            if cur_line.length < best_path.length: # see if current polyline is shorter than any previous candidate
                                best_path = cur_line # if so, store polyline
    outlines.append(best_path) # add best polyline to list
arcpy.CopyFeatures_management(outlines, r'in_memory\outlines') # write list
arcpy.CopyFeatures_management(points, r'in_memory\mypoints') # write points, if you want

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

মন্তব্য:

  • এই স্ক্রিপ্টটিতে লুপগুলির মধ্যে অনেকগুলি লুপ এবং নেস্টেড কার্সার রয়েছে। অপ্টিমাইজেশনের জন্য অবশ্যই জায়গা আছে। আমি কয়েক মিনিটের মধ্যে আপনার ডেটাসেটগুলি দিয়ে দৌড়েছি, তবে আরও বৈশিষ্ট্যগুলি বিষয়টিকে আরও জটিল করে তুলবে।

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

2

আপনি যদি রাস্তা লাইনটি সেগমেন্টগুলিতে বিভক্ত করেন যেখানে প্রতিটি বিভাগটি হেক্সাগন দ্বারা সম্পূর্ণরূপে অন্তর্ভুক্ত ছিল, তবে ষড়ভুজ লাইন বিভাগগুলি যে ক্ষেত্রে ব্যবহার করবে সে বিষয়ে আপনার সিদ্ধান্তটি হবে যে বিভক্ত রাস্তা বিভাগের সেন্ট্রয়েড থেকে প্রতিটি ষড়ভুজ পার্শ্বের মিডপয়েন্টের দূরত্ব অর্ধেকের কম ছিল কিনা? ষড়ভুজটির ব্যাস (বা ষড়্ভুজের অভ্যন্তরে ফিট হওয়া একটি বৃত্তের ব্যাসার্ধের চেয়ে কম)

সুতরাং, আপনি যদি (একবারে এক বিভাগে) ষড়ভুজ রেখার বিভাগগুলি বেছে নিয়েছিলেন (যেখানে প্রতিটি বিভাগটি ষড়্জের একটি দিক) যেখানে ষড়্ভুজটির ব্যাসার্ধের দূরত্বের মধ্যে রয়েছে, আপনি সেই লাইন জ্যামিতিগুলি অনুলিপি করতে এবং সেগুলিতে মার্জ করতে পারেন আপনি নিজের রোডের ডেটাসেটের জন্য যা কিছু অনন্য শনাক্তকারী ব্যবহার করেন।

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

স্ন্যাপ সরঞ্জামটির সাথে সমস্যাটি হ'ল এটি নির্বিচারে বিন্দুগুলি স্ন্যাপ করে; ব্যবহারের জন্য নিখুঁত সহনশীলতা খুঁজে পাওয়া মুশকিল। এই পদ্ধতিটির সাহায্যে আপনি সঠিকভাবে চিহ্নিত করতে পারবেন কোন ষড়ভুজ রেখার বিভাগগুলি ব্যবহার করবেন, তারপরে আপনার রাস্তার ডেটার জ্যামিতিটি প্রতিস্থাপন করুন (বা জ্যামিতিগুলিকে অন্য কোনও ডাটাবেসে সন্নিবেশ করানো)।

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


1

Q.৪ কিগিস in.০ এ জ্যামিতি স্নাপার পুনরায় কাজ করা হয়েছে এবং এখন বিভিন্ন জ্যামিতির ধরণের মধ্যে স্ন্যাপিংয়ের অনুমতি দেয়। এটিতে অনেকগুলি সংশোধনও রয়েছে। আনুষ্ঠানিকভাবে 3.0 প্রকাশের আগে আপনি উন্নত স্নাপার অ্যাক্সেস পেতে একটি "দৈনিক স্ন্যাপশট" সংস্করণ চেষ্টা করতে পারেন।

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