Django目前不支持MySQL中的“Point”数据类型。这就是我创建自己的原因。
class PointField(models.Field):
def db_type(self):
return 'Point'
class Tag(models.Model):
user = models.ForeignKey(User)
utm = PointField()
正如您所看到的,这很有效,syncdb
可以很好地创建模型。
但是,我当前的代码使用原始SQL计算两个点之间的长度。
cursor.execute("SELECT user_id FROM life_tag WHERE\
(GLength(LineStringFromWKB(LineString(asbinary(utm), asbinary(PointFromWKB(point(%s, %s)))))) < 55)...
这表示:选择给定点与表格点之间的长度小于55的位置。
如何使用Django而不是RAW SQL执行此操作?我不想再做游标和SELECT语句了。如何修改models.py才能执行此操作?
答案 0 :(得分:0)
你的问题有点不清楚 - 你刚才问如何计算2点之间的距离?或者您希望ORM能为您提供一些功能吗?
如果是后者,那么没有一些外部援助就不会发生这种情况;几何和地理超出了大多数典型数据库映射系统的范围。您始终可以使用自动映射来检索您感兴趣的属性,并使用毕达哥拉斯或其他任何方法手动比较它们;那里没有SQL。
关于我提到的“外部援助”,您可以查看GeoDjango,这可能对您有用。 (对于有类似问题但没有将Django用于ORM的人也有GeoAlchemy。)