问题描述
我正在尝试创建一个端点,以便可以实时获取User(Rider)的经度和纬度并将其保存到数据库中。我已经尝试过研究如何解决此问题,但是我只能获得如何接收当前所需的位置信息,而该位置不是我想要的实时信息。如果有人能指导我如何解决这个问题,并提供一些资料使我可以阅读更多有关如何实现此目标或过去在此方面的工作的信息,我将感到很高兴。
感谢您的期待。
解决方法
不太清楚您的意思是,获取实时位置是前端事务,然后将其发送到后端,因此您需要了解如何在前端使用的库中启用用户位置访问(反应,反应本地,vue ...) 如果您以后再需要转换地址或纬度/经度,并且我建议从Google Maps API开始进行第四次转换,则需要在该dasboard中生成一个API密钥(免费使用到一定的限制)
然后您可以使用它来获取有关某个位置的某些数据,例如,获取其海拔高度:
RESULTS = 'results'
LOCATIONS = '?locations='
KEY = '&key='
INDEX: int = 0
LOCATIONS = 'Locations'
def get_elevation(lat: float,lon: float):
"""
This function receives a Point and sends a request to Google's Elevation API.
@param float lat: latitude
@param float lon: longitude
@return float: elevation of point in meters
"""
url = "https://maps.googleapis.com/maps/api/elevation/json"
request = urlopen(url + LOCATIONS + str(lat) + "," + str(lon) + KEY + _GOOGLE_API_KEY)
results = json.load(request).get(RESULTS)
elevation = 0.0
if INDEX < len(results):
elevation = results[INDEX].get(ELEVATION)
print(elevation)
return elevation
它也可以用于从经纬度检索地址,反之亦然,等等。
您还可以在应用中保留这样的模型:
class GeoLocation(models.Model):
latitude = models.DecimalField(max_digits=13,decimal_places=10,null=True,blank=True)
longitude = models.DecimalField(max_digits=13,blank=True)
street = models.CharField(max_length=400,blank=True)
city = models.CharField(max_length=255,blank=True)
state = models.CharField(max_length=255,blank=True)
country = models.CharField(max_length=10,choices=country_names.items(),blank=True,null=True)
def __str__(self):
return f'{self.street},{self.city},{self.country}'
def save(self,*args,**kwargs):
# this is just an example use
if all([self.street,self.city,self.country]) is None:
# haven't implemented a function like this myself but it just a way to use thie model
self.street,self.country = get_address_from_lat_long(self.latitude,self.longitude)
elif all([self.latitude,self.longitude]) is None:
# using the str(self) will return the full address,which google maps has endpoint for
self.latitude,self.longitude = get_lat_long_from_address(str(self))