1、地理位置转换经纬度坐标
def request_first(address):
url = 'https://apis.map.qq.com/ws/geocoder/v1/?'
key = 'ZNLBZ-YY7E4-OXBUI-XT37J-SADDF-VFDCQ'
# print(address)
# 发送请求
data = {
'address': address,
'key': key
}
data = parse.urlencode(data)
response_data = requests.get(url + data,).content.decode()
response_data = json.loads(response_data)
# 返回数据
return response_data
2、将转换结果存入Mongodb数据库(看需求,我是存的Mongodb)
Mongodb操作请参考:Django之Mongodb
3、计算两个坐标之间的距离
import math
from math import *
def rad(d):
return d * pi / 180.0
def getDistance(lat1, lng1, lat2, lng2):
# 赤道半径
EARTH_REDIUS = 6378.137
radLat1 = rad(lat1)
radLat2 = rad(lat2)
a = radLat1 - radLat2
b = rad(lng1) - rad(lng2)
s = 2 * math.asin(
math.sqrt(math.pow(sin(a / 2), 2) + cos(radLat1) * cos(radLat2) * math.pow(sin(b / 2), 2)))
s = s * EARTH_REDIUS
return s
4、视图
class MapView(GenericAPIView):
"""
经纬度
"""
# 指定序列化器
serializer_class = serializers.MapSerializer
def get(self, request):
# 经度
lng1 = request.GET.get('lng1', None)
# 纬度
lat1 = request.GET.get('lat1', None)
infomations = []
if lat1 and lng1:
lng1 = eval(lng1)
lat1 = eval(lat1)
info = MapModel.objects.all()
if info:
for i in info:
lng2 = i['longitude']
lat2 = i['latitude']
distance = getDistance(lat1, lng1, lat2, lng2)
# 选取半径为10公里范围内的坐标
if distance < 10:
infomations.append(i)
serializer = self.get_serializer(infomations, many=True)
if serializer.data:
data = {
'status': 200,
'msg': 'OK',
'data': serializer.data
}
return Response(data=data, status=status.HTTP_200_OK)
else:
data = {
'status': 201,
'msg': '暂无数据',
}
return Response(data=data, status=status.HTTP_200_OK)
else:
data = {
'status': 202,
'msg': '参数缺失',
}
return Response(data=data, status=status.HTTP_200_OK)