मैं d3 में नया हूं - यह समझाने की कोशिश करूंगा कि मैं इसे कैसे समझता हूं लेकिन मुझे यकीन नहीं है कि मुझे सबकुछ सही मिला।
रहस्य यह जान रहा है कि कुछ तरीके कार्टोग्राफिक स्पेस (अक्षांश, देशांतर) और दूसरों को कार्टेशियन स्पेस (स्क्रीन पर x, y) पर संचालित करेंगे। कार्टोग्राफिक स्पेस (हमारा ग्रह) गोलाकार है (लगभग) गोलाकार, कार्टेशियन स्पेस (स्क्रीन) समतल है - क्रम में एक के ऊपर एक मैप करने के लिए आपको एक एल्गोरिथम की आवश्यकता होती है, जिसे प्रोजेक्शन कहा जाता है । यह स्थान अनुमानों के आकर्षक विषय में बहुत कम है और विमान में गोलाकार बारी करने के लिए वे भौगोलिक विशेषताओं को कैसे विकृत करते हैं; कुछ कोणों को संरक्षित करने के लिए डिज़ाइन किए गए हैं, अन्य लोग दूरी और इतने पर संरक्षण करते हैं - हमेशा एक समझौता होता है (माइक बोस्कॉक के पास उदाहरणों का एक बड़ा संग्रह है )।
डी 3 में, प्रोजेक्शन ऑब्जेक्ट में एक केंद्र संपत्ति / सेटर है, जो मानचित्र इकाइयों में दिया गया है:
projection.center ([स्थान])
यदि केंद्र निर्दिष्ट किया गया है, तो प्रक्षेपण के केंद्र को निर्दिष्ट स्थान पर सेट करें, एक दो-तत्व सरणी देशांतर और अक्षांश में डिग्री और प्रक्षेपण को लौटाता है। यदि केंद्र निर्दिष्ट नहीं है, तो वर्तमान केंद्र लौटाता है जो 00 °, 0 ° to से चूकता है।
पिक्सेल में दिया गया अनुवाद भी है - जहाँ प्रक्षेपण केंद्र कैनवास के सापेक्ष खड़ा है:
projection.translate ([बिंदु])
यदि बिंदु निर्दिष्ट है, तो प्रक्षेपण के अनुवाद को निर्दिष्ट दो-तत्व सरणी [x, y] पर सेट करता है और प्रक्षेपण को लौटाता है। यदि बिंदु निर्दिष्ट नहीं है, तो वर्तमान अनुवाद ऑफ़सेट को लौटाता है, जो कि चूक [480, 250] पर आ जाता है। अनुवाद ऑफसेट प्रक्षेपण के केंद्र के पिक्सेल निर्देशांक को निर्धारित करता है। डिफ़ॉल्ट अनुवाद ऑफ़सेट स्थानों को ,0 °, 0 ° × 960 × 500 क्षेत्र के केंद्र में रखता है।
जब मैं कैनवास में एक सुविधा को केंद्र में रखना चाहता हूं, तो मैं अपने देश (ब्राजील) के लिए व्यापारी (डब्ल्यूजीएस 84, गूगल मैप्स में इस्तेमाल) का उपयोग करते समय प्रक्षेपण केंद्र को फीचर बाउंडिंग बॉक्स के केंद्र में सेट करना पसंद करता हूं। अन्य अनुमानों और गोलार्द्धों का उपयोग करके कभी भी परीक्षण नहीं किया गया। आपको अन्य स्थितियों के लिए समायोजन करना पड़ सकता है, लेकिन यदि आप इन बुनियादी सिद्धांतों को कील करते हैं तो आप ठीक हो जाएंगे।
उदाहरण के लिए, एक प्रक्षेपण और पथ:
var projection = d3.geo.mercator()
.scale(1);
var path = d3.geo.path()
.projection(projection);
bounds
से विधि path
रिटर्न बाउंडिंग बॉक्स पिक्सल में । इसका उपयोग सही पैमाने खोजने के लिए करें, मानचित्र इकाइयों में आकार के साथ पिक्सेल में आकार की तुलना (0.95 आपको चौड़ाई या ऊंचाई के लिए सबसे अच्छा फिट पर 5% मार्जिन देता है)। मूल ज्यामिति यहाँ, आयत चौड़ाई / ऊंचाई की गणना तिरछे विरोध वाले कोनों से की जाती है:
var b = path.bounds(feature),
s = 0.9 / Math.max(
(b[1][0] - b[0][0]) / width,
(b[1][1] - b[0][1]) / height
);
projection.scale(s);
d3.geo.bounds
मानचित्र इकाइयों में बाउंडिंग बॉक्स को खोजने के लिए विधि का उपयोग करें :
b = d3.geo.bounds(feature);
बाउंडिंग बॉक्स के केंद्र के प्रक्षेपण का केंद्र निर्धारित करें:
projection.center([(b[1][0]+b[0][0])/2, (b[1][1]+b[0][1])/2]);
translate
मानचित्र के केंद्र को कैनवास के केंद्र में ले जाने के लिए विधि का उपयोग करें :
projection.translate([width/2, height/2]);
अब तक आपके पास 5% मार्जिन के साथ ज़ूम किए गए नक्शे के केंद्र में सुविधा होनी चाहिए।