在世界地图上绘制GeoIP数据

12
我需要一款库(最好用Python编写),能够将一系列IP地址(或地理坐标)绘制在世界地图上。
我已经找到了这个,但它输出的数据是.svg格式的文件,而且无法处理大量数据集。
请注意,我需要能够在本地下载和运行的东西,因此不要上传数据到第三方Web服务。
谢谢!
5个回答

11

也许可以在 Matplotlib 中使用 Basemap 进行绘图。

它可以进行各种投影(不用在意丑陋的默认颜色)。并且您可以很好地控制您要绘制的内容和方式。您甚至可以使用 NASA蓝色大理石图像。当然,您还可以使用plot命令在地图上绘制标记、线条等。

我没有将大型数据集放入其中,但考虑到它是Matplotlib的一部分,我认为它会表现得很好。

如果我没记错的话,尽管它是库的一部分,但默认情况下它不随Matplotlib一起发布。


3

正如其他人提到的,您可以获取位置信息并编写一些代码将它们放在地图上,但也有一种更简单的方法。

您可以使用 IPInfo 的免费Map IPs 工具,该工具将创建一个 IP 地址交互式地图。这是一个示例,显示了 AWS IP Ranges

map ips tool preview

您可以复制/粘贴 IP 地址或通过 cURL 使用该工具。它可以处理多达 500K 个 IP 地址。

$ cat ipList | curl -XPOST --data-binary @- "ipinfo.io/map?cli=1"

免责声明: 我就职于IPInfo。


ipinfo.io 正是我正在寻找的。感谢分享! - Kazuya Gosho

2

您可能想看一下mapsplotlib

安装

仅支持Python 2.7!

$ pip install mapsplotlib
$ pip install pandas

您需要获取一个谷歌静态地图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'])

示例输出

在此输入图像描述


2
谷歌地图API可以支持上述所有功能,如果您愿意设置本地Web环境进行测试。有一个名为pymaps的Python API包装器。
API文档中有一个示例,说明如何使用Google的地理编码器在地图上绘制给定特定输入地址的点: Google Maps API Example: Simple Geocoding

1
据我所知,pymaps只是一个包装器,使使用Google Maps更加容易。然而,我想要完全离线运行它,不发送任何数据到外部(例如Google)。 - Unknown

1
我最近使用了gmplot
只需执行以下命令即可安装:
pip install gmplot

这个工具非常易用。你只需要输入经度和纬度数值,gmplot 就能生成一个 html 格式的地图。
以下是一个简单示例。让 lat_valueslon_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')

就是这样!当然,你可以调整参数以增强视觉效果。请参见此处的快速入门


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