Прямое вычисление геохаша с помощью 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()

Другим вариантом может быть реконструкция алгоритма, используемого базой данных, но разные базы данных могут использовать разные алгоритмы, и в конце концов могут передумать.

Вернуться на верх