Проблема с маркировкой нанесенных точек на Базовой карте - PullRequest
0 голосов
/ 01 февраля 2019

Я строю координаты самолета по широте и долготе, используя Базовую карту с анимацией для обновления карты.Я также хочу отметить участки с идентификатором рейса.Позиции данных считываются из текстового файла, который постоянно обновляется.Для этого поста я заменил текстовый файл на «position_data», и идентификатор рейса исправлен, но результат точно такой же.Если я закомментирую строку plt.text, точки будут построены правильно, но если я включу эту строку, я получу ошибку «Аргумент TypeError: float () должен быть строкой или числом» Uncommenting x2 = 3000000 и y2 = 3000000 отображает обаточки и метки (хотя и не в том месте, так как это всего лишь тест на маркировку). Любая помощь в решении этой проблемы будет принята, поскольку Python и карты являются новыми для меня.

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
import os.path
import matplotlib.animation as animation
my_map = Basemap(projection='merc',llcrnrlat = 20,llcrnrlon = -100,urcrnrlat = 60,
            urcrnrlon = 20,resolution='l')       
my_map.drawcoastlines()
my_map.drawcountries()
my_map.fillcontinents(color = '#D2FFC4')
my_map.drawmapboundary()
my_map.drawparallels(np.arange(10,90,20),labels=[1,1,0,1])
my_map.drawmeridians(np.arange(-180,180,30),labels=[1,1,0,1])
x1=[]
y1=[]


x2,y2 = my_map(0, 0)
point = my_map.plot(x2, y2, 'r.', markersize=1)[0]

def init():
    point.set_data([], [])
    return point,

def get_position():

    position_data= ['10.18,50.7\n', '8.6,49.9\n','5.0,52.7\n', '4.7,52.36\n', '11.1,56.58\n' ]
    #print position_data  #debug
    for line in position_data:
       if len(line)>0:
           x,y=line.split(',')
           #print x,y    #debug
           x1.append(float(x))
           y1.append(float(y))
    #print x1,y1     #debug   
    return x1,y1

# animation function.  
def animate(i):

    get_position()

    x2,y2=my_map(x1,y1,inverse=False)

    #x2=3000000
    #y2=3000000
    #print x2
    plt.text(x2, y2, 'AB123',fontsize=6,fontweight='bold', ha='left',va='bottom',color='r')

    point.set_data(x2, y2)
    return point,

# call the animator.
anim = animation.FuncAnimation(plt.gcf(), animate, init_func=init,
                              frames=200, interval=1000, blit=False)
plt.show()

Спасибо за полезнуюсовет.Я путал списки с переменными!Исправленный и рабочий код теперь:

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
import os.path
import matplotlib.animation as animation
my_map = Basemap(projection='merc',llcrnrlat = 20,llcrnrlon = -100,urcrnrlat = 60,
            urcrnrlon = 20,resolution='l')       
my_map.drawcoastlines()
my_map.drawcountries()
my_map.fillcontinents(color = '#D2FFC4')
my_map.drawmapboundary()
my_map.drawparallels(np.arange(10,90,20),labels=[1,1,0,1])
my_map.drawmeridians(np.arange(-180,180,30),labels=[1,1,0,1])
x1=[]
y1=[]
idx=0
ids=[]
p=0
position_data=[]
x2,y2 = my_map(0, 0)
point = my_map.plot(x2, y2, 'r.', markersize=1)[0]

def init():
    point.set_data([], [])
    return point,

def get_position():

    position_data= ['10.18,50.7,ab123\n', '8.6,49.9,bc234\n','5.0,52.7,cd456\n', '4.7,52.36,ef678\n', '11.1,56.58,gh789\n' ]
    global idx
    idx=0
    for line in position_data:
       if len(line)>0:
           x,y,id=line.split(',')
           print x,y,id    #debug
           x1.append(float(x))
           y1.append(float(y))
           ids.append(id)
           idx=idx+1
    #print idx            #debug
    #print x1,y1,ids      #debug
    return 


# animation function.  
def animate(i):
    get_position()
    x2,y2=my_map(x1,y1,inverse=False)

    #print idx
    point.set_data(x2, y2)
    for p in range(idx):
         plt.text(x2[p],y2[p],ids[p],fontsize=7,ha='left',va='bottom',color='k')

   # point.set_data(x2, y2)
    del x1[:]  # or lists grow every loop!
    del y1[:]
    del ids[:]
    return point,

# call the animator.
anim = animation.FuncAnimation(plt.gcf(), animate, frames=20, interval=1000, blit=False)
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...