首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python folium中通过ip地址定位映射用户位置?

如何在python folium中通过ip地址定位映射用户位置?
EN

Stack Overflow用户
提问于 2021-08-24 15:27:01
回答 1查看 230关注 0票数 0

我使用的是Django REST框架。现在,我可以使用django-ipware从用户的request访问用户IP。

代码语言:javascript
复制
from ipware import get_client_ip
def getlocation(request):
    client_ip, is_routable = get_client_ip(request)

它为我提供了用户访问的request的IP地址。现在我想找出该IP的纬度和经度,通过它们我可以将用户位置放在folium地图上。

代码语言:javascript
复制
map1 = folium.Map(location=[latitude,longitude], zoom_start=12, control_scale=True,prefer_canvas=True)

folium.CircleMarker(location = [latitude,longitude],radius = 20, popup= 'Here You Are',fill=True,fill_color="#3186cc",).add_to(map1)

folium.Marker([latitude,longitude], popup ='Your Location').add_to(map1)

那么如何获取纬度和经度呢?

EN

回答 1

Stack Overflow用户

发布于 2021-08-30 00:49:27

首先,我必须使用以下命令安装django-ipware

代码语言:javascript
复制
pip install django-ipware

下一步尝试导入方式

代码语言:javascript
复制
from ipware import get_client_ip
import urllib, json

现在,在将执行folium映射的方法中,添加以下代码

代码语言:javascript
复制
    client_ip, is_routable = get_client_ip(request)
    if client_ip is None:
        client_ip="0.0.0.0"
    else:
        if is_routable:
            ip_type="Public"
        else:
            ip_type="Private"

    url = 'https://api.ipfind.com/?ip=' + client_ip
    response = urllib.request.urlopen(url)
    data1 = json.loads(response.read())
    longitude=data1["longitude"]
    latitude=data1["latitude"]

重要提示:如果您在本地服务器上,那么您的ip_address将是私有的,并且它是不可路由的,因此尝试添加try exception block,您可以在其中传递一个静态ip地址来检查您是否获得longitude latitude。我的代码示例如下

代码语言:javascript
复制
    client_ip, is_routable = get_client_ip(request)
    if client_ip is None:
        client_ip="0.0.0.0"
    else:
        if is_routable:
            ip_type="Public"
        else:
            ip_type="Private"
    ip_address = '106.220.90.88'
    try:
        url = 'https://api.ipfind.com/?ip=' + client_ip
        response = urllib.request.urlopen(url)
        data1 = json.loads(response.read())
        longitude=data1["longitude"]
        latitude=data1["latitude"]
    except:
        url = 'https://api.ipfind.com/?ip=' + ip_address
        response = urllib.request.urlopen(url)
        data1 = json.loads(response.read())
        longitude=data1["longitude"]
        latitude=data1["latitude"]

然后,您可以使用该纬度和经度放置在folium Map上。

(另一种方法是使用数据库获取该ip地址的纬度和经度。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68910049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档