gpt4 book ai didi

django - 如何在 Geodjango 的管理员中更改 map 的默认缩放级别?

转载 作者:行者123 更新时间:2023-12-04 11:50:34 25 4
gpt4 key购买 nike

我最近一直在研究 GeoDjango,我正在努力自定义管理部分中显示的 openstreet map 的默认缩放级别。
以下是我尝试过的,但没有效果,请帮助。

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

    最佳答案

    您的具体情况
    point_zoom 的默认值与 OSMGeoAdmin是 14,这就是您目前的样子。尝试覆盖 point_zoomLocationAdmin .如下所述,如果您使用 PointField,这应该可以工作。或 MultiPointField .

    如何确定缩放级别:

    默认缩放级别将取决于几个不同的事情:

  • 如果没有要显示的数据(例如,您正在查看一个新实例),则 default_zoom将会被使用。这可以设置如下:
  • class LocationAdmin(admin.OSMGeoAdmin):
    default_zoom = 5
  • 如果我们使用字段 PointFieldMultiPointField那么它看起来像 point_zoom将使用值而不是 default_zoom .这可以设置如下:
  • class LocationAdmin(admin.OSMGeoAdmin):
    point_zoom = 10
  • 否则,缩放级别将根据数据的边界自动设置。

  • 为什么会这样?

    如果您查看源代码,您将在运行该管理 View 的 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()) .
  • 关于django - 如何在 Geodjango 的管理员中更改 map 的默认缩放级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61611292/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com