1

我正在做地理定位,而 Django 没有 PointField。所以,我被迫用 RAW SQL 编写。Django 库 GeoDjango 不支持对 MYSQL 数据库的以下查询(有人可以为我验证吗?)

 cursor.execute("SELECT id FROM l_tag WHERE\
               (GLength(LineStringFromWKB(LineString(asbinary(utm),asbinary(PointFromWKB(point(%s, %s)))))) < %s + accuracy + %s)\

我不知道为什么 GeoDjango 库不能在 MYSQL 数据库中执行此操作。我讨厌编写 RAW SQL 来计算两点之间的距离。有没有办法可以为 Django 创建自己的库来处理这个问题?如果是这样,它有多难?

4

2 回答 2

0

你为什么不扩展一个已经存在的类呢?只是好奇,希望我能具体帮助你。

于 2010-03-30T21:18:13.363 回答
0

GeoDjango 确实有一个 PointField。

看起来您正在尝试进行 dwithin 字段查找,这在 MySQL 上不起作用(截至 2010 年 4 月),但在 Postgres 中起作用:

类标签(模型):点 = PointField()

Tag.objects.filter(point__dwithin=(point,D(mi=4)))

小心这种查询,因为它需要表扫描。如果您可以容忍选择矩形区域内的所有点,则可以使用包含查询的边界框:

Tag.objects.filter(point__contained=geom)

其中 geom 是一个多边形。

于 2010-04-10T15:50:22.130 回答