সুদৃশ্য ব্যবহার করে: বহুভুজ এবং মাল্টিপলিগনগুলির মধ্যে অনুবাদ করা


12

[সম্পাদনা করুন: এর সমাধানটি হ'ল শেফফিলগুলি পড়ার জন্য ওজিআর ব্যবহার করা ছিল। ভূগোলের উদাহরণ দেখুন]]

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

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

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

সংক্ষিপ্তসার হিসাবে: যদি আমার কাছে বহুভুজের রিংয়ের একটি তালিকা থাকে তবে আমি জানি না কোনটি রিংগুলি অভ্যন্তরের গর্ত বা পৃথক বহুভুজ, আমি কীভাবে তাদের সর্বোত্তমভাবে পৃথক বহুভুজগুলিতে মনোনীত অভ্যন্তরীণ গর্তগুলি দিয়ে সাজিয়ে তুলব?

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


আপনি শেফিলটি পড়তে কী ব্যবহার করেন সে সম্পর্কে এই প্রশ্নের গুরুত্বপূর্ণ তথ্য অনুপস্থিত।
inc42

@ inc42 আমি সরাসরি ফাইলটি পড়তে পাইথন ব্যবহার করছিলাম।
বেনিয়ামিনগোল্ডার

আহ, তাহলে শেপলি বিট বিভ্রান্তিকর। আপনার প্রকৃত সমস্যাটি শেফাইল ফর্ম্যাটে রিংয়ের "ধরণের" কীভাবে নির্ধারণ করতে হবে তা সন্ধান করছিল। :)
inc42

উত্তর:


10

পৃথক বহুভুজ কীভাবে পাবেন সে সম্পর্কে রিলেটের উত্তরের জন্য, তারপরে আপনি গর্তগুলি তৈরি করতে সমস্ত বহুভুজের উপর একটি ছেদটি চালাতে পারেন। আপনার ডেটাসেটে যদি ওভারল্যাপিং বহুভুজ থাকে তবে আপনি ভাগ্যের বাইরে রয়েছেন।

আবার বুঝিয়ে বলুন বিদ্যমান শেফফাইল পাঠকদের কী ভুল?

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

মাল্টিপ্যাচগুলির জন্য আপনি "প্যাচ আইডি" তে বহুভুজ আইডি নির্ধারণ এবং তারপরে বৈশিষ্ট্যগুলিতে এই বৈশিষ্ট্যটি আবার যুক্ত করার একই কৌশলটি ব্যবহার করতে পারেন।

সম্পাদনা করুন: আপনি যদি বলেন যে আপনি ওজিআর ব্যবহার করতে চান না, কেবল যদি আপনি নিজের মত পরিবর্তন করেন ..

import ogr
# Get the driver
driver = ogr.GetDriverByName('ESRI Shapefile')
# Open a shapefile
shapefileName = "D:/temp/myshapefile.shp"
dataset = driver.Open(shapefileName, 0)

layer = dataset.GetLayer()
for index in xrange(layer.GetFeatureCount()):
    feature = layer.GetFeature(index)
    geometry = feature.GetGeometryRef()
    #geometry for polygon as WKT, inner rings, outer rings etc. 
    print geometry

জ্যামিতিটি নিম্নরূপভাবে আউটপুট হওয়া উচিত:

POLYGON ((79285 57742,78741 54273...),(76087 55694,78511 55088,..))

প্রথম বন্ধনীটি বহির্মুখী রিংয়ের কর্ডগুলি অন্তর্ভুক্ত করে, পরবর্তী বন্ধনীগুলি অভ্যন্তরের রিংগুলির কর্ডগুলি অন্তর্ভুক্ত করে। আপনার যদি জেড ভ্যালু পয়েন্টগুলি 79285 57742 10 (যেখানে শেষের সমন্বয়টি একটি উচ্চতা) ফর্ম্যাটে হওয়া উচিত।

অন্যথায় আপনি একে অপরের সাথে প্রতিটি বহুভুজকে মূল্যায়ন করতে শেপলি কনটেইনস এবং ইনভার ইন ফাংশনগুলি ব্যবহার করতে পারেন এবং প্রক্রিয়াকরণের গতি বাড়ানোর জন্য আগেই একটি স্থানিক সূচক প্রয়োগ করতে পারেন - http://pypi.python.org/pypi/Rtree/


