আমি কীভাবে সারা বিশ্বে একটি পললাইন মোড়ানো করতে পারি?


14

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

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

আমি মনে করি এটি সম্ভবত ডেটলাইন এবং / অথবা সমন্বিত সিস্টেমগুলির সাথে সম্পর্কিত তবে বিশদটি সম্পর্কে কিছুটা স্কেচি chy এটি কাজ করতে আমার কী করা দরকার তার পিছনের তত্ত্বটি কি কেউ ব্যাখ্যা করতে পারেন? আমি নাসার কাছ থেকে নীলাচলা প্রজেকশনটি ব্যবহার করছি:

var bluemarble = new L.TileLayer.WMS("http://demo.opengeo.org/geoserver/wms", {
layers: 'bluemarble',
attribution: "Data © NASA Blue Marble, image service by OpenGeo",
minZoom: 2,
maxZoom: 5
});

2
আপনাকে + -180 ডিগ্রি মেরিডিয়ানে পললাইনটি ভাঙ্গতে হবে। এটির জন্য অক্ষাংশ সন্ধান করা দরকার যেখানে পললাইন সেই মেরিডিয়ানটি অতিক্রম করে। আপনার জিআইএসের সম্ভবত ব্রেকিং করার পদ্ধতি রয়েছে। যদি তা না হয় তবে একটি সম্পর্কিত সমাধান সম্পর্কিত থ্রেডে প্রদর্শিত কোড থেকে নেওয়া যেতে পারে । আপনি কি আপনার প্ল্যাটফর্মে এই জাতীয় কোড কার্যকর করতে সক্ষম?
whuber

আমি ঝাপটায় একমত বহুভুজ ক্রসিং + + 180 এর সাথে আমাকেও একই ধরণের কাজটি করতে হয়েছিল 180 প্রতিবার আপনি + -180 অতিক্রম করার সময় আপনাকে একাধিক পলিন / বহুভুজগুলিতে বিভক্ত করতে হবে।
স্টিভ

উত্তর:


13

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

  • একটি পললাইনটি উল্লম্বের ক্রম হিসাবে উপস্থাপিত হয় , প্রতিটি -180 <= দীর্ঘ <= 180 দিয়ে প্রতিটি (ল্যাট, লোন) আকারে দেওয়া হয় + এটি প্রতিটি +11 মেরিডিয়ান অতিক্রম করে কিনা তা জানতে প্রতিটি ধারাবাহিক যুগল পরীক্ষা করে দেখতে হবে। একটি দ্রুত পরীক্ষা আছে: দ্রাঘিমাংশের পার্থক্যের নিখুঁত মান যদি 180 বা তার বেশি হয় তবে একটি ক্রসিং রয়েছে।

  • প্রতিটি বিভাগের মধ্যে (ল্যাট 0, লোন0) -> (ল্যাট 1, লোন 1) যা + -180 মেরিডিয়ান অতিক্রম করে, আপনাকে পললাইনটি যেখানে দুটি ক্রস করবে সেখানে দুটি টুকরো টুকরো করতে হবে।

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

প্রশ্নের খণ্ডটি বিন্দু 0 থেকে (ল্যাট 0, লোন 0) 1 পয়েন্টে (ল্যাট 1, লোন 1) যেতে দিন। কার্টেসিয়ান স্থানাঙ্কগুলিতে প্রতিনিধিত্ব করে দুটি পয়েন্টের মধ্যে 3 ডি তে স্ট্রেট লাইন সেগমেন্ট চালিয়ে এবং y স্থানাঙ্কটি শূন্য কোথায় তা খুঁজে বের করে ব্রেক ব্রেকটি পাওয়া যাবে। কার্টিজিয়ান স্থানাঙ্ক হয়

(x0, y0, z0) = (cos(lon0)*sin(lat0), sin(lon0)*sin(lat0), cos(lat0))

1 এবং পয়েন্ট 1 এর জন্য (x1, y1, z1) অনুরূপ অভিব্যক্তি সমীকরণটি সমাধান করুন

