d3.js
डी 3 अनुमान
खोज…
व्यापारी अनुमान
एक मर्केटर प्रोजेक्शन मानचित्रों में उपयोग किए जाने वाले सबसे पहचानने योग्य अनुमानों में से एक है। सभी मानचित्र अनुमानों की तरह इसमें विकृति है और एक मर्केटर के लिए, ध्रुवीय क्षेत्रों में प्रक्षेपण सबसे अधिक ध्यान देने योग्य है। यह एक बेलनाकार प्रक्षेपण है, मेरिडियन लंबवत रूप से चलते हैं और अक्षांश क्षैतिज रूप से चलते हैं।
स्केल आपके svg के आकार पर निर्भर करता है, इस उदाहरण के लिए, उपयोग किए जाने वाले सभी तराजू 960 पिक्सेल चौड़े 450 पिक्सेल उच्च svg द्वारा विस्तृत हैं।
नीचे दिया गया नक्शा एक मर्केटर प्रोजेक्शन के लिए एक टिसॉट इंडिकेट्रिक्स को दर्शाता है, प्रत्येक सर्कल वास्तव में एक ही आकार का है लेकिन प्रक्षेपण स्पष्ट रूप से कुछ को दूसरों की तुलना में बड़ा दिखाता है:
यह विकृति इसलिए है क्योंकि प्रक्षेपण नक्शे के एक आयामी खिंचाव से बचने की कोशिश करता है। जैसे ही उत्तर और दक्षिण ध्रुवों पर मध्याह्न मिलाना शुरू होता है, उनके बीच की दूरी शून्य के करीब पहुंचने लगती है, लेकिन प्रक्षेपण की सतह आयताकार होती है (मानचित्र नहीं, हालांकि यह भी आयताकार है) और दूरी में बदलाव की अनुमति नहीं देता है प्रक्षेपण में मध्याह्न के बीच। यह डंडे के पास एक्स अक्ष के साथ सुविधाओं को फैलाएगा, उनके आकार को विकृत करेगा। इसका मुकाबला करने के लिए, एक मर्केटर y अक्ष को खींचता है और साथ ही एक ध्रुव के पास जाता है, जो संकेतक को गोलाकार बनाता है।
ऊपर दिए गए मानचित्र के लिए प्रक्षेपण अनिवार्य रूप से डिफ़ॉल्ट मर्केटर प्रक्षेपण थोड़ा ऊपर स्थानांतरित कर दिया गया है:
var projection = d3.geoMercator()
.scale(155)
.center([0,40]) // Pan north 40 degrees
.translate([width/2,height/2]);
किसी ज्ञात अक्षांश और ज्ञात देशांतर के साथ दिए गए बिंदु पर प्रक्षेपण को केंद्रित करने के लिए, आप केंद्र को निर्दिष्ट करके उस बिंदु पर आसानी से पैन कर सकते हैं:
var projection = d3.geoMercator()
.center([longitude,latitude])
यह अनुमानित सुविधा पर उस सुविधा (लेकिन ज़ूम नहीं) पर पैन करेगा (जो ऊपर दिए गए नक्शे जैसा दिखता है)।
तराजू को ब्याज के क्षेत्र के अनुरूप बनाना होगा, बड़ी संख्या एक बड़ी सुविधाओं के बराबर (अधिक से अधिक ज़ूमिंग में), छोटी संख्याओं के विपरीत। ज़ूम आउट करना आपके बियरिंग्स को देखने का एक अच्छा तरीका हो सकता है, जहाँ आपकी सुविधाएँ उस बिंदु के सापेक्ष होती हैं, जिस पर आप केन्द्रित हैं - यदि आपको उन्हें खोजने में समस्या हो रही है।
एक मर्केटर प्रोजेक्शन की प्रकृति के कारण, इस तरह के प्रक्षेपण के साथ भूमध्य रेखा के पास या कम अक्षांश पर क्षेत्र सबसे अच्छा करेंगे, जबकि ध्रुवीय क्षेत्र अत्यधिक विकृत हो सकते हैं। विरूपण किसी भी क्षैतिज रेखा के साथ होता है, इसलिए जो क्षेत्र विस्तृत हैं, लेकिन लंबे नहीं हैं वे भी अच्छे हो सकते हैं, जबकि ऐसे क्षेत्र जिनके उत्तरी और दक्षिणी छोरों के बीच एक बड़ा अंतर है, उनमें दृश्य विकृति अधिक है।
भारत के लिए, उदाहरण के लिए, हम उपयोग कर सकते हैं:
var projection = d3.geoMercator()
.scale(800)
.center([77,21])
.translate([width/2,height/2]);
जो हमें (फिर से एक टिशोट के संकेत के साथ विरूपण दिखाने के लिए) देता है:
इसमें विरूपण का एक निम्न स्तर है, लेकिन मंडलियां काफी हद तक एक ही आकार की हैं (आप नीचे की दो पंक्तियों की तुलना में शीर्ष दो पंक्तियों के बीच अधिक ओवरलैप देख सकते हैं, इसलिए विरूपण दिखाई देता है)। हालांकि कुल मिलाकर, मानचित्र भारत के लिए एक परिचित आकृति को दर्शाता है।
क्षेत्र में विकृति रैखिक नहीं है, यह ध्रुवों की ओर अत्यधिक अतिरंजित है, इसलिए कनाडा उत्तरी और दक्षिणी चरम सीमाओं के साथ काफी दूर है और ध्रुवों के काफी निकट स्थिति का अर्थ है कि विरूपण अस्थिर हो सकता है:
var projection = d3.geoMercator()
.scale(225)
.center([-95,69.75])
.translate([width/2,height/2]);
यह प्रक्षेपण कनाडा के रूप में ग्रीनलैंड को बड़ा बनाता है, जब वास्तव में कनाडा ग्रीनलैंड से लगभग पांच गुना बड़ा होता है। यह केवल इसलिए है क्योंकि ग्रीनलैंड कनाडा के थोक से अधिक उत्तर में है (क्षमा करें ओन्टारियो, मुझे लगता है कि आपके कुछ दक्षिणी छोर काट दिए गए हैं)।
चूँकि एक अक्षीय में खंभे के पास y अक्ष काफी फैला हुआ है, इसलिए यह प्रक्षेपण कनाडा के भौगोलिक केंद्र के उत्तर में एक बिंदु का उपयोग करता है। यदि उच्च अक्षांश क्षेत्रों से निपटने के लिए आपको इस स्ट्रेचिंग के लिए अपने केंद्र बिंदु को दर्जी बनाने की आवश्यकता हो सकती है।
यदि आपको ध्रुवीय क्षेत्रों के लिए मर्केटर प्रोजेक्शन की आवश्यकता है, तो एक तरीका है जिससे आप विकृति को कम कर सकते हैं और फिर भी एक मर्केटर प्रोजेक्शन का उपयोग कर सकते हैं। आप दुनिया को घुमाकर इसे हासिल कर सकते हैं। यदि आप डिफ़ॉल्ट मर्केटर पर x अक्ष को घुमाते हैं, तो आप इसे बाएं या दाएं पैन करने के लिए दिखाई देंगे (आप बस सिलेंडर में ग्लोब को स्पिन करते हैं जो आप पर प्रोजेक्ट कर रहे हैं), यदि आप डिफ़ॉल्ट मर्सर के y अक्ष को बदलते हैं, तो आप कर सकते हैं पृथ्वी को बग़ल में या किसी अन्य कोण पर मोड़ें। यहाँ -90 डिग्री के रोटेशन के साथ एक मर्केटर है:
var projection = d3.geoMercator()
.scale(155)
.rotate([0,-90]);
.translate([width/2,height/2]);
सिग्नलैट्रिक्स पॉइंट ऊपर के पहले मैप के समान स्थानों में हैं। नक्शे के ऊपर या नीचे पहुंचने के बाद भी विकृति बढ़ती है। यदि कोई पृथ्वी पृथ्वी पर उत्तरी ध्रुव [0,0] और एक दक्षिणी ध्रुव [180,0] पर घूमती है तो यह एक डिफ़ॉल्ट मर्केटर मैप दिखाई देगा, रोटेशन ने सिलेंडर को बदल दिया है जिसे हम 90 डिग्री के सापेक्ष प्रक्षेपित कर रहे हैं ध्रुव। ध्यान दें कि कैसे ध्रुवों में अब अस्थिर विरूपण नहीं है, यह क्षेत्र में बहुत अधिक विरूपण के बिना ध्रुवों के पास परियोजना क्षेत्रों के लिए एक वैकल्पिक तरीका प्रस्तुत करता है।
कनाडा को फिर से एक उदाहरण के रूप में उपयोग करते हुए, हम मानचित्र को एक केंद्र समन्वय के लिए घुमा सकते हैं, और यह क्षेत्र में विकृति को कम करेगा। ऐसा करने के लिए हम फिर से एक केंद्र बिंदु पर घूम सकते हैं, लेकिन इसके लिए एक अतिरिक्त कदम की आवश्यकता होती है। हम एक सुविधा के लिए पैन के साथ, रोटेशन के साथ हम पृथ्वी को हमारे नीचे ले जाते हैं, इसलिए हमें अपने केंद्र समन्वय के नकारात्मक की आवश्यकता है:
var projection = d3.geoMercator()
.scale(500)
.rotate([96,-64.15])
.translate([width/2,height/2]);
ध्यान दें कि टिसोट का संकेत क्षेत्र अब कम विकृति दिखा रहा है। स्केल फैक्टर भी पहले की तुलना में बहुत बड़ा है, क्योंकि यह कनाडा अब प्रक्षेपण के मूल में है, और मानचित्र सुविधाओं के मध्य में ऊपर या नीचे की तुलना में छोटा है (ऊपर पहला संकेत दे देखें)। हमें केंद्र की आवश्यकता नहीं है क्योंकि इस प्रक्षेपण का केंद्र बिंदु या उत्पत्ति [-96,64.15]
, केंद्र बिंदु हमें इस बिंदु से दूर ले जाएगा।
Albers अनुमान
एक Albers प्रक्षेपण, या अधिक ठीक से, एक Albers बराबर क्षेत्र शंकु प्रक्षेपण, एक सामान्य शंक्वाकार प्रक्षेपण और अमेरिका के जनगणना ब्यूरो और कनाडा में ब्रिटिश कोलंबिया के प्रांत जैसे कई न्यायालयों और संगठनों के एक आधिकारिक प्रेजेकिटोन है। यह आकार, कोण और दूरी जैसे नक्शे के अन्य पहलुओं की कीमत पर क्षेत्र को संरक्षित करता है।
सामान्य विशेषता
सामान्य परिवर्तन निम्नलिखित gif में कैप्चर किया गया है:
(माइक बेस्कोक के ब्लॉक पर आधारित)
एल्बर्स प्रोजेक्शन दो मानक समानताएं के आसपास विकृति को कम करता है। ये समानताएँ यह दर्शाती हैं कि शंक्वाकार प्रक्षेपण पृथ्वी की सतह को कैसे काटता है।
इस उदाहरण के लिए, सभी पिक्सेल का उपयोग 960 पिक्सेल चौड़े 450 पिक्सेल उच्च svg आयामों के साथ किया जाता है, इन आयामों के साथ पैमाने बदल जाएंगे
नीचे दिए गए नक्शे में 10 और 20 डिग्री उत्तर के मानक समानताएं के साथ अलियर्स प्रक्षेपण के लिए एक टिसॉट इंडिकेट्रिक्स दिखाया गया है। प्रत्येक सर्कल वास्तव में एक ही आकार और आकार में है, लेकिन नक्शा प्रक्षेपण आकार (नहीं क्षेत्र) में इन्हें विकृत करेगा। ध्यान दें कि लगभग 10 से 20 डिग्री उत्तर में, संकेतक अन्य जगहों की तुलना में गोल हैं:
यह निम्नलिखित प्रक्षेपण के साथ बनाया गया था:
var projection = d3.geoAlbers()
.scale(120)
.center([0,0])
.rotate([0,0])
.parallels([10,20])
.translate([width/2,height/2]);
यदि हम समानताएं का उपयोग करते हैं कि उच्च ऊंचाई में, प्रक्षेपण में उठने की डिग्री बढ़ जाती है। निम्नलिखित चित्र 50 और 60 डिग्री उत्तर की समानता का उपयोग करते हैं:
var projection = d3.geoAlbers()
.scale(120)
.center([0,70]) // shifted up so that the projection is more visible
.rotate([0,0])
.parallels([40,50])
.translate([width/2,height/2]);
यदि हमारे पास नकारात्मक (दक्षिणी) समानताएं हैं, तो नक्शे को ऊपर की बजाय नीचे ले जाना चाहिए। यदि एक समानांतर उत्तर और एक दक्षिण है, तो मानचित्र उच्च / अधिक चरम समानांतर की ओर अवतल होगा, यदि वे भूमध्य रेखा से समान दूरी पर हैं तो मानचित्र किसी भी दिशा में अवतल नहीं होगा।
समानताएं चुनना
जैसा कि समानताएं कम से कम विकृति वाले क्षेत्रों को चिह्नित करती हैं, उन्हें आपकी रुचि के क्षेत्र के आधार पर चुना जाना चाहिए। यदि आपकी रुचि का क्षेत्र 10 डिग्री उत्तर से 20 डिग्री उत्तर तक फैला है, तो 13 और 17 के समानताएं चुनने से आपके नक्शे में विकृति कम हो जाएगी (जैसा कि इन समानताएं के दोनों ओर विरूपण न्यूनतम है)।
समानताएं आपके हित के क्षेत्र की चरम उत्तरी और दक्षिणी सीमा नहीं होनी चाहिए। समानताएं दोनों का एक ही मूल्य हो सकता है यदि आप केवल एक बार पृथ्वी की सतह को भेदने के लिए प्रक्षेपण चाहते हैं।
प्रोजेक्शन संदर्भों और परिभाषाओं में समानांतर डेटा शामिल हैं जिन्हें आप मानकीकृत अनुमानों को फिर से बनाने के लिए उपयोग कर सकते हैं।
केन्द्रित करना और घुमाना
एक बार समानताएं चुने जाने के बाद, मानचित्र को तैनात किया जाना चाहिए ताकि ब्याज का क्षेत्र ठीक से संरेखित हो। यदि केवल projection.center([x,y])
, तो मानचित्र को केवल चयनित बिंदु पर ही प्रतिबंधित किया जाएगा और कोई अन्य परिवर्तन नहीं होगा। यदि लक्ष्य क्षेत्र रूस है, तो पैनिंग आदर्श नहीं हो सकती है:
var projection = d3.geoAlbers()
.scale(120)
.center([0,50]) // Shifted up so the projection is more visible
.rotate([0,0])
.parallels([50,60])
.translate([width/2,height/2]);
एक अल्बर्स प्रक्षेपण का केंद्रीय मध्याह्न रेखा लंबवत है, और हमें केंद्रीय मध्याह्न परिवर्तन के लिए प्रक्षेपण के तहत पृथ्वी को घुमाने की आवश्यकता है। एक अल्बर्ट के प्रक्षेपण के लिए रोटेशन, एक्स अक्ष (या देशांतर) पर एक प्रक्षेपण को केंद्रित करने की विधि है। और जैसा कि पृथ्वी प्रक्षेपण के नीचे घूम रही है, हम उस देशांतर का उपयोग करते हैं जिसे हम केंद्रित करना चाहते हैं। रूस के लिए, यह लगभग 100 डिग्री पूर्व हो सकता है, इसलिए हम ग्लोब को 100 डिग्री दूसरे तरीके से स्पिन करेंगे।
var projection = d3.geoAlbers()
.scale(120)
.center([0,60])
.rotate([-100,0])
.parallels([50,60])
अब हम ऊपर और नीचे पैन कर सकते हैं और केंद्रीय मध्याह्न रेखा के साथ और उसके आस-पास की विशेषताएं ईमानदार होंगी। यदि आप x अक्ष पर .center()
, तो आपकी सेंटरिंग रोटेशन द्वारा निर्धारित केंद्रीय मध्याह्न के सापेक्ष होगी । रूस के लिए हम एक निष्पक्ष उत्तर को पैन और थोड़ा सा ज़ूम करना चाहते हैं:
var projection = d3.geoAlbers()
.scale(500)
.center([0,65])
.rotate([-100,0])
.parallels([50,60])
रूस जैसी सुविधा के लिए, मानचित्र के आर्च का अर्थ है कि देश के दूर के किनारे, ध्रुव के चारों ओर फैले होंगे, जिसका अर्थ है कि केंद्र बिंदु आपकी सुविधा का केंद्रक नहीं हो सकता है क्योंकि आपको अधिक पैन करने की आवश्यकता हो सकती है। उत्तर या दक्षिण सामान्य से अधिक।
Tissots Indicatrix के साथ, हम पोल के पास कुछ समतल देख सकते हैं, लेकिन यह आकार ब्याज के क्षेत्र में काफी हद तक सही है (याद रखें कि रूस के आकार के लिए, विरूपण काफी कम है, यह छोटी सुविधाओं के लिए बहुत कम होगा:
डिफ़ॉल्ट पैरामीटर
अधिकांश अन्य अनुमानों के विपरीत, d3.geoAlbers प्रोजेक्शन डिफ़ॉल्ट मापदंडों के साथ आता है जो कि .rotate ([0,0]) और .center ([0,0]) नहीं हैं, डिफ़ॉल्ट प्रोजेक्शन संयुक्त राज्य के लिए केंद्रित और घुमाया जाता है। यह .parallels()
का भी सच है। इसलिए यदि इनमें से कोई भी सेट नहीं किया जाता है, तो वे गैर शून्य मानों के लिए डिफ़ॉल्ट होंगे।
सारांश
एक अल्बर्स प्रोजेक्शन आम तौर पर निम्नलिखित मापदंडों के साथ निर्धारित किया जाता है:
var projection = d3.geoAlbers()
.rotate([-x,0])
.center([0,y])
.parallels([a,b]);
जहां ए और बी दोनों समानताएं बराबर हैं।
अजीमुथल इक्विडिस्टेंट प्रोजेक्ट्स
सामान्य विशेषता:
ध्रुवीय क्षेत्रों में उपयोग किए जाने पर एक अजीमुथल इक्विडिस्टेंट प्रोजेक्शन को सबसे अच्छा पहचाना जाता है। इसका उपयोग संयुक्त राष्ट्र के प्रतीक में किया जाता है। केंद्र बिंदु से, कोण और दूरी संरक्षित हैं। लेकिन प्रक्षेपण इसे प्राप्त करने के लिए आकार और क्षेत्र को विकृत कर देगा, विशेष रूप से एक केंद्र से आगे बढ़ता है। इसी तरह, केंद्र के अलावा अन्य स्थानों में दूरी और कोण सही नहीं हैं। प्रक्षेपण अज़ीमुथल श्रेणी (बेलनाकार (मर्केटर) या शंकु) (अलबर्स) के बजाय गिरता है। यह प्रक्षेपण एक डिस्क के रूप में पृथ्वी को प्रोजेक्ट करता है:
(माइक बोस्कोक के ब्लॉक पर आधारित। उत्तरी ध्रुव पर केंद्रित है, एक बार देखे गए चित्र के शीर्ष पर त्रिकोणीय विरूपण साक्ष्य को अनदेखा करें )
स्केल आपके svg के आकार पर निर्भर करता है, इस उदाहरण के लिए, उपयोग किए जाने वाले सभी पैमाने 960 पिक्सेल चौड़े 450 पिक्सेल उच्च svg द्वारा चौड़े होते हैं (और जहां आवश्यक हो) एक वर्ग के लिए स्क्रीन को क्लिप किया जाता है - जब तक कि अन्यथा निर्दिष्ट न हो।
नीचे दिए गए नक्शे में एक अज़ीमुथल इक्विडिस्टेंट प्रक्षेपण के लिए एक टिसॉट इंडिकेट्रिक्स दिखाया गया है:
यह निम्नलिखित प्रक्षेपण के साथ बनाया गया था:
var projection = d3.geoAzimuthalEquidistant()
.scale(70)
.center([0,0])
.rotate([0,0])
.translate([width/2,height/2]);
केंद्रित और घूर्णन:
केंद्र केवल एक नक्शा पैन करेगा लेकिन इसकी समग्र संरचना को नहीं बदलेगा। अन्य ध्रुवों को अपरिवर्तित या शून्य पर छोड़ते हुए उत्तरी ध्रुव पर अजीमुथल समतुल्य केंद्रित करना, उत्तरी ध्रुव को स्क्रीन के केंद्र में ले जाएगा - लेकिन अन्यथा ऊपर का नक्शा नहीं बदलेगा।
किसी क्षेत्र को ठीक से केन्द्रित करने के लिए, आपको इसे घुमाने की आवश्यकता है। डी 3 में किसी भी घुमाव के साथ, इसे प्रक्षेपण के तहत पृथ्वी को स्थानांतरित करने के रूप में सोचना सबसे अच्छा है, इसलिए पृथ्वी के -90 डिग्री को वाई अक्ष पर नक्शे के नीचे घुमाने से वास्तव में उत्तरी ध्रुव को बीच में रखा जाएगा:
var projection = d3.geoAzimuthalEquidistant()
.scale(70)
.center([0,0])
.rotate([0,-90])
.translate([width/2,height/2]);
इसी तरह, एक्स अक्ष पर रोटेशन इसी तरह व्यवहार करता है। उदाहरण के लिए, नक्शे को घुमाने के लिए जैसे कि कनाडाई आर्कटिक सीधा है, उत्तरी ध्रुव पर केंद्रित है, हम इस तरह के एक प्रक्षेपण का उपयोग कर सकते हैं:
var projection = d3.geoAzimuthalEquidistant()
.scale(400)
.center([0,0])
.rotate([100,-90])
.translate([width/2,height/2]);
इस मानचित्र में 600x600 svg का उपयोग किया गया था
कुल मिलाकर, यह सरलता अज़ीमुथल समतावादी को सेट करने के लिए एक आसान प्रक्षेपण बनाती है, बस रोटेशन का उपयोग करें। एक विशिष्ट प्रक्षेपण की तरह दिखेगा:
var projection = d3.geoProjection()
.center([0,0])
.rotate([-x,-y])
.scale(k)
.translate([width/2,height/2]);