Я работаю над проектом, который требует услуг определения местоположения. Я использую API Google Geocode (в обратном направлении), чтобы получить подробную информацию из необработанных координат (широта и долгота), таких как город, провинция, округ и т. д.
мое геокодирование выполняется на стороне сервера, и это дает мне возможность кэшировать результат, чтобы избежать ограничения запросов от Google.
Моя таблица кэширования работает в контексте границ местоположения (северо-западные и юго-восточные координаты).
Я впервые реализовал эту функцию в PHP и MySql, и она работала нормально.
#this is the sql query to search for location within a specific bound
SELECT _mainid FROM {$this->addressCacheTable} WHERE $lat<= _nlat AND $lat>=_slat AND $lon>=_slong AND $lon<=_nlong
Я пытаюсь перейти на Python с использованием фреймворка Django. и у меня есть это
#this is my query statement in django
data = Coordinates.objects.filter(nlat__lte=lat, slat__gte=lat, nlon__gte=lon, slon__lte=lon)
в python, я всегда получаю пустой результат, даже если они являются значениями, которые логически соответствуют моему запросу. Как заставить мой django-код работать так же, как мой PHP / MySql
Пожалуйста, я уже несколько дней застоялся, любой указатель в правильном направлении был бы наиболее полезным. также, если что-то не так с моими реализациями или есть лучший способ, которым я могу это сделать, я был бы очень признателен за подсказку.
#Database structure with PHP and MySql
CREATE TABLE "address_cache" (
"id" serial NOT NULL REFERENCES "location_table" ("id"),
"_nlat" DECIMAL(8,6) NOT NULL,
"_nlon" DECIMAL(9,6) NOT NULL,
"_slat" DECIMAL(8,6) NOT NULL,
"_slong" DECIMAL(9,6) NOT NULL,
);
#django Model for coordinates using django-mptt to model hierarchical relationship between country,state,county ......etc
class LocationInfo(MPTTModel):
text = models.CharField(max_length=MAX_CHAR_LENGTH, unique=True)
parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')
class MPTTMeta:
order_insertion_by = ['text']
def __str__(self):
return self.text
class Coordinates(MPTTModel):
nlat =models.FloatField(default=0.0)
slat =models.FloatField(default=0.0)
nlon = models.FloatField(default=0.0)
slon = models.FloatField(default=0.0)
location=TreeForeignKey(LocationInfo,on_delete=models.CASCADE,related_name='coordinates',to_field='id')
parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')
class MPTTMeta:
order_insertion_by = ['location']
def __str__(self):
return "Bounds {NE:%f,%f SW:%f,%f} Location: %s"%(self.nlat,self.nlon,self.slat,self.slon,self.location.text)