Прямое вычисление геохаша с помощью django без создания модели
можно ли использовать этот класс GeoHash напрямую, не создавая модель на db?
например:
from django.contrib.gis.geos import Point
from django.contrib.gis.db.models.functions import GeoHash
p = Point(x=lon, y=lat, srid=4326)
geohash_str = GeoHash(p).??? # i want the actual geohash string here
GeoHash
[Django-doc] сам по себе не ничего не вычисляет. По сути, это просто некий абстрактный узел синтаксического дерева, который переводится в выражение SQL. Таким образом, алгоритм вычисляется в базе данных, а не Django.
Можно ли использовать этот класс GeoHash напрямую, не создавая модель на бд?
Да, или, по крайней мере, вроде того. Мы могли бы сделать запрос SELECT
и определить в нем геохаш, например:
Для оценки можно использовать другую модель, не имеющую к ней никакого отношения, с:
from app_name.models import SomeModel
from django.contrib.gis.db.models.functions import GeoHash
from django.contrib.gis.geos import Point
from django.db import connections
db_name = 'default'
connection = connections[db_name]
compiler = conn.ops.compiler('SQLCompiler')(
SomeModel.objects.none(), connection, db_name
)
with connection.cursor() as cursor:
sql, params = GeoHash(Point(x=lon, y=lat, srid=4326)).as_sql(
compiler, connection
)
cursor.execute(f'SELECT {sql};', params)
result, *__ = cursor.fetchone()
Другим вариантом может быть реконструкция алгоритма, используемого базой данных, но разные базы данных могут использовать разные алгоритмы, и в конце концов могут передумать.