2010-03-30 33 views
1

我正在做地理定位,Django沒有PointField。所以,我不得不寫入RAW SQL。 GeoDjango內置,Django的圖書館,不支持MySQL數據庫以下查詢(有人可以證實一下嗎?)修改Django模型有多難?

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

我不nkow爲什麼GeoDjango內置庫無法做到這一點的MySQL數據庫。我討厭編寫RAW SQL來計算兩點之間的距離。有沒有辦法可以爲Django創建我自己的庫來處理這個問題?如果是這樣,它有多難?

+0

你使用的是哪個版本?在Django 1.2中,有一種執行原始SQL的新方法。 – 2010-03-30 21:19:12

+0

我正在使用1.0,但1.2不穩定? – TIMEX 2010-03-30 21:31:51

+0

那麼目標是在12月12日發佈1.2版本:http://www.djangoproject.com/weblog/2010/mar/23/django-1_2-release-schedule-update-2/ – 2010-03-30 21:58:56

回答

0

你爲什麼不擴展一個已經存在的類?只是好奇,希望我能夠專門幫助你。

+0

是的,我該怎麼做那? – TIMEX 2010-03-30 21:29:33

+0

也許這樣:http://wolfram.kriesing.de/blog/index.php/2007/extend-djangos-user-class – dscher 2010-03-30 23:34:18

0

GeoDjango確實有一個PointField。

它看起來就像你試圖做一個dwithin現場查找,這不會對MySQL的(如2010年4月),但確實在Postgres的:

類標籤(模型): 點= PointField ()

Tag.objects.filter(point__dwithin =(點,d(MI = 4)))

謹慎對待此類型的查詢,因爲它需要一個表掃描。如果你能忍受一個矩形區域內選擇所有的點,你可以使用邊框中包含查詢:

Tag.objects.filter(point__contained = GEOM)

其中GEOM是一個多邊形。