如何改变Geodjango的管理区中地图的默认缩放级别?

问题描述 投票:0回答:1

我最近一直在研究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()
    

enter image description here

django django-admin openstreetmap geodjango
1个回答
4
投票

你的具体案例

的默认值。point_zoomOSMGeoAdmin 是14,而你的目前似乎是这样的。试试覆盖 point_zoomLocationAdmin. 正如下面所解释的那样,如果你使用的是 PointFieldMultiPointField.

如何确定缩放级别。

默认的缩放级别取决于几个不同的因素。

  • 如果没有数据要显示(例如,您正在查看一个新的实例),默认的缩放级别将取决于几个不同的因素。default_zoom 将被使用。这可以按以下方式设置。
class LocationAdmin(admin.OSMGeoAdmin):
    default_zoom = 5
  • 如果我们使用的是 PointFieldMultiPointField 然后就像 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 %}
    }

这意味着:

  • 如果我们处理的是无数据,那么我们在上述代码的 else子句中。就在这一行的最后,可以看出 default_zoom 被使用。
  • 如果我们使用的是 PointFieldMultiPointField 然后 {{module}}.is_point 是真的,而且可以看出 point_zoom 被使用。
  • 如果以上两种情况都不存在,我们可以看到下面的内容被执行。zoomToExtent(admin_geom.geometry.getBounds()).
© www.soinside.com 2019 - 2024. All rights reserved.