Django + Mongodb之地图

博客介绍了地理位置转换经纬度坐标,可将转换结果存入Mongodb数据库,还提及计算两个坐标间的距离以及视图相关内容,Mongodb操作可参考Django之Mongodb。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值