t * y0 + (1-t) * y1 = 0

টি জন্য এটাই,

t = y1 / (y1 - y0).

চৌরাস্তার স্থানাঙ্কগুলি তাই

(x, y, z) = (t * x0 + (1-t) * x1, 0, t * z0 + (1-t) * z1)

এই বিন্দুটি (যা পৃথিবীর পৃষ্ঠের নীচে কোথাও + -180 মেরিডিয়ান এর নীচে অবস্থিত) এর সমান দ্রাঘিমাংশ রয়েছে

lat2 = ATan(z/x).

ব্রেক পয়েন্ট দুটি উপস্থাপন করা প্রয়োজন। ভাঙা পললাইনটির প্রথম অংশটি শেষ করতে (lat0, lon0) এর পরে এটি সংযুক্ত করার সময়, লোন0 নেতিবাচক হলে (লেট 2, -180) ব্যবহার করুন এবং অন্যথায় (লেট 2, 180) ব্যবহার করুন। ভাঙা পললাইনটির দ্বিতীয় অংশটি শুরু করার আগে এটি (ল্যাট 1, লোন 1) সংযুক্ত করার সময়, অনুরূপ নিয়ম অনুসরণ করুন।

ব্যতিক্রমী ক্ষেত্রে, পয়েন্ট 0 এবং পয়েন্ট 1 এর এক বা উভয়ই + -180 মেরিডিয়ানতে থাকতে পারে। এই প্রক্রিয়াটি অনুসরণ করা আপনার তৈরি পললাইন খণ্ডগুলির একটিতে শূন্য দৈর্ঘ্যের বিভাগ স্থাপন করবে। এটি যদি জিআইএস-এ কোনও সমস্যা তৈরি করতে পারে তবে এই শর্তটি পরীক্ষা করুন।

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


1
ভুবার যা বলেছিল তা ঠিক আছে তবে আমি মনে করি নিম্নলিখিত বাক্যটিতে টাইপো রয়েছে:> ভাঙা> পললাইনটির প্রথম অংশটি শেষ করতে (lat0, lon0) এর পরে এটি সংযুক্ত করার সময়, ল্যাট0 negativeণাত্মক হলে এবং (lat2, -180) ব্যবহার করুন অন্যথায় (lat2, 180) ব্যবহার করুন। আমি মনে করি এটি অবশ্যই হবে:> লোন0 নেতিবাচক হলে অন্যথায় (ল্যাট 2, -180) ব্যবহার করুন (ল্যাট 2, 180)
জর্জি

@ জর্জি এটি ধরার জন্য ধন্যবাদ; আমি মনে করি আপনি ঠিক আছেন এবং আমি এই পরিবর্তনটি করব।
whuber

আমাকে এটি লিফলেট.জেজে প্রয়োগ করতে হয়েছিল, আমার কোডটি এখানে: gist.github.com/mikeatlas/0b69b354a8d713989147
মাইক অ্যাটলাস

ধন্যবাদ, মাইক। আমি জিগ-জাগ চিত্রটি পছন্দ করি: আমি এই উত্তরটি লেখার সময় ঠিক এমনই পরিস্থিতিটির কথা ভাবছিলাম। আপনি যদি সত্যই তীব্র পরীক্ষা করতে চান তবে দেখুন যে পললাইনটি ঘটে যা স্বয়ং + -180 ডিগ্রি মেরিডিয়ান বরাবর চলে (এবং উভয় মেরুটি অতিক্রম করে)!
whuber

@ হুবুহু আমাকে কেবল এটি চেষ্টা করতে হবে: / ফলাফল পোস্ট করবে
মাইক অ্যাটলাস

0

সম্পর্কিত আলোচনার জন্য, সম্ভবত এই টিকিট আকর্ষণীয়:

"মোড়ক সীমানা সম্পর্কে ভেক্টর অভিক্ষেপ বিভক্ত"

https://trac.osgeo.org/grass/ticket/1527

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