2013-03-15 22 views
1

我注意到Geodjango管理員的地圖在右側有一個菜單。Geodjango OSMGeoAdmin:如何添加不同的圖層

如何添加更多圖層,而不僅僅是代表地圖在管理中與地圖相關的模型字段?

這是我的模型(model.py):

class Foresta(models.Model): 

    nome = models.CharField("Nome", blank = False, max_length = 255) 
    descrizione = tinymce_models.HTMLField("Descrizione", blank = True, help_text='Inserire una descrizione del bosco') 
    slug = models.SlugField("Slug", blank = True) 
    published = models.BooleanField("Pubblicato") 
    ... 

    coord = models.PointField("Coordinata punto foresta", blank = False) 
    # GeoDjango-specific: a geometry field (MultiPolygonField), and 
    # overriding the default manager with a GeoManager instance. 
    mpoly = models.MultiPolygonField("Mappa foresta (poligono)", blank = False) 
    objects = models.GeoManager() 

這是我的管理模型(admin.py):

class ForestaAdmin(admin.OSMGeoAdmin): 
    default_lon= 1308296 
    default_lat= 5714101 
    default_zoom= 9 
    overlays = ('coord', 'mpoly') 

我試圖與 '覆蓋' 選項,但沒有成功!

回答

1

您可以找到默認的OSMGeoAdmin設置here。不幸的是,它看起來並不像你可以通過指定覆蓋元組這樣簡單的事情來實現。相反,它看起來應該創建一個自定義地圖模板,然後使用模板路徑覆蓋ForestaAdmin類中的map_template選項。首先複製默認的openlayers模板並自定義javascript以將其他圖層添加爲額外的OpenLayers Vector圖層。

0

您可以使用olwidget http://docs.olwidget.org/en/latest/django-olwidget.html。它允許你編輯和顯示不同的圖層(Django admin內部和外部)。但是,根據您運行的是哪個Django版本,您可能會發現很難使用它。

最後,我設法做到這一點作爲@garnetb通過修改(我的情況)發現openlayers.js文件說,在這裏:

/usr/local/lib/python2.7/dist-packages/django/contrib/gis/templates/gis/admin/openlayers.js 

如果你不能找到它只是看它在osm.html和/或openlayers.html。所以,這是我設法添加第二層的方式。我的目標是添加一個「可視化」圖層,但如果您想編輯它,則可以輕鬆修改控件。所以,讓我們假設你有這樣一個模型:

class Lines(gis_models.Model): 
name = gis_models.CharField(max_length=10) 
geom = gis_models.MultiLineStringField(srid=4326) 
geom_points = gis_models.MultiPointField(srid=4326, null=True) 
objects = gis_models.GeoManager() 
def __unicode__(self): 
    return self.name 

所以你看,有2個因素是負荷,第一個是線,而第二個是點。所以我的目標是將這些線添加爲我在處理點時的視覺參考。要做到這一點,請轉到openlayers.js並查找正在定義基本層的部分,並添加如下所示的內容。你可以看到,整個想法是爲每個圖層加載openlayers.js,但仍然可以訪問其他對象。這個配置給我留下了一個方便的管理員,我在這裏顯示兩張地圖。在第一個中,我展示了線條,並且我可以修改它們。在第二個中,我將這些行顯示爲參考,並且這些點是可編輯的。第二部分向您展示如何設置點樣式(以防萬一...)這只是一個簡化的例子。如果你需要更多的細節,請讓我知道。我還設法添加了「刪除功能」控件。我只在Django 1.6上使用基於GeoDjango的基礎,但它應該與其他版本一樣,只要它們以相同的方式使用openlayers.js。

相關問題