Как определить местоположение пользователя на карте через ip-адрес в python folium?
Я использую Django REST Framework. Теперь я могу получить доступ к IP пользователя из request
пользователя, используя django-ipware
.
from ipware import get_client_ip
def getlocation(request):
client_ip, is_routable = get_client_ip(request)
Он предоставляет мне IP-адрес request
, с которого пользователь получает доступ. Теперь я хочу узнать широту и долготу этого IP, с помощью которых я могу поместить местоположение пользователя на фолиевую карту.
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)
Как я могу получить широту и долготу?
Frist Я должен установить django-ipware
используя
pip install django-ipware
Следующая попытка импорта по
from ipware import get_client_ip
import urllib, json
теперь в метод, который будет выполнять фолиевую карту, добавьте эти коды
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_адрес будет приватным и не маршрутизируемым, поэтому попробуйте добавить try exception block
, где вы можете передать статический ip адрес для проверки, получаете ли вы longitude latitude
или нет.
Мои примеры кода выглядят следующим образом
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"]
Затем вы можете использовать эту широту и долготу для размещения на фолиевой карте.
(Еще один способ - использовать DATABASE для получения широты и долготы этого ip-адреса)