我最近一直在研究GeoDjango,我正在努力定制我的管理区中显示的openstreet地图的默认缩放级别,以下是我试过的,但没有效果,请大家协助。
from django.contrib.gis import admin
class LocationAdmin(admin.OSMGeoAdmin):
default_zoom = 5
admin_site.register(ReferenceSpaceLocation, LocationAdmin)
我的模型
class ReferenceSpaceLocation(models.Model):
geometry = models.GeometryField()
的默认值。point_zoom
与 OSMGeoAdmin
是14,而你的目前似乎是这样的。试试覆盖 point_zoom
在 LocationAdmin
. 正如下面所解释的那样,如果你使用的是 PointField
或 MultiPointField
.
默认的缩放级别取决于几个不同的因素。
default_zoom
将被使用。这可以按以下方式设置。class LocationAdmin(admin.OSMGeoAdmin):
default_zoom = 5
PointField
或 MultiPointField
然后就像 point_zoom
值将被用来代替 default_zoom
. 可按以下方式设置。class LocationAdmin(admin.OSMGeoAdmin):
point_zoom = 10
如果你看一下源码,你会在运行管理员视图的js文件中看到以下内容。
// django/contrib/gis/templates/gis/admin/openlayers.js
var wkt = document.getElementById('{{ id }}').value;
if (wkt){
...
// Zooming to the bounds.
{{ module }}.map.zoomToExtent(admin_geom.geometry.getBounds());
if ({{ module }}.is_point){
{{ module }}.map.zoomTo({{ point_zoom }});
}
} else {
{% localize off %}
{{ module }}.map.setCenter(new OpenLayers.LonLat({{ default_lon }}, {{ default_lat }}), {{ default_zoom }});
{% endlocalize %}
}
这意味着:
default_zoom
被使用。PointField
或 MultiPointField
然后 {{module}}.is_point
是真的,而且可以看出 point_zoom
被使用。zoomToExtent(admin_geom.geometry.getBounds())
.