Python Folium地图标记不显示在地图上,尽管有数据。

4

我有一段代码,是从实际数据科学食谱书中学来的,他们使用了folium和twitter来绘制twitter粉丝的地理位置。代码能正常运行,最后输出一个HTML文件,应该在地图上标记出你的粉丝所在位置。然而,我的地图没有任何标记,尽管已经有了数据。

以下是代码:

status_geo = []
status_geo_screen_names = []
for fp in friends_profiles:
    if ('status' in fp and fp['status']['geo'] is not None and 'screen_name' in fp):
        status_geo.append(fp['status']['geo'])
        status_geo_screen_names.append(fp['screen_name'])

print status_geo

输出结果: [{u'类型': u'点', u'坐标': [37.27647779,-121.98564579]}, {u'类型': u'点', u'坐标': [33.64158125,-84.43924375]}, {u'类型': u'点', u'坐标': [33.81747122,-116.52908589]}, {u'类型': u'点', u'坐标': [34.01340657,-118.17538228]}, {u'类型': u'点', u'坐标': [38.7974924,-76.1285375]}, {u'类型': u'点', u'坐标': [43.579385,-116.198543]}, {u'类型': u'点', u'坐标': [51.69102332,-0.41811924]}, {u'类型': u'点', u'坐标': [40.494286,-74.44376]}, {u'类型': u'点', u'坐标': [53.60089695,-113.49052185]}]

print status_geo_screen_names

输出: [u'TicaCoffee',u'sekouandrews',u'Kimtuitive',u'isalsa4u',u'ConsWahoo',u'cre8commongood',u'BrookeHRob',u'pedrohernandez',u'khueggen',u'DMCONCREPUMP',u'PhillipLeslie' ...]

import folium
from itertools import izip

#Let Folium determine the scale
map = folium.Map(location=[38, -120],zoom_start=3)

for sg, sn in izip(status_geo, status_geo_screen_names):
    map.simple_marker(sg['coordinates'], popup=str(sn))

map.create_map(path='us_states.html')

我们应该看到像这样的东西: 在此输入图片描述 但是我的地图没有任何标记,无论我在哪里查看或缩放: 在此输入图片描述
2个回答

3

我认为问题在于您不应该直接在浏览器中查看生成的HTML,因为它依赖于可能没有正确引用文件:///路径中外部JavaScript库。

尝试使用简单的Python服务器来提供该文件。

首先进入生成的HTML文件所在的目录。 $ cd /path/to/generated/html/file

$ python -m SimpleHTTPServer 8000

现在转到浏览器并输入http://localhost:8000/us_states.html(在您的情况下)

希望这有所帮助。


0
我最近编写了一些代码,可以将原始的 Twitter 数据转换成 CSV 文件,并包含用户名、经度和纬度信息,可以在 Google 地球上很好地打开。假设您已经有了原始的 Twitter 数据,您应该可以使用它。
import sys
import csv
import json

in_file = raw_input("File to read ex: 'C:\\Python27\\twitdata.txt': ")
out_file = raw_input("CSV file/location to write: ")
csvfile = file(out_file, "w")
csvwriter = csv.writer(csvfile)
row = [ "user", "latitude", "longitude" ]
csvwriter.writerow(row)
tweets_file = open(in_file, 'r')
for line in tweets_file:
try:
    tweet = json.loads(line)
    user = tweet['user']['screen_name']
    latitude = tweet["geo"]["coordinates"][0]
    longitude = tweet["geo"]["coordinates"][1]
    row = [ user, latitude, longitude ]
    csvwriter.writerow(row)
except:
    continue

print "done "
csvfile.close()    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接