আন্তর্জাতিক তারিখরেখা জুড়ে বহুভুজগুলি [-180 .. + 180 দ্রাঘিমাংশ]


10

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

চারপাশে swath মোড়ানো

আমি এর সাথে এটি সমাধান করতে সক্ষম হয়েছি ogr2ogr -wrapdateline:

ogr2ogr -wrapdateline  -f "ESRI Shapefile" test.shp orbits.shp

যা সম্ভবত লাইনগুলি বিভক্ত করে

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

ভরাট

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


অতিরিক্ত ধারণাগুলির জন্য gis.stackexchange.com/questions/429 এবং gis.stackex بدل . com/ questions / 18562 এ সম্পর্কিত থ্রেড দেখুন । অনুগ্রহপূর্বক gis.stackexchange.com/questions/17788 এ উপস্থাপন করা ধারণাগুলিও সহায়ক হতে পারে। আমি আশ্চর্য হই, যদিও আপনি "অভ্যন্তর" বলতে যা বোঝায়: এই বহুভুজগুলি সঠিকভাবে সংজ্ঞায়িত করা হয়নি, তাই সর্বনিম্ন আপনাকে তথ্য সরবরাহ করতে হবে যা নির্দেশ করে (ক) প্রতিটি পললাইনটির কোন দিকটি "অভ্যন্তর" হিসাবে বিবেচিত হয় এবং (খ) কীভাবে খুঁটি কাছাকাছি তাদের কাটা।
হুঁশিয়ারি

উত্তর:


3

সোয়াথের কেন্দ্রস্থলে আপনি একটি কাস্টম মরেটর প্রজেকশন তৈরি করতে পারেন। উদাহরণস্বরূপ, সোয়াথ 25 এর জন্য ব্যবহার করুন:

+proj=merc +lon_0=-140 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs

এই প্রক্ষেপণে, সোথগুলি ডেটলাইন দ্বারা ভেঙে যায় না। আপনি লাইন থেকে বহুভুজ তৈরি করতে পারেন।

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

তারপরে EPSG এ -179.95 ° E এবং 179.95 ° E এর মধ্যে একটি কাটা বহুভুজ তৈরি করুন: 4326:

Nr;WKT
1;POLYGON ((-179.95 89, 179.95 89, 179.95 -89, -179.95 -89, -179.95 89))

এটি আপনার কাস্টম সিআরএসেও পুনরায় প্রজেক্ট করুন এবং সোয়াথ বহুভুজ থেকে এটি বিয়োগ করুন।

EPSG: 4326 এ পুনরায় প্রজেক্ট করার পরে সোয়াতটি ডেটলাইন দ্বারা সঠিকভাবে বিভক্ত:

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

ডেটলাইনটি অতিক্রমকারী সমস্ত সোয়াথের সাথে চালিয়ে যান।


1

একই ধ্রুবক দ্রাঘিমাংশে শুরু করতে এবং শেষ করতে আমি সোয়েট লাইনের উত্পন্ন প্রক্রিয়াটি আবার লিখব। উদাহরণস্বরূপ, যদি একটি লাইন 170 at এ শুরু হয় এবং -170 finished এ শেষ হয় তবে আমি প্রক্রিয়াটি আবার লিখতে চাই -180,180 এ মোড়ানো না হয়ে 190 at এ শেষ হবে

তারপরে আপনি আপনার লাইনের মধ্যে অবিচ্ছিন্ন বহুভুজ তৈরি করতে পারেন।

তারপরে 180, -180 লাইনে বহুভুজকে বিভক্ত করতে একটি ক্লিপ প্রক্রিয়া ব্যবহার করুন এবং যথাযথভাবে 360 adding যোগ বা বিয়োগ করে -180,180 জায়গার বাইরে থাকা যে কোনও অংশটি স্থানান্তর করুন।

কোনও নির্দিষ্ট প্রজেকশন / ডেটাম দিয়ে সংরক্ষণ করার আগে এটি ঠিক হয়ে যায়


1

এই ধারণাটির জন্য @ আন্ড্রেজেকে ধন্যবাদ, এখানে জ্যাঙ্গো জিওএস এপিআই ব্যবহার করা একটি সহজ সমাধান যা কোনও কিছুর পুনরায় প্রকল্পের প্রয়োজন এড়ানো যায়:

1) একটি মাল্টিপলিগন তৈরি করুন যা তারিখরেখার সীমানা:

from django.contrib.gis.geos.collections import MultiPolygon, LinearRing, Polygon
box1 = ((180.0, 89), (179.95, 89), (179.95, -89), (180.0, -89), (180.0, 89))
box2 = ((-180.0, 89), (-179.95, 89), (-179.95, -89), (-180.0, -89), (-180.0, 89))
poly1 = Polygon(LinearRing(box1))
poly2 = Polygon(LinearRing(box2))
poly = MultiPolygon(poly1, poly2)

2) যদি আপত্তিজনক জ্যামিতি ছেদ করে তবে পার্থক্যটি ফিরিয়ে দিন:

from django.contrib.gis.geos.geometry import GEOSGeometry
geometry = GEOSGeometry(WKT)  # WKT is your polygon in WKT string format
if geometry.intersects(poly):
    print("Geometry crosses dateline... splitting")
    geometry = geometry.difference(poly) # clip with dateline polygon

ফলাফলগুলি নিম্নরূপ দেখানো হয়েছে:

আগে

পরে

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