微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Django和DRF中接收实时纬度和经度

如何解决如何在Django和DRF中接收实时纬度和经度

我正在尝试创建一个端点,以便可以实时获取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))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。