簡體   English   中英

如何從 Django 訪問 postgis 數據庫中的一個點?

[英]How to access a point in postgis database from Django?

我正在嘗試使用 django / postgis 從我的數據庫中獲取點(經緯度坐標),但我遇到了這個我無法計算的錯誤:

django.db.utils.ProgrammingError: cannot cast type point to bytea
LINE 1: ...lon_id", "lat_lon"."house_id", "lat_lon"."lat_lon"::bytea FR...

我的數據庫如下所示:

經緯度數據庫

我像這樣設置我的 model (models.py):

class LatLon(models.Model):
    lat_lon_id = models.AutoField(primary_key=True)
    house = models.ForeignKey(Houses, models.DO_NOTHING)
    lat_lon = models.PointField()

    class Meta:
        managed = False
        db_table = 'lat_lon'
    
    @property
    def lat_lng(self):
        return(list(getattr(self.lat_lon, 'coords', []))[::-1])

並制作一個列表視圖(views.py):

class LatlonList(ListView):
    queryset = LatLon.objects.filter(lat_lon__isnull=False)

最后我的 urlpatterns 看起來像這樣:

urlpatterns = [
    path("", views.home, name="home"),
    path("hello/<name>", views.hello_there, name="hello_there"),
    path("about/", views.about, name="about"),
    path("contact/", views.contact, name="contact"),
    path("log/", views.log_message, name="log"),
    path("test_page/", views.LatlonList.as_view(template_name = 'test_page.html'), name="test_page"),
    path('map/', views.EntryList.as_view()),

我從錯誤中猜測 Django 試圖將我的點轉換為 bytea 數據類型,但我在 model 中明確指定它們是點(Pointfield)。

我是 django 的新手,因此感謝您的任何回復/提示!

由於geozlot的評論,我找到了解決方案。

我選擇使用 sql 語句向數據庫添加幾何列:

SELECT AddGeometryColumn('lat_lon', 'lat_lon', 4326, 'POINT', 2, true)

接下來,我可以使用以下方法將 PostGIS 的幾何點寫入此列;

ST_SetSRID(ST_MakePoint(%s, %s), 4326))

其中 %s 是經度和緯度的占位符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM