2012-09-03 44 views
10

Tôi đang tìm cách vẽ các hình chữ nhật được tô đầy trên Bản đồ cơ sở. Tôi có thể dễ dàng vẽ các cạnh của hình chữ nhật bằng cách sử dụng phương pháp drawgreatcircle, nhưng tôi không thể tìm thấy cách để thực sự lấp đầy các hình chữ nhật này (chỉ định màu và alpha).Cách vẽ hình chữ nhật trên Bản đồ cơ sở

Trả lời

24

Bạn có thể thêm trực tiếp matplotlib.patches.Polygon() vào trục của mình. Câu hỏi đặt ra là liệu bạn có muốn các hình chữ nhật của bạn xác định tọa độ lô (các đường thẳng trên ô) hay trong các tọa độ bản đồ (các vòng tròn lớn trên ô). Dù bằng cách nào, bạn chỉ định các đỉnh trong tọa độ bản đồ và sau đó chuyển đổi chúng thành tọa độ lô bằng cách gọi bản đồ cơ sở (m() trong ví dụ bên dưới), tự tạo Polygon và thêm nó theo cách thủ công vào trục được hiển thị.

Đối với hình chữ nhật được định nghĩa trong âm mưu phối, đây là một ví dụ:

from mpl_toolkits.basemap import Basemap 
import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.patches import Polygon 

def draw_screen_poly(lats, lons, m): 
    x, y = m(lons, lats) 
    xy = zip(x,y) 
    poly = Polygon(xy, facecolor='red', alpha=0.4) 
    plt.gca().add_patch(poly) 

lats = [ -30, 30, 30, -30 ] 
lons = [ -50, -50, 50, 50 ] 

m = Basemap(projection='sinu',lon_0=0) 
m.drawcoastlines() 
m.drawmapboundary() 
draw_screen_poly(lats, lons, m) 

plt.show() 

Đối với hình chữ nhật quy định tại tọa độ bản đồ, sử dụng phương pháp tương tự, nhưng suy đường của bạn trong không gian bản đồ trước khi chuyển để vẽ tọa độ. Đối với mỗi đoạn thẳng, bạn sẽ phải làm:

lats = np.linspace(lat0, lat1, resolution) 
lons = np.linspace(lon0, lon1, resolution) 

Sau đó, chuyển đổi những bản đồ tọa độ để vẽ tọa độ (như trên, với m()) và một lần nữa tạo ra một Polygon với phối cốt truyện.

1

Câu trả lời tương tự ở trên, nhưng mã cơ bản hơn:

from mpl_toolkits.basemap import Basemap 
import matplotlib.pyplot as plt 
from matplotlib.patches import Polygon 

map = Basemap(projection='cyl') 

map.drawmapboundary(fill_color='aqua') 
map.fillcontinents(color='coral',lake_color='aqua') 
map.drawcoastlines() 

x1,y1 = map(-25,-25) 
x2,y2 = map(-25,25) 
x3,y3 = map(25,25) 
x4,y4 = map(25,-25) 
poly = Polygon([(x1,y1),(x2,y2),(x3,y3),(x4,y4)],facecolor='red',edgecolor='green',linewidth=3) 
plt.gca().add_patch(poly) 

plt.show() 
Các vấn đề liên quan