根據IP定位城市名稱 經緯度

2021-08-04 21:04:34 字數 1452 閱讀 3141

最近想統計下公司使用者在中國地圖上的分別情況,但使用者登錄檔中填寫的單位資訊比較混亂,提取省份、城市名稱較困難,最後決定用ip位址來查詢對應資訊。搜尋到兩種常用的方式:

採用純真資料庫qqwry.dat,傳入ip返回省+城市名稱,無經緯度資訊;缺點:返回的位址資訊太詳細,有的能定位到小區名稱,不利於歸類統計數量;優點:qqwry.dat資料庫更新快且位址資訊更具體,部分能定位到縣或小區。

# 注意新增引用 analy_user為我的工程名

from analy_user.iplocator import *

# iplocator呼叫一次即可,建議放在迴圈外,節約時間

ipl = iplocator("qqwry.dat")

address = ipl.getipaddr(ipl.str2ip(ip])).split(' ')

city = address[0]

如果想用純真資料庫,又想獲取經緯度,可以呼叫python的geopy庫,由城市名獲取經緯度。

from geopy.geocoders import nominatim

from geopy.exc import geocodertimedout

geolocator = nominatim()

point= geolocator.geocode(city)

偶爾會提示server time out,原因不明。設定超時時間,可減少中斷次數,但治標不治本。

point = geolocator.geocode(city,timeout = 5000)

首先需要申請乙個申請金鑰(ak)(不知道白名單可使用預設位址0.0.0.0/0申請,按照官網上操作步驟,請求中傳入ip 和 ak秘鑰:

import urllib

import urllib2

defget_address

(ip):

url = "你的ak秘鑰&coor=bd09ll" % ip

req = urllib2.request(url)

res_data = urllib2.urlopen(req)

res = res_data.read().decode("unicode-escape") # 轉格式

jsonaddress = json.loads(res)

ifnot jsonaddress["status"]:

city = jsonaddress["content"]["address_detail"]["city"]

province = jsonaddress["content"]["address_detail"]["province"]

point = jsonaddress["content"]["point"]

return city ,province ,point

php根據經緯度排序,根據經緯度篩選距離段

sql 語句 select location.from select round 6378.138 2 asin sqrt pow sin 36.668530 pi 180 px lat pi 180 2 2 cos 36.668530 pi 180 cos px lat pi 180 pow si...

根據經緯度反位址解析

一.首先引入所申請的ak金鑰 二.簡單樣式處理一下 body,html l map r result 三.html 布局 下面的 是用來顯示地圖的 四.js 如下 var map new bmap.map l map map.centerandzoom new bmap.point 116.3287...

根據經緯度計算距離 Java

根據兩個位置的經緯度,來計算兩地的距離 單位為km 引數為double型別 long1 位置1經度 lat1 位置1緯度 long2 位置2經度 lat2 位置2緯度 public class distanceutils 根據兩個位置的經緯度,來計算兩地的距離 param longitudeuser...