ধন্যবাদ, এটি আমি যা খুঁজছি তা নয়, তবে আমি আমার প্রশ্নটিতে আরও কিছু স্পষ্টতা দেখতে পেয়েছি। আপনার প্রশ্নের উত্তর দেওয়ার জন্য: 1, কারণ আমি প্রথমে তাদের কয়েক সংখ্যক চৌরাস্তা করতে বাছাই করছি। 2, কিছুই না, আমার কেবল এমন একটি দরকার যা হালকা ওজনের এবং আমি পাইথন থেকে সহজেই ব্যবহার করতে পারি এবং আমি ওগ্র শিখিনি। 3, না, এই ক্ষেত্রে এটি সহজ হবে না।
বেনিয়ামিনগোল্ডার

1
কি দারুন! ধন্যবাদ ভূগোলিক! আমি এখন 90% নিশ্চিত যে ওগার এখানে সমাধান। আমি ওগ্রের সাথে কিছু ইনস্টলেশন সমস্যা নিয়ে এসেছি তবে দেখে মনে হচ্ছে এগুলি কাজ করার মতো। তাহলে ওজিআর তার ডাব্লুএইচটি আউটপুটে রিংগুলি সংগঠিত করে? এবং 3 ডি শেফফাইলগুলি দিয়ে কি ঠিক আছে (আমি প্রচুর 3 ডি ব্যবহার করি)?
বেনিয়ামিনগোল্ডার

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

ওজিআর পুনরায় ইনস্টলেশন - মনে রাখবেন আপনার উইন্ডোজ এবং মেলানো পাইথন বাইন্ডিংয়ের বাইনারি লাগবে।
geographika

9

প্রথমে শেফফিল খুলতে ওগার ব্যবহার করুন:

from osgeo import ogr
source = ogr.Open("mpolys.shp")
layers =  source.GetLayerByName("mpoly")
len(layers)
1

শেফফাইল জ্যামিতিগুলিকে সুদৃ ge় জ্যামিতিতে রূপান্তর করুন

from shapely.wkb import loads
element=layers[0] #(because lenght of layer =1, else you need "for element in layers: ...")
geom = loads(element.GetGeometryRef().ExportToWkb())
geom.geom_type
'MultiPolygon'
print geom
MULTIPOLYGON ((..... # the geometry in shapely wkt format

বহুগুণে বহুভুজগুলির জন্য:

poly=[]
for pol in geom:
    poly.append(pol)
poly[0]
<shapely.geometry.polygon.Polygon object at 0x00B82CB0>
poly[0].geom_type
'Polygon'
print(poly[1])
POLYGON ((.... # the geometry in shapely wkt format

এবং এখন, আপনি সুদৃ ( ( সুশ্রী ) সমস্ত ফাংশন ব্যবহার করতে পারেন


1

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

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


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

আমি দেখি. আপনি ওগ্রে যাওয়ার উপায় খুঁজে পেয়েছেন তা দেখে আমিও খুশি। ;)
118

-2

হিসাবে @ inc42 দ্বারা নির্দেশিত পৃষ্ঠায় 8, ESRI Shapefile কারিগরী বর্ণনা: একটি ESRI শ্বেতপত্র - জুলাই 1998 (পিডিএফ 34 পৃষ্ঠায় 12) সেখানে বহুভুজ রেকর্ড বিষয়বস্তুর আলোচনা যা আপনি পরে কি হতে পারে হল:

বহুভুজের একাধিক বহিরাগত রিং থাকতে পারে। একটি রিংয়ের জন্য শীর্ষ বা ক্রম নির্দেশটি নির্দেশ করে যে রিংটির কোন দিকটি বহুভুজের অভ্যন্তর is


p.10 এ রয়েছে "একটি বহুভুজের একাধিক বহিরাগত রিং থাকতে পারে a
inc42

@ inc42 সেই অনুযায়ী আপডেট হয়েছে যদিও আমি মনে করি পৃষ্ঠার নম্বরটি 8 (বা 34 এর মধ্যে 12) হওয়া উচিত।
পলিজিও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.