【发布时间】:2010-12-06 15:18:58
【问题描述】:
我需要一个库(最好用 Python 编写),它能够获取一系列 IP 地址(或地理坐标)并将它们绘制在世界地图上。
我已经找到this one,但是它以.svg 文件的形式输出数据,它根本无法处理大型数据集。
请注意,我需要可以下载并在本地运行的东西,因此没有数据上传到 3rd 方网络服务。
谢谢!
【问题讨论】:
标签: python geolocation maps plot
我需要一个库(最好用 Python 编写),它能够获取一系列 IP 地址(或地理坐标)并将它们绘制在世界地图上。
我已经找到this one,但是它以.svg 文件的形式输出数据,它根本无法处理大型数据集。
请注意,我需要可以下载并在本地运行的东西,因此没有数据上传到 3rd 方网络服务。
谢谢!
【问题讨论】:
标签: python geolocation maps plot
正如其他人所提到的,您可以获取位置并编写一些代码将它们放在地图上,但还有一种更简单的方法可以做到这一点。
您可以使用 IPInfo 的免费 Map IPs 工具,该工具将创建 IP 地址的交互式地图。这是AWS IP Ranges 的示例。
您可以复制/粘贴 IP 或通过 cURL 使用该工具。它将处理多达 50 万个 IP。
$ cat ipList | curl -XPOST --data-binary @- "ipinfo.io/map?cli=1"
免责声明:我在 IPInfo 工作。
【讨论】:
我最近使用了gmplot。
只需安装它
pip install gmplot
它非常易于使用。您所要做的就是插入经度和纬度值,gmplot 会以 html 格式输出地图。
这是一个最小的例子。让lat_values 和lon_values 成为纬度和经度值的列表。
from gmplot import gmplot
import numpy as np
center_lat = np.mean(lat_values)
center_lon = np.mean(lon_values)
zoom = 15
gmap = gmplot.GoogleMapPlotter(center_lat, center_lon, zoom)
gmap.scatter(lat_values, lon_values)
gmap.draw('my_map.html')
就是这样!当然,您可以调整参数以增强视觉效果。请参阅crash course here。
【讨论】:
您可能想看看mapsplotlib。
只有 Python 2.7!
$ pip install mapsplotlib
$ pip install pandas
然后,您需要拥有一个 Google 静态地图 API 密钥,转至 https://console.developers.google.com
import pandas as pd
from mapsplotlib import mapsplot as mplt
df = pd.read_csv("data.csv")
mplt.register_api_key('your_google_api_key_here')
mplt.density_plot(df['latitude'], df['longitude'])
【讨论】:
也许Basemap in Matplotlib 用于绘图。
它可以做各种projections(不要介意丑陋的默认颜色)。而且你可以很好地控制你绘制的内容/方式。你甚至可以使用NASA Blue Marble imagery。当然,您还可以在地图上绘制标记、线条等using the plot command。
我没有通过它放置大量数据集,但由于它是 Matplotlib 的一部分,我怀疑它会做得很好。
如果我没记错的话,尽管它是库的一部分,但默认情况下它不附带 Matplotlib。
【讨论】:
如果您愿意设置本地网络环境进行测试,谷歌地图 API 可以支持上述所有内容。 Python 的 API 有一个包装器,名为 pymaps。
API 文档中有一个示例,说明如何使用 Google 的地理编码器在给定特定输入地址的地图上绘制点:
【讨论】: