अच्छा सवाल। यह शायद कुछ ऐसा है जो समय-समय पर आ जाएगा, इसलिए मैं वास्तव में से पहले अपने विशिष्ट प्रश्न का उत्तर देने से पहले इस चरण-दर-चरण में जाऊंगा। भविष्य के संदर्भ के लिए, निम्नलिखित उदाहरण कार्टॉपी v0.5 के साथ लिखे गए थे।
सबसे पहले, यह ध्यान रखें कि डिफ़ॉल्ट "अक्षांश देशांतर" (या अधिक तकनीकी रूप से PlateCarree) प्रक्षेपण 180 -180 के आगे सीमा में काम करता है इसका मतलब यह है महत्वपूर्ण है कि आप नहीं कर सकते हैं साजिश इससे भी आगे मानक PlateCarree प्रक्षेपण । इसके लिए कई अच्छे कारण हैं, जिनमें से अधिकांश इस तथ्य को उबालते हैं कि कार्टॉपी को लॉट और अधिक काम करना होगा जब वेक्टर और रास्टर्स (उदाहरण के लिए सरल तटीय रेखाएं) पेश करते हैं। दुर्भाग्यवश जिस साजिश को आप उत्पादित करने की कोशिश कर रहे हैं वह निश्चित रूप से इस कार्यक्षमता की आवश्यकता है। चित्रों में इस सीमा को रखने के लिए, डिफ़ॉल्ट PlateCarree प्रक्षेपण लगता है:
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
proj = ccrs.PlateCarree(central_longitude=0)
ax1 = plt.axes(projection=proj)
ax1.stock_img()
plt.title('Global')
plt.show()
किसी भी एक आयत है कि आप इस नक्शे पर आकर्षित कर सकते हैं कानूनी तौर पर एक क्षेत्र में ज़ूम इन किया जा सकता है (वहाँ कुछ थोड़ा और अधिक उन्नत यहाँ कोड है, लेकिन तस्वीर एक 1000 शब्दों) के लायक है:
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import shapely.geometry as sgeom
box = sgeom.box(minx=-90, maxx=45, miny=15, maxy=70)
x0, y0, x1, y1 = box.bounds
proj = ccrs.PlateCarree(central_longitude=0)
ax1 = plt.subplot(211, projection=proj)
ax1.stock_img()
ax1.add_geometries([box], proj, facecolor='coral',
edgecolor='black', alpha=0.5)
plt.title('Global')
ax2 = plt.subplot(212, projection=proj)
ax2.stock_img()
ax2.set_extent([x0, x1, y0, y1], proj)
plt.title('Zoomed in area')
plt.show()
Unfort unately साजिश आप चाहते हैं इस प्रक्षेपण के साथ 2 आयतों की आवश्यकता होगी:
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import shapely.geometry as sgeom
box = sgeom.box(minx=120, maxx=260, miny=15, maxy=80)
proj = ccrs.PlateCarree(central_longitude=0)
ax1 = plt.axes(projection=proj)
ax1.stock_img()
ax1.add_geometries([box], proj, facecolor='coral',
edgecolor='black', alpha=0.5)
plt.title('Target area')
plt.show()
इसलिए यह एक ऐसा नक्शा डेटलाइन मानक PlateCarree परिभाषा का उपयोग को पार आकर्षित करने के लिए संभव नहीं है।इसके बजाय हम PlateCarree परिभाषा के केंद्रीय देशांतर बदलने एक बॉक्स अनुमति देने के लिए कर सकता है क्षेत्र हम लक्षित कर रहे हैं तैयार हो:
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import shapely.geometry as sgeom
box = sgeom.box(minx=120, maxx=260, miny=15, maxy=80)
x0, y0, x1, y1 = box.bounds
proj = ccrs.PlateCarree(central_longitude=180)
box_proj = ccrs.PlateCarree(central_longitude=0)
ax1 = plt.subplot(211, projection=proj)
ax1.stock_img()
ax1.add_geometries([box], box_proj, facecolor='coral',
edgecolor='black', alpha=0.5)
plt.title('Global')
ax2 = plt.subplot(212, projection=proj)
ax2.stock_img()
ax2.set_extent([x0, x1, y0, y1], box_proj)
plt.title('Zoomed in area')
plt.show()
उम्मीद है कि है कि आप पता चलता है कि यह आप क्या करना है है अपने लक्ष्य मानचित्र को प्राप्त करने के लिए, उपर्युक्त कोड आपके लक्ष्य को प्राप्त करने के लिए थोड़ा जटिल हो सकता है, इसलिए थोड़ा सा सरल बनाने के लिए, जो कोड मैं चाहता हूं उसे बनाने के लिए लिखने वाला कोड कुछ ऐसा होगा:
import cartopy.feature
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
ax = plt.axes(projection=ccrs.PlateCarree(central_longitude=180))
ax.set_extent([120, 260, 15, 80], crs=ccrs.PlateCarree())
# add some features to make the map a little more polished
ax.add_feature(cartopy.feature.LAND)
ax.add_feature(cartopy.feature.OCEAN)
ax.coastlines('50m')
plt.show()
यह एक लंबे जवाब था, उम्मीद है कि मैं है न केवल सवाल का जवाब है, लेकिन नक्शे उत्पादन के और अधिक जटिल विवरण में से कुछ बना दिया है और भविष्य के लिए अधिक किसी भी समस्याओं आप हो सकता है सरल बनाने में सहायता करने के लिए स्पष्ट cartopy।
चीयर्स,
बस सवाल, उपयोगकर्ता एक सरल "अक्षांश देशांतर" नक्शा के लिए कहा पर टिप्पणी करने से है, और एक गूगल मानचित्र है, जो मेरी राय में * नहीं * एक सरल "अक्षांश है का एक स्क्रीनशॉट प्रदान की गई है देशांतर "मानचित्र। तकनीकी रूप से, Google मानचित्र संलग्न गोलाकार मर्केटर प्रक्षेपण में है; मेरे जवाब में यह माना गया है कि उपयोगकर्ता का चित्रण उद्देश्यों के लिए साजिश का मतलब था और वास्तव में, सरल "अक्षांश देशांतर" का अर्थ इक्विप्रैंगुलर/प्लेट कैरी है। – pelson