迁移地理节点基本URL

这个 migrate_baseurl Management Command 允许您在出于某种原因需要更改所有GeoNode链接时修复所有GeoNode链接 Domain NameIP Address GeoNode的。

must 在需要更改网络方案的情况下也可使用 HTTPHTTPS ,作为实例。

首先我们来看一下 --help 的选项 migrate_baseurl 管理命令,以便检查所有命令选项和功能。

DJANGO_SETTINGS_MODULE=geonode.settings python manage.py migrate_baseurl --help

注解

如果您启用了 local_settings.py 该命令将更改如下:

DJANGO_SETTINGS_MODULE=geonode.local_settings python manage.py migrate_baseurl --help

这将产生如下所示的输出

usage: manage.py migrate_baseurl [-h] [--version] [-v {0,1,2,3}]
                             [--settings SETTINGS]
                             [--pythonpath PYTHONPATH] [--traceback]
                             [--no-color] [-f]
                             [--source-address SOURCE_ADDRESS]
                             [--target-address TARGET_ADDRESS]

Migrate GeoNode VM Base URL

optional arguments:
-h, --help            show this help message and exit
--version             show program's version number and exit
-v {0,1,2,3}, --verbosity {0,1,2,3}
                        Verbosity level; 0=minimal output, 1=normal output,
                        2=verbose output, 3=very verbose output
--settings SETTINGS   The Python path to a settings module, e.g.
                        "myproject.settings.main". If this isn't provided, the
                        DJANGO_SETTINGS_MODULE environment variable will be
                        used.
--pythonpath PYTHONPATH
                        A directory to add to the Python path, e.g.
                        "/home/djangoprojects/myproject".
--traceback           Raise on CommandError exceptions
--no-color            Don't colorize the command output.
-f, --force           Forces the execution without asking for confirmation.
--source-address SOURCE_ADDRESS
                        Source Address (the one currently on DB e.g.
                        http://192.168.1.23)
--target-address TARGET_ADDRESS
                        Target Address (the one to be changed e.g. http://my-
                        public.geonode.org)
  • 示例1 :我要将我的GeoNode实例从 http:\\127.0.0.1http:\\example.org

    警告

    请始终确保您使用的是 对,是这样 设置

    DJANGO_SETTINGS_MODULE=geonode.settings python manage.py migrate_baseurl --source-address=127.0.0.1 --target-address=example.org
    
  • 示例2 :我要将我的GeoNode实例从 http:\\example.orghttps:\\example.org

    警告

    请始终确保您使用的是 对,是这样 设置

    DJANGO_SETTINGS_MODULE=geonode.settings python manage.py migrate_baseurl --source-address=http:\\example.org --target-address=https:\\example.org
    
  • 示例3 :我要将我的GeoNode实例从 https:\\example.orghttps:\\geonode.example.org

    警告

    请始终确保您使用的是 对,是这样 设置

    DJANGO_SETTINGS_MODULE=geonode.settings python manage.py migrate_baseurl --source-address=example.org --target-address=geonode.example.org
    

注解

迁移基本URL后,请确保同时清理链接和目录元数据 (更新权限、元数据、图例和下载链接 )。

将数据加载到GeoNode

在某些情况下,不可能或不方便使用 Upload Form 要通过Web界面将新数据集添加到GeoNode,请执行以下操作。作为实例:

  • 数据集太大了,无法通过Web界面上传。

  • 我们想以编程方式从大容量存储器导入一些数据。

  • 我们想从数据库中导入一些表。

  • 我们需要首先处理数据,也许还需要将其转换为另一种格式。

本节将引导您使用各种选项从Geoserver、从命令行或以编程方式将数据加载到GeoNode中。

警告

本节的某些部分摘自 GeoServer 项目和培训文档。

管理命令 importlayers

这个 geonode.geoserver Django应用程序包括2个管理命令,您可以使用它们将数据加载到GeoNode中。

它们都可以通过使用 manage.py 剧本。

首先我们来看一下 --help 的选项 importlayers 管理命令,以便检查所有命令选项和功能。

DJANGO_SETTINGS_MODULE=geonode.settings python manage.py importlayers --help

注解

如果您启用了 local_settings.py 该命令将更改如下:

DJANGO_SETTINGS_MODULE=geonode.local_settings python manage.py importlayers --help

这将产生如下所示的输出

usage: manage.py importlayers [-h] [-hh HOST] [-u USERNAME] [-p PASSWORD]
                              [--version] [-v {0,1,2,3}] [--settings SETTINGS]
                              [--pythonpath PYTHONPATH] [--traceback] [--no-color]
                              [--force-color] [--skip-checks]
                              [path [path ...]]

Brings a directory full of data files into a GeoNode site.
Datasets are added to the Django database, the GeoServer configuration, and the
pycsw metadata index.
In order to perform the import, GeoNode must be up and running.

positional arguments:
path                  path [path...]

optional arguments:
-h, --help            show this help message and exit
--version             show program's version number and exit
-v {0,1,2,3}, --verbosity {0,1,2,3}
                        Verbosity level; 0=minimal output, 1=normal output,
                        2=verbose output, 3=very verbose output
--settings SETTINGS   The Python path to a settings module, e.g.
                        "myproject.settings.main". If this isn't provided, the
                        DJANGO_SETTINGS_MODULE environment variable will be
                        used.
--pythonpath PYTHONPATH
                        A directory to add to the Python path, e.g.
                        "/home/djangoprojects/myproject".
-hh HOST, --host HOST
                        Geonode host url
-u USERNAME, --username USERNAME
                        Geonode username
-p PASSWORD, --password PASSWORD
                        Geonode password

虽然大多数选项的描述应该是不言而喻的,但值得更详细地查看一些关键选项。

  • 这个 -hh 标识我们要将数据集上载到的GeoNode服务器。默认值为 http://localhost:8000

  • 这个 -u 标识登录的用户名。默认值为 admin

  • 这个 -p 标识登录的密码。默认值为 admin

通过如上所述指定选项并指定包含多个文件的目录的路径来调用导入数据集管理命令。出于本练习的目的,让我们使用geonode附带的默认测试数据集。您可以将此路径替换为您自己的shapefile的目录。

此命令将向您的终端生成以下输出

san_andres_y_providencia_poi.shp: 201
san_andres_y_providencia_location.shp: 201
san_andres_y_providencia_administrative.shp: 201
san_andres_y_providencia_coastline.shp: 201
san_andres_y_providencia_highway.shp: 201
single_point.shp: 201
san_andres_y_providencia_water.shp: 201
san_andres_y_providencia_natural.shp: 201

1.7456605294117646 seconds per Dataset

Output data: {
    "success": [
        "san_andres_y_providencia_poi.shp",
        "san_andres_y_providencia_location.shp",
        "san_andres_y_providencia_administrative.shp",
        "san_andres_y_providencia_coastline.shp",
        "san_andres_y_providencia_highway.shp",
        "single_point.shp",
        "san_andres_y_providencia_water.shp",
        "san_andres_y_providencia_natural.shp"
    ],
    "errors": []
}

作为输出,该命令将打印:

状态代码是来自GeoNode的响应。例如,201表示数据集已正确上传

如果在运行此命令时遇到错误,请查看GeoNode日志以了解详细信息。

管理命令 updatelayers

虽然可以将数据集直接从服务器文件系统导入到GeoNode中,但您可能有一个已在其中包含数据的现有Geoserver,或者您可能希望配置来自不直接受上载数据支持的Geoserver的数据。

Geoserver支持多种数据格式和与数据库的连接,虽然其中许多格式不支持作为GeoNode上载格式,但如果可以在Geoserver中配置,您可以按照下面介绍的步骤将其添加到GeoNode。

Geoserver支持3种类型的数据: RasterVectorDatabasesCascaded

有关每种数据类型支持的格式列表,请参阅以下页面:

注解

其中一些栅格或矢量格式或数据库类型要求您在Geoserver中安装特定插件才能使用。有关详细信息,请查阅Geoserver文档。

来自PostGIS数据库的数据

让我们演练在Geoserver中配置新的PostGIS数据库,然后在GeoNode中配置这些数据集的示例。

首先访问服务器上的Geoserver管理界面。这通常位于端口8080上,并可从http://localhost:8080/geoserver/web/获得

  1. 您应该使用首次配置GeoNode实例时设置的超级用户凭据登录。

    登录到Geoserver管理界面后,您应该会看到以下内容。

    ../../_images/geoserver_admin.png

    注解

    存储、数据集和工作空间的数量可能会有所不同,具体取决于您在Geoserver中已配置的内容。

  2. 接下来,您需要选择左侧菜单中的“Stores”选项,然后选择“add new Store”选项。将显示以下屏幕。

    ../../_images/geoserver_new_store.png
  3. 在本例中,我们希望选择PostGIS存储类型来创建到现有数据库的连接。在下一个屏幕上,您将需要输入参数以连接到PostGIS数据库(根据需要为您自己的数据库更改)。

    ../../_images/geoserver_postgis_params.png

    注解

    如果您不确定任何设置,请将其保留为默认设置。

  4. 下一个屏幕允许您配置数据库中的数据集。当然,这将根据数据库中的数据集而有所不同。

    ../../_images/geoserver_publish_layers.png
  5. 选择其中一个数据集的“发布”按钮,将显示下一个屏幕,您可以在其中输入该数据集的元数据。由于我们将在GeoNode中管理此元数据,因此我们可以暂时不考虑这些问题。

    ../../_images/geoserver_layer_params.png
  6. 那些能让你感觉到的东西 must 指定的是声明的SRS,您必须在指定SRS之后选择“从数据计算”和“从本机边界计算”链接。

    ../../_images/geoserver_srs.png
    ../../_images/geoserver_srs_2.png
  7. 单击保存,此数据集现在将配置为在Geoserver中使用。

    ../../_images/geoserver_layers.png
  8. 下一步是在GeoNode中配置这些数据集。这个 updatelayers 管理命令可用于此目的。和以前一样 importlayers ,查看此命令的命令行选项非常有用,方法是将 --help 选项

    DJANGO_SETTINGS_MODULE=geonode.settings python manage.py updatelayers --help
    

    注解

    如果您启用了 local_settings.py 该命令将更改如下:

    DJANGO_SETTINGS_MODULE=geonode.local_settings python manage.py updatelayers --help
    

    这将产生如下所示的输出

    usage: manage.py updatelayers [-h] [--version] [-v {0,1,2,3}]
                                [--settings SETTINGS] [--pythonpath PYTHONPATH]
                                [--traceback] [--no-color] [-i]
                                [--skip-unadvertised]
                                [--skip-geonode-registered] [--remove-deleted]
                                [-u USER] [-f FILTER] [-s STORE] [-w WORKSPACE]
                                [-p PERMISSIONS]
    
    Update the GeoNode application with data from GeoServer
    
    optional arguments:
    -h, --help            show this help message and exit
    --version             show program's version number and exit
    -v {0,1,2,3}, --verbosity {0,1,2,3}
                            Verbosity level; 0=minimal output, 1=normal output,
                            2=verbose output, 3=very verbose output
    --settings SETTINGS   The Python path to a settings module, e.g.
                            "myproject.settings.main". If this isn't provided, the
                            DJANGO_SETTINGS_MODULE environment variable will be
                            used.
    --pythonpath PYTHONPATH
                            A directory to add to the Python path, e.g.
                            "/home/djangoprojects/myproject".
    --traceback           Raise on CommandError exceptions
    --no-color            Don't colorize the command output.
    -i, --ignore-errors   Stop after any errors are encountered.
    --skip-unadvertised   Skip processing unadvertised Datasets from GeoSever.
    --skip-geonode-registered
                            Just processing GeoServer Datasets still not registered
                            in GeoNode.
    --remove-deleted      Remove GeoNode Datasets that have been deleted from
                            GeoSever.
    -u USER, --user USER  Name of the user account which should own the imported
                            Datasets
    -f FILTER, --filter FILTER
                            Only update data the Datasets that match the given
                            filter
    -s STORE, --store STORE
                            Only update data the Datasets for the given geoserver
                            store name
    -w WORKSPACE, --workspace WORKSPACE
                            Only update data on specified workspace
    -p PERMISSIONS, --permissions PERMISSIONS
                            Permissions to apply to each Dataset
    

警告

其中一个 --workspace--store 如果要摄取属于特定对象的数据集,则必须始终指定 Workspace 。作为一个实例,为了将存在的数据集摄取到 geonode 工作区,则需要指定选项 -w geonode

  1. 让我们摄取数据集 geonode:_1_SARMIENTO_ENERO_2018geonode 工作区。

    DJANGO_SETTINGS_MODULE=geonode.settings python manage.py updatelayers -w geonode -f _1_SARMIENTO_ENERO_2018
    
    Inspecting the available Datasets in GeoServer ...
    Found 1 Datasets, starting processing
    /usr/local/lib/python2.7/site-packages/owslib/iso.py:117: FutureWarning: the .identification and .serviceidentification properties will merge into .identification being a list of properties.  This is currently implemented in .identificationinfo.  Please see https://github.com/geopython/OWSLib/issues/38 for more information
    FutureWarning)
    /usr/local/lib/python2.7/site-packages/owslib/iso.py:495: FutureWarning: The .keywords and .keywords2 properties will merge into the .keywords property in the future, with .keywords becoming a list of MD_Keywords instances. This is currently implemented in .keywords2. Please see https://github.com/geopython/OWSLib/issues/301 for more information
    FutureWarning)
    Content-Type: text/html; charset="utf-8"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Subject: [master.demo.geonode.org] A new Dataset has been uploaded
    From: webmaster@localhost
    To: mapadeldelito@chubut.gov.ar
    Reply-To: webmaster@localhost
    Date: Tue, 08 Oct 2019 12:26:17 -0000
    Message-ID: <20191008122617.28801.94967@d3cf85425231>
    
    
    <body>
    You have received the following notice from master.demo.geonode.org:
    <p>
    
    The user <i><a href="http://master.demo.geonode.org/people/profile/admin">admin</a></i> uploaded the following Dataset:<br/>
    <strong>_1_SARMIENTO_ENERO_2018</strong><br/>
    You can visit the Dataset's detail page here: http://master.demo.geonode.org/Datasets/geonode:_1_SARMIENTO_ENERO_2018
    
    </p>
    <p>
    To change how you receive notifications, please go to http://master.demo.geonode.org
    </p>
    </body>
    
    -------------------------------------------------------------------------------
    Content-Type: text/html; charset="utf-8"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Subject: [master.demo.geonode.org] A new Dataset has been uploaded
    From: webmaster@localhost
    To: giacomo8vinci@gmail.com
    Reply-To: webmaster@localhost
    Date: Tue, 08 Oct 2019 12:26:17 -0000
    Message-ID: <20191008122617.28801.53784@d3cf85425231>
    
    
    <body>
    You have received the following notice from master.demo.geonode.org:
    <p>
    
    The user <i><a href="http://master.demo.geonode.org/people/profile/admin">admin</a></i> uploaded the following Dataset:<br/>
    <strong>_1_SARMIENTO_ENERO_2018</strong><br/>
    You can visit the Dataset's detail page here: http://master.demo.geonode.org/Datasets/geonode:_1_SARMIENTO_ENERO_2018
    
    </p>
    <p>
    To change how you receive notifications, please go to http://master.demo.geonode.org
    </p>
    </body>
    
    -------------------------------------------------------------------------------
    Content-Type: text/html; charset="utf-8"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Subject: [master.demo.geonode.org] A new Dataset has been uploaded
    From: webmaster@localhost
    To: fmgagliano@gmail.com
    Reply-To: webmaster@localhost
    Date: Tue, 08 Oct 2019 12:26:17 -0000
    Message-ID: <20191008122617.28801.26265@d3cf85425231>
    
    
    <body>
    You have received the following notice from master.demo.geonode.org:
    <p>
    
    The user <i><a href="http://master.demo.geonode.org/people/profile/admin">admin</a></i> uploaded the following Dataset:<br/>
    <strong>_1_SARMIENTO_ENERO_2018</strong><br/>
    You can visit the Dataset's detail page here: http://master.demo.geonode.org/Datasets/geonode:_1_SARMIENTO_ENERO_2018
    
    </p>
    <p>
    To change how you receive notifications, please go to http://master.demo.geonode.org
    </p>
    </body>
    
    -------------------------------------------------------------------------------
    Found geoserver resource for this Dataset: _1_SARMIENTO_ENERO_2018
    ... Creating Default Resource Links for Layer [geonode:_1_SARMIENTO_ENERO_2018]
    -- Resource Links[Prune old links]...
    -- Resource Links[Prune old links]...done!
    -- Resource Links[Compute parameters for the new links]...
    -- Resource Links[Create Raw Data download link]...
    -- Resource Links[Create Raw Data download link]...done!
    -- Resource Links[Set download links for WMS, WCS or WFS and KML]...
    -- Resource Links[Set download links for WMS, WCS or WFS and KML]...done!
    -- Resource Links[Legend link]...
    -- Resource Links[Legend link]...done!
    -- Resource Links[Thumbnail link]...
    -- Resource Links[Thumbnail link]...done!
    -- Resource Links[OWS Links]...
    -- Resource Links[OWS Links]...done!
    Content-Type: text/html; charset="utf-8"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Subject: [master.demo.geonode.org] A Dataset has been updated
    From: webmaster@localhost
    To: mapadeldelito@chubut.gov.ar
    Reply-To: webmaster@localhost
    Date: Tue, 08 Oct 2019 12:26:20 -0000
    Message-ID: <20191008122620.28801.81598@d3cf85425231>
    
    
    <body>
    You have received the following notice from master.demo.geonode.org:
    <p>
    
    The following Dataset was updated:<br/>
    <strong>_1_SARMIENTO_ENERO_2018</strong>, owned by <i><a href="http://master.demo.geonode.org/people/profile/admin">admin</a></i><br/>
    You can visit the Dataset's detail page here: http://master.demo.geonode.org/Datasets/geonode:_1_SARMIENTO_ENERO_2018
    
    </p>
    <p>
    To change how you receive notifications, please go to http://master.demo.geonode.org
    </p>
    </body>
    
    -------------------------------------------------------------------------------
    Content-Type: text/html; charset="utf-8"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Subject: [master.demo.geonode.org] A Dataset has been updated
    From: webmaster@localhost
    To: giacomo8vinci@gmail.com
    Reply-To: webmaster@localhost
    Date: Tue, 08 Oct 2019 12:26:20 -0000
    Message-ID: <20191008122620.28801.93778@d3cf85425231>
    
    
    <body>
    You have received the following notice from master.demo.geonode.org:
    <p>
    
    The following Dataset was updated:<br/>
    <strong>_1_SARMIENTO_ENERO_2018</strong>, owned by <i><a href="http://master.demo.geonode.org/people/profile/admin">admin</a></i><br/>
    You can visit the Dataset's detail page here: http://master.demo.geonode.org/Datasets/geonode:_1_SARMIENTO_ENERO_2018
    
    </p>
    <p>
    To change how you receive notifications, please go to http://master.demo.geonode.org
    </p>
    </body>
    
    -------------------------------------------------------------------------------
    Content-Type: text/html; charset="utf-8"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Subject: [master.demo.geonode.org] A Dataset has been updated
    From: webmaster@localhost
    To: fmgagliano@gmail.com
    Reply-To: webmaster@localhost
    Date: Tue, 08 Oct 2019 12:26:20 -0000
    Message-ID: <20191008122620.28801.58585@d3cf85425231>
    
    
    <body>
    You have received the following notice from master.demo.geonode.org:
    <p>
    
    The following Dataset was updated:<br/>
    <strong>_1_SARMIENTO_ENERO_2018</strong>, owned by <i><a href="http://master.demo.geonode.org/people/profile/admin">admin</a></i><br/>
    You can visit the Dataset's detail page here: http://master.demo.geonode.org/Datasets/geonode:_1_SARMIENTO_ENERO_2018
    
    </p>
    <p>
    To change how you receive notifications, please go to http://master.demo.geonode.org
    </p>
    </body>
    
    -------------------------------------------------------------------------------
    Found geoserver resource for this Dataset: _1_SARMIENTO_ENERO_2018
    /usr/local/lib/python2.7/site-packages/geoserver/style.py:80: FutureWarning: The behavior of this method will change in future versions.  Use specific 'len(elem)' or 'elem is not None' test instead.
    if not user_style:
    /usr/local/lib/python2.7/site-packages/geoserver/style.py:84: FutureWarning: The behavior of this method will change in future versions.  Use specific 'len(elem)' or 'elem is not None' test instead.
    if user_style:
    ... Creating Default Resource Links for Layer [geonode:_1_SARMIENTO_ENERO_2018]
    -- Resource Links[Prune old links]...
    -- Resource Links[Prune old links]...done!
    -- Resource Links[Compute parameters for the new links]...
    -- Resource Links[Create Raw Data download link]...
    -- Resource Links[Create Raw Data download link]...done!
    -- Resource Links[Set download links for WMS, WCS or WFS and KML]...
    -- Resource Links[Set download links for WMS, WCS or WFS and KML]...done!
    -- Resource Links[Legend link]...
    -- Resource Links[Legend link]...done!
    -- Resource Links[Thumbnail link]...
    -- Resource Links[Thumbnail link]...done!
    -- Resource Links[OWS Links]...
    -- Resource Links[OWS Links]...done!
    [created] Layer _1_SARMIENTO_ENERO_2018 (1/1)
    
    
    Finished processing 1 Datasets in 5.0 seconds.
    
    1 Created Datasets
    0 Updated Datasets
    0 Failed Datasets
    5.000000 seconds per Dataset
    

注解

如果您没有指定 -f 选项,则只会更新GeoNode中已有的数据集,并在Geoserver和GeoNode之间同步配置。

警告

更新时 from Geoserver,GeoNode上的配置将更改!

使用 GDALOGR 转换数据以在GeoNode中使用的步骤

GeoNode支持在中上传数据 ESRI shapefilesGeoTIFFCSVGeoJSONASCII-GRIDKML / KMZ 格式(仅适用于最后三种格式,如果您使用 geonode.importer 后端)。

  • 如果您的数据是其他格式,则需要将其转换为其中一种格式以便在GeoNode中使用。

  • 如果您的 Raster 数据未正确处理,可能几乎无法使用Geoserver和GeoNode。您将需要使用以下命令处理它 GDAL

您需要确保您的系统上安装了GDAL库。在Ubuntu上,您可以使用以下命令安装此软件包:

sudo apt-get install gdal-bin

OGR(矢量数据)

OGR用于操作矢量数据。在本例中,我们将使用MapInfo.tab文件,并使用ogr2ogr命令将其转换为shapefile。我们将使用下面链接的网站中的示例MapInfo文件。

http://services.land.vic.gov.au/landchannel/content/help?name=sampledata

您可以通过发出以下命令下载Admin;(邮政编码)数据集:

$ wget http://services.land.vic.gov.au/sampledata/shape/admin_postcode_vm.zip

您需要通过发出以下命令来解压缩此数据集:

$ unzip admin_postcode_vm.zip

这将在您执行上述命令的目录中留下以下文件:

|-- ANZVI0803003025.htm
|-- DSE_Data_Access_Licence.pdf
|-- VMADMIN.POSTCODE_POLYGON.xml
|-- admin_postcode_vm.zip
--- vicgrid94
    --- mif
        --- lga_polygon
            --- macedon\ ranges
                |-- EXTRACT_POLYGON.mid
                |-- EXTRACT_POLYGON.mif
                --- VMADMIN
                    |-- POSTCODE_POLYGON.mid
                    --- POSTCODE_POLYGON.mif

首先,让我们使用以下命令检查此文件集:

$ ogrinfo -so vicgrid94/mif/lga_polygon/macedon\ ranges/VMADMIN/POSTCODE_POLYGON.mid POSTCODE_POLYGON

输出将如下所示:

Had to open data source read-only.
INFO: Open of `vicgrid94/mif/lga_polygon/macedon ranges/VMADMIN/POSTCODE_POLYGON.mid'
    using driver `MapInfo File' successful.

Layer name: POSTCODE_POLYGON
Geometry: 3D Unknown (any)
Feature Count: 26
Extent: (2413931.249367, 2400162.366186) - (2508952.174431, 2512183.046927)
Layer SRS WKT:
PROJCS["unnamed",
    GEOGCS["unnamed",
        DATUM["GDA94",
            SPHEROID["GRS 80",6378137,298.257222101],
            TOWGS84[0,0,0,-0,-0,-0,0]],
        PRIMEM["Greenwich",0],
        UNIT["degree",0.0174532925199433]],
    PROJECTION["Lambert_Conformal_Conic_2SP"],
    PARAMETER["standard_parallel_1",-36],
    PARAMETER["standard_parallel_2",-38],
    PARAMETER["latitude_of_origin",-37],
    PARAMETER["central_meridian",145],
    PARAMETER["false_easting",2500000],
    PARAMETER["false_northing",2500000],
    UNIT["Meter",1]]
PFI: String (10.0)
POSTCODE: String (4.0)
FEATURE_TYPE: String (6.0)
FEATURE_QUALITY_ID: String (20.0)
PFI_CREATED: Date (10.0)
UFI: Real (12.0)
UFI_CREATED: Date (10.0)
UFI_OLD: Real (12.0)

这将为您提供有关此数据集的要素数量、范围、投影和属性的信息。

接下来,通过发出以下命令将此数据集转换为shapefile:

$ ogr2ogr -t_srs EPSG:4326 postcode_polygon.shp vicgrid94/mif/lga_polygon/macedon\ ranges/VMADMIN/POSTCODE_POLYGON.mid POSTCODE_POLYGON

注意,我们还使用-t_srs ogr2ogr选项将数据集重新投影到WGS84空间参考系统。

此命令的输出将如下所示:

Warning 6: Normalized/laundered field name: 'FEATURE_TYPE' to 'FEATURE_TY'
Warning 6: Normalized/laundered field name: 'FEATURE_QUALITY_ID' to 'FEATURE_QU'
Warning 6: Normalized/laundered field name: 'PFI_CREATED' to 'PFI_CREATE'
Warning 6: Normalized/laundered field name: 'UFI_CREATED' to 'UFI_CREATE'

此输出表明某些字段名称已被截断,以适应shapefile中的属性长度仅为10个字符的约束。

现在,您将拥有组成postcode_polygon.shp shapefile集的一组文件。我们可以通过发出以下命令来检查它们:

$ ogrinfo -so postcode_polygon.shp postcode_polygon

输出将类似于我们在检查从以下位置转换的MapInfo文件时在上面看到的输出::

INFO: Open of `postcode_polygon.shp'
      using driver `ESRI Shapefile' successful.

Layer name: postcode_polygon
Geometry: Polygon
Feature Count: 26
Extent: (144.030296, -37.898156) - (145.101137, -36.888878)
Layer SRS WKT:
GEOGCS["GCS_WGS_1984",
    DATUM["WGS_1984",
        SPHEROID["WGS_84",6378137,298.257223563]],
    PRIMEM["Greenwich",0],
    UNIT["Degree",0.017453292519943295]]
PFI: String (10.0)
POSTCODE: String (4.0)
FEATURE_TY: String (6.0)
FEATURE_QU: String (20.0)
PFI_CREATE: Date (10.0)
UFI: Real (12.0)
UFI_CREATE: Date (10.0)
UFI_OLD: Real (12.0)

现在可以通过普通上传程序将这些文件加载到GeoNode实例中。

访问GeoNode中的上载页面,拖放组成使用GDAL ogr2ogr命令(postcode_polygon.dbf、postcode_polygon.prj、postcode_polygon.shp、postcode_polygon.shx)生成的shapefile的文件。根据需要授予权限,然后单击“上传文件”按钮。

../../_images/upload_shapefile.png

一旦导入过程完成,您就可以直接进入数据集信息页面(“Layer Info”按钮),或编辑该数据集的元数据(“Edit Metadata”按钮),或管理该数据集的样式(“Manage Styles”)。

../../_images/layer_info_vector.png

GDAL(栅格数据)

让我们看几个关于如何将栅格数据转换成不同格式和/或处理它以获得最佳性能的示例。

参考文献:

  1. https://geoserver.geo-solutions.it/edu/en/raster_data/processing.html

  2. https://geoserver.geo-solutions.it/edu/en/raster_data/advanced_gdal/

栅格数据转换:将Arc/Info二进制和ASCII栅格数据转换为GeoTIFF格式。

让我们假设我们有一个压缩为存档的示例ASCII网格文件。

# Un-tar the files
tar -xvf sample_asc.tar

您的文件系统上将保留以下文件:

|-- batemans_ele
|   |-- dblbnd.adf
|   |-- hdr.adf
|   |-- metadata.xml
|   |-- prj.adf
|   |-- sta.adf
|   |-- w001001.adf
|   |-- w001001x.adf
|-- batemans_elevation.asc

该文件 batemans_elevation.asc 是Arc/Info ASCII栅格文件,而BateMans_ele目录中的文件是Arc/Info二进制栅格文件。

您可以使用 gdalinfo 命令通过执行以下命令检查这两个文件:

gdalinfo batemans_elevation.asc

输出应如下所示:

Driver: AAIGrid/Arc/Info ASCII Grid
Files: batemans_elevation.asc
Size is 155, 142
Coordinate System is `'
Origin = (239681.000000000000000,6050551.000000000000000)
Pixel Size = (100.000000000000000,-100.000000000000000)
Corner Coordinates:
Upper Left  (  239681.000, 6050551.000)
Lower Left  (  239681.000, 6036351.000)
Upper Right (  255181.000, 6050551.000)
Lower Right (  255181.000, 6036351.000)
Center      (  247431.000, 6043451.000)
Band 1 Block=155x1 Type=Float32, ColorInterp=Undefined
    NoData Value=-9999

然后,您可以通过执行以下命令来检查贝特曼_ELEL文件:

gdalinfo batemans_ele

这应该是相应的输出:

Driver: AIG/Arc/Info Binary Grid
Files: batemans_ele
    batemans_ele/dblbnd.adf
    batemans_ele/hdr.adf
    batemans_ele/metadata.xml
    batemans_ele/prj.adf
    batemans_ele/sta.adf
    batemans_ele/w001001.adf
    batemans_ele/w001001x.adf
Size is 155, 142
Coordinate System is:
PROJCS["unnamed",
    GEOGCS["GDA94",
        DATUM["Geocentric_Datum_of_Australia_1994",
            SPHEROID["GRS 1980",6378137,298.257222101,
                AUTHORITY["EPSG","7019"]],
            TOWGS84[0,0,0,0,0,0,0],
            AUTHORITY["EPSG","6283"]],
        PRIMEM["Greenwich",0,
            AUTHORITY["EPSG","8901"]],
        UNIT["degree",0.0174532925199433,
            AUTHORITY["EPSG","9122"]],
        AUTHORITY["EPSG","4283"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",153],
    PARAMETER["scale_factor",0.9996],
    PARAMETER["false_easting",500000],
    PARAMETER["false_northing",10000000],
    UNIT["METERS",1]]
Origin = (239681.000000000000000,6050551.000000000000000)
Pixel Size = (100.000000000000000,-100.000000000000000)
Corner Coordinates:
Upper Left  (  239681.000, 6050551.000) (150d 7'28.35"E, 35d39'16.56"S)
Lower Left  (  239681.000, 6036351.000) (150d 7'11.78"E, 35d46'56.89"S)
Upper Right (  255181.000, 6050551.000) (150d17'44.07"E, 35d39'30.83"S)
Lower Right (  255181.000, 6036351.000) (150d17'28.49"E, 35d47'11.23"S)
Center      (  247431.000, 6043451.000) (150d12'28.17"E, 35d43'13.99"S)
Band 1 Block=256x4 Type=Float32, ColorInterp=Undefined
    Min=-62.102 Max=142.917
NoData Value=-3.4028234663852886e+38

您会注意到, batemans_elevation.asc 文件可以 not 包含投影信息,而 batemans_ele 文件可以。因此,让我们使用 batemans_ele 文件,并将其转换为GeoTiff以在GeoNode中使用。在此过程中,我们还会将此文件重新投影到WGS84中。这可以通过以下命令来完成。

gdalwarp -t_srs EPSG:4326 batemans_ele batemans_ele.tif

输出将向您显示转换的进度,当转换完成时,您将得到一个 batemans_ele.tif 您可以上载到GeoNode的文件。

您可以使用gdalinfo命令检查此文件:

gdalinfo batemans_ele.tif

这将产生以下输出:

Driver: GTiff/GeoTIFF
Files: batemans_ele.tif
Size is 174, 130
Coordinate System is:
GEOGCS["WGS 84",
    DATUM["WGS_1984",
        SPHEROID["WGS 84",6378137,298.257223563,
            AUTHORITY["EPSG","7030"]],
        AUTHORITY["EPSG","6326"]],
    PRIMEM["Greenwich",0],
    UNIT["degree",0.0174532925199433],
    AUTHORITY["EPSG","4326"]]
Origin = (150.119938943722502,-35.654598806259330)
Pixel Size = (0.001011114155919,-0.001011114155919)
Metadata:
    AREA_OR_POINT=Area
Image Structure Metadata:
    INTERLEAVE=BAND
Corner Coordinates:
Upper Left  ( 150.1199389, -35.6545988) (150d 7'11.78"E, 35d39'16.56"S)
Lower Left  ( 150.1199389, -35.7860436) (150d 7'11.78"E, 35d47' 9.76"S)
Upper Right ( 150.2958728, -35.6545988) (150d17'45.14"E, 35d39'16.56"S)
Lower Right ( 150.2958728, -35.7860436) (150d17'45.14"E, 35d47' 9.76"S)
Center      ( 150.2079059, -35.7203212) (150d12'28.46"E, 35d43'13.16"S)
Band 1 Block=174x11 Type=Float32, ColorInterp=Gray

栅格数据优化:优化和服务大栅格数据

(参考:https://geoserver.geo-solutions.it/edu/en/raster_data/advanced_gdal/example5.html)

在处理大型栅格数据集时,使用分块可能非常有用。

平铺允许将大型栅格数据集分解为可管理的部分,并且是定义和实现更高级别的栅格I/O接口的基础。

在此示例中,我们将使用 chiangMai_ortho_optimized 当前在泰语上可用的公共栅格数据集 CHIANG MAI Urban Flooding GeoNode platform

此数据集包含存储为RGBA GeoTiff的正射校正图像,该图像具有4个波段,其中3个用于RGB,1个用于透明度(Alpha通道)。

调用gdalinfo命令查看详细信息:

gdalinfo chiangMai_ortho.tif

它将产生以下结果:

Driver: GTiff/GeoTIFF
Files: chiangMai_ortho.tif
Size is 63203, 66211
Coordinate System is:
PROJCS["WGS 84 / UTM zone 47N",
    GEOGCS["WGS 84",
        DATUM["WGS_1984",
            SPHEROID["WGS 84",6378137,298.257223563,
                AUTHORITY["EPSG","7030"]],
            AUTHORITY["EPSG","6326"]],
        PRIMEM["Greenwich",0,
            AUTHORITY["EPSG","8901"]],
        UNIT["degree",0.0174532925199433,
            AUTHORITY["EPSG","9122"]],
        AUTHORITY["EPSG","4326"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",99],
    PARAMETER["scale_factor",0.9996],
    PARAMETER["false_easting",500000],
    PARAMETER["false_northing",0],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AXIS["Easting",EAST],
    AXIS["Northing",NORTH],
    AUTHORITY["EPSG","32647"]]
Origin = (487068.774750000040513,2057413.889810000080615)
Pixel Size = (0.028850000000000,-0.028850000000000)
Metadata:
AREA_OR_POINT=Area
TIFFTAG_SOFTWARE=pix4dmapper
Image Structure Metadata:
COMPRESSION=LZW
INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  (  487068.775, 2057413.890) ( 98d52'38.72"E, 18d36'27.34"N)
Lower Left  (  487068.775, 2055503.702) ( 98d52'38.77"E, 18d35'25.19"N)
Upper Right (  488892.181, 2057413.890) ( 98d53'40.94"E, 18d36'27.38"N)
Lower Right (  488892.181, 2055503.702) ( 98d53'40.98"E, 18d35'25.22"N)
Center      (  487980.478, 2056458.796) ( 98d53' 9.85"E, 18d35'56.28"N)
Band 1 Block=63203x1 Type=Byte, ColorInterp=Red
NoData Value=-10000
Mask Flags: PER_DATASET ALPHA
Band 2 Block=63203x1 Type=Byte, ColorInterp=Green
NoData Value=-10000
Mask Flags: PER_DATASET ALPHA
Band 3 Block=63203x1 Type=Byte, ColorInterp=Blue
NoData Value=-10000
Mask Flags: PER_DATASET ALPHA
Band 4 Block=63203x1 Type=Byte, ColorInterp=Alpha
NoData Value=-10000

如你所见,这个GeoTiff还没有贴上瓷砖。不过,对于访问子集而言,平铺可能会有所不同。使用平铺,数据按块存储和压缩(平铺),而不是逐行存储和压缩(剥离)。

在上面的命令输出中,可以看到每个带都有与图像(63203)的宽度和单位长度相同的块。下图中的网格显示的图像具有相同大小的瓷砖(左)和相同数量的条带(右)。要从红色子集读取数据,必须解压缩相交区域。

../../_images/tiled_vs_stripped.png

在平铺图像中,我们只需解压缩16个平铺,而在右侧的条带图像中,我们必须解压缩更多的条带。

无人机图像数据通常具有条带式结构,因此在大多数情况下,需要对其进行优化以提高性能。

让我们看一下用于优化GeoTiff的gdal_Translate命令:

gdal_translate -co TILED=YES -co COMPRESS=JPEG -co PHOTOMETRIC=YCBCR
            --config GDAL_TIFF_INTERNAL_MASK YES -b 1 -b 2 -b 3 -mask 4
            chiangMai_ortho.tif
            chiangMai_ortho_optimized.tif

注解

有关命令参数的详细信息,请参见https://geoserver.geo-solutions.it/edu/en/raster_data/advanced_gdal/example5.html

进程结束后,对生成的tif文件调用gdalinfo命令:

gdalinfo chiangMai_ortho_optimized.tif

以下应为结果:

Driver: GTiff/GeoTIFF
Files: chiangMai_ortho_optimized.tif
Size is 63203, 66211
Coordinate System is:
PROJCS["WGS 84 / UTM zone 47N",
    GEOGCS["WGS 84",
        DATUM["WGS_1984",
            SPHEROID["WGS 84",6378137,298.257223563,
                AUTHORITY["EPSG","7030"]],
            AUTHORITY["EPSG","6326"]],
        PRIMEM["Greenwich",0,
            AUTHORITY["EPSG","8901"]],
        UNIT["degree",0.0174532925199433,
            AUTHORITY["EPSG","9122"]],
        AUTHORITY["EPSG","4326"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",99],
    PARAMETER["scale_factor",0.9996],
    PARAMETER["false_easting",500000],
    PARAMETER["false_northing",0],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AXIS["Easting",EAST],
    AXIS["Northing",NORTH],
    AUTHORITY["EPSG","32647"]]
Origin = (487068.774750000040513,2057413.889810000080615)
Pixel Size = (0.028850000000000,-0.028850000000000)
Metadata:
AREA_OR_POINT=Area
TIFFTAG_SOFTWARE=pix4dmapper
Image Structure Metadata:
COMPRESSION=YCbCr JPEG
INTERLEAVE=PIXEL
SOURCE_COLOR_SPACE=YCbCr
Corner Coordinates:
Upper Left  (  487068.775, 2057413.890) ( 98d52'38.72"E, 18d36'27.34"N)
Lower Left  (  487068.775, 2055503.702) ( 98d52'38.77"E, 18d35'25.19"N)
Upper Right (  488892.181, 2057413.890) ( 98d53'40.94"E, 18d36'27.38"N)
Lower Right (  488892.181, 2055503.702) ( 98d53'40.98"E, 18d35'25.22"N)
Center      (  487980.478, 2056458.796) ( 98d53' 9.85"E, 18d35'56.28"N)
Band 1 Block=256x256 Type=Byte, ColorInterp=Red
NoData Value=-10000
Mask Flags: PER_DATASET
Band 2 Block=256x256 Type=Byte, ColorInterp=Green
NoData Value=-10000
Mask Flags: PER_DATASET
Band 3 Block=256x256 Type=Byte, ColorInterp=Blue
NoData Value=-10000
Mask Flags: PER_DATASET

我们的GeoTiff现在是256x256平铺,有3个波段和1位无数据掩码。

我们还可以使用gdaladdo命令向文件添加内部概述:

gdaladdo -r average chiangMai_ortho_optimized.tif 2 4 8 16 32 64 128 256 512

概视图是原始数据的副本版本,但重新采样到较低分辨率后,也可以使用各种算法进行压缩,压缩方式与原始数据集大致相同。

默认情况下,概视图采用与输入数据集相同的压缩类型和透明度遮罩(通过gdal_Translate命令应用),因此要指定的参数为:

  • -r average :计算所有非NODATA贡献像素的平均值

  • 2 4 8 16 32 64 128 256 512 :要构建的整体概述级别列表(从gdal版本2.3开始,构建概述不再需要级别)

再次调用gdalinfo命令:

gdalinfo chiangMai_ortho_optimized.tif

其结果是:

Driver: GTiff/GeoTIFF
Files: chiangMai_ortho_optimized.tif
Size is 63203, 66211
Coordinate System is:
PROJCS["WGS 84 / UTM zone 47N",
    GEOGCS["WGS 84",
        DATUM["WGS_1984",
            SPHEROID["WGS 84",6378137,298.257223563,
                AUTHORITY["EPSG","7030"]],
            AUTHORITY["EPSG","6326"]],
        PRIMEM["Greenwich",0,
            AUTHORITY["EPSG","8901"]],
        UNIT["degree",0.0174532925199433,
            AUTHORITY["EPSG","9122"]],
        AUTHORITY["EPSG","4326"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",99],
    PARAMETER["scale_factor",0.9996],
    PARAMETER["false_easting",500000],
    PARAMETER["false_northing",0],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AXIS["Easting",EAST],
    AXIS["Northing",NORTH],
    AUTHORITY["EPSG","32647"]]
Origin = (487068.774750000040513,2057413.889810000080615)
Pixel Size = (0.028850000000000,-0.028850000000000)
Metadata:
AREA_OR_POINT=Area
TIFFTAG_SOFTWARE=pix4dmapper
Image Structure Metadata:
COMPRESSION=YCbCr JPEG
INTERLEAVE=PIXEL
SOURCE_COLOR_SPACE=YCbCr
Corner Coordinates:
Upper Left  (  487068.775, 2057413.890) ( 98d52'38.72"E, 18d36'27.34"N)
Lower Left  (  487068.775, 2055503.702) ( 98d52'38.77"E, 18d35'25.19"N)
Upper Right (  488892.181, 2057413.890) ( 98d53'40.94"E, 18d36'27.38"N)
Lower Right (  488892.181, 2055503.702) ( 98d53'40.98"E, 18d35'25.22"N)
Center      (  487980.478, 2056458.796) ( 98d53' 9.85"E, 18d35'56.28"N)
Band 1 Block=256x256 Type=Byte, ColorInterp=Red
NoData Value=-10000
Overviews: 31602x33106, 15801x16553, 7901x8277, 3951x4139, 1976x2070, 988x1035, 494x518, 247x259, 124x130
Mask Flags: PER_DATASET
Overviews of mask band: 31602x33106, 15801x16553, 7901x8277, 3951x4139, 1976x2070, 988x1035, 494x518, 247x259, 124x130
Band 2 Block=256x256 Type=Byte, ColorInterp=Green
NoData Value=-10000
Overviews: 31602x33106, 15801x16553, 7901x8277, 3951x4139, 1976x2070, 988x1035, 494x518, 247x259, 124x130
Mask Flags: PER_DATASET
Overviews of mask band: 31602x3Results in:3106, 15801x16553, 7901x8277, 3951x4139, 1976x2070, 988x1035, 494x518, 247x259, 124x130
Band 3 Block=256x256 Type=Byte, ColorInterp=Blue
NoData Value=-10000
Overviews: 31602x33106, 15801x16553, 7901x8277, 3951x4139, 1976x2070, 988x1035, 494x518, 247x259, 124x130
Mask Flags: PER_DATASET
Overviews of mask band: 31602x33106, 15801x16553, 7901x8277, 3951x4139, 1976x2070, 988x1035, 494x518, 247x259, 124x130

请注意,已应用内部概视图的透明遮罩(其压缩不会显示在文件元数据中)。

无人机通常还提供另外两种类型的数据: DTM (Digital Terrain Model)DSM (Digital Surface Model)

这些数据需要不同的流程进行优化。让我们看一些示例,以便更好地理解如何使用gdal来完成该任务。

CHIANG MAI Urban Flooding GeoNode platform 平台,它当前可用于 chiangMai_dtm_optimized 数据集,让我们下载它的原始数据集。

此数据集应包含DTM文件 chiangMai_dtm.tif

对其调用gdalinfo命令:

gdalinfo chiangMai_dtm.tif

将显示以下信息:

Driver: GTiff/GeoTIFF
Files: chiangMai_dtm.tif
Size is 12638, 13240
Coordinate System is:
PROJCS["WGS 84 / UTM zone 47N",
    GEOGCS["WGS 84",
        DATUM["WGS_1984",
            SPHEROID["WGS 84",6378137,298.257223563,
                AUTHORITY["EPSG","7030"]],
            AUTHORITY["EPSG","6326"]],
        PRIMEM["Greenwich",0,
            AUTHORITY["EPSG","8901"]],
        UNIT["degree",0.0174532925199433,
            AUTHORITY["EPSG","9122"]],
        AUTHORITY["EPSG","4326"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",99],
    PARAMETER["scale_factor",0.9996],
    PARAMETER["false_easting",500000],
    PARAMETER["false_northing",0],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AXIS["Easting",EAST],
    AXIS["Northing",NORTH],
    AUTHORITY["EPSG","32647"]]
Origin = (487068.774750000040513,2057413.889810000080615)
Pixel Size = (0.144270000000000,-0.144270000000000)
Metadata:
AREA_OR_POINT=Area
TIFFTAG_SOFTWARE=pix4dmapper
Image Structure Metadata:
COMPRESSION=LZW
INTERLEAVE=BAND
Corner Coordinates:
Upper Left  (  487068.775, 2057413.890) ( 98d52'38.72"E, 18d36'27.34"N)
Lower Left  (  487068.775, 2055503.755) ( 98d52'38.77"E, 18d35'25.19"N)
Upper Right (  488892.059, 2057413.890) ( 98d53'40.94"E, 18d36'27.37"N)
Lower Right (  488892.059, 2055503.755) ( 98d53'40.98"E, 18d35'25.22"N)
Center      (  487980.417, 2056458.822) ( 98d53' 9.85"E, 18d35'56.28"N)
Band 1 Block=12638x1 Type=Float32, ColorInterp=Gray
NoData Value=-10000

阅读此图像可能非常慢,因为它尚未平铺。因此,如上所述,需要将其数据存储并压缩在瓦片中以提高性能。

以下gdal_Translate命令应适用于该目的:

gdal_translate -co TILED=YES -co COMPRESS=DEFLATE chiangMai_dtm.tif chiangMai_dtm_optimized.tif

当要压缩的数据由图像(ES.航空照片、真彩色卫星图像或彩色地图),您可以使用有损算法,如JPEG。我们现在正在压缩精度很重要的数据,波段数据类型为Float32,高程值不应更改,因此JPEG等有损算法不适用。JPEG通常只能用于字节数据(每通道8位),因此我们通过COMPRESS=DEFLATE创建选项选择了无损DEFATE压缩。

再次调用gdalinfo命令:

gdalinfo chiangMai_dtm_optimized.tif

我们可以观察到以下结果:

Driver: GTiff/GeoTIFF
Files: chiangMai_dtm_optimized.tif
Size is 12638, 13240
Coordinate System is:
PROJCS["WGS 84 / UTM zone 47N",
    GEOGCS["WGS 84",
        DATUM["WGS_1984",
            SPHEROID["WGS 84",6378137,298.257223563,
                AUTHORITY["EPSG","7030"]],
            AUTHORITY["EPSG","6326"]],
        PRIMEM["Greenwich",0,
            AUTHORITY["EPSG","8901"]],
        UNIT["degree",0.0174532925199433,
            AUTHORITY["EPSG","9122"]],
        AUTHORITY["EPSG","4326"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",99],
    PARAMETER["scale_factor",0.9996],
    PARAMETER["false_easting",500000],
    PARAMETER["false_northing",0],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AXIS["Easting",EAST],
    AXIS["Northing",NORTH],
    AUTHORITY["EPSG","32647"]]
Origin = (487068.774750000040513,2057413.889810000080615)
Pixel Size = (0.144270000000000,-0.144270000000000)
Metadata:
AREA_OR_POINT=Area
TIFFTAG_SOFTWARE=pix4dmapper
Image Structure Metadata:
COMPRESSION=DEFLATE
INTERLEAVE=BAND
Corner Coordinates:
Upper Left  (  487068.775, 2057413.890) ( 98d52'38.72"E, 18d36'27.34"N)
Lower Left  (  487068.775, 2055503.755) ( 98d52'38.77"E, 18d35'25.19"N)
Upper Right (  488892.059, 2057413.890) ( 98d53'40.94"E, 18d36'27.37"N)
Lower Right (  488892.059, 2055503.755) ( 98d53'40.98"E, 18d35'25.22"N)
Center      (  487980.417, 2056458.822) ( 98d53' 9.85"E, 18d35'56.28"N)
Band 1 Block=256x256 Type=Float32, ColorInterp=Gray
NoData Value=-10000

我们还需要通过gdaladdo命令创建概述:

gdaladdo -r nearest chiangMai_dtm_optimized.tif 2 4 8 16 32 64

与上一个示例不同,概视图将使用 最近重采样算法 。这是由于我们所代表的数据的性质:我们不应该考虑两个高程值之间的平均值,而是简单地考虑更接近的那个,在保留原始数据方面更可靠。

再次调用gdalinfo命令:

gdalinfo chiangMai_dtm_optimized.tif

我们可以看到以下信息:

Driver: GTiff/GeoTIFF
Files: chiangMai_dtm_optimized.tif
Size is 12638, 13240
Coordinate System is:
PROJCS["WGS 84 / UTM zone 47N",
    GEOGCS["WGS 84",
        DATUM["WGS_1984",
            SPHEROID["WGS 84",6378137,298.257223563,
                AUTHORITY["EPSG","7030"]],
            AUTHORITY["EPSG","6326"]],
        PRIMEM["Greenwich",0,
            AUTHORITY["EPSG","8901"]],
        UNIT["degree",0.0174532925199433,
            AUTHORITY["EPSG","9122"]],
        AUTHORITY["EPSG","4326"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",99],
    PARAMETER["scale_factor",0.9996],
    PARAMETER["false_easting",500000],
    PARAMETER["false_northing",0],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AXIS["Easting",EAST],
    AXIS["Northing",NORTH],
    AUTHORITY["EPSG","32647"]]
Origin = (487068.774750000040513,2057413.889810000080615)
Pixel Size = (0.144270000000000,-0.144270000000000)
Metadata:
AREA_OR_POINT=Area
TIFFTAG_SOFTWARE=pix4dmapper
Image Structure Metadata:
COMPRESSION=DEFLATE
INTERLEAVE=BAND
Corner Coordinates:
Upper Left  (  487068.775, 2057413.890) ( 98d52'38.72"E, 18d36'27.34"N)
Lower Left  (  487068.775, 2055503.755) ( 98d52'38.77"E, 18d35'25.19"N)
Upper Right (  488892.059, 2057413.890) ( 98d53'40.94"E, 18d36'27.37"N)
Lower Right (  488892.059, 2055503.755) ( 98d53'40.98"E, 18d35'25.22"N)
Center      (  487980.417, 2056458.822) ( 98d53' 9.85"E, 18d35'56.28"N)
Band 1 Block=256x256 Type=Float32, ColorInterp=Gray
NoData Value=-10000
Overviews: 6319x6620, 3160x3310, 1580x1655, 790x828, 395x414, 198x207

已创建概述。默认情况下,它们继承原始数据集的相同压缩类型(gdalinfo输出中没有证据)。

其他栅格数据使用案例

以编程方式处理栅格数据集

在本节中,我们将提供一组 shell 脚本,这对于以编程方式批处理大量栅格数据集可能非常有用。

  1. process_gray.sh

    for filename in *.tif*; do echo gdal_translate -co TILED=YES -co COMPRESS=DEFLATE $filename ${filename//.tif/.optimized.tif}; done > gdal_translate.sh
    chmod +x gdal_translate.sh
    ./gdal_translate.sh
    
    for filename in *.optimized.tif*; do echo gdaladdo -r nearest $filename 2 4 8 16 32 64 128 256 512; done > gdaladdo.sh
    for filename in *.optimized.tif*; do echo mv \"$filename\" \"${filename//.optimized.tif/.tif}\"; done > rename.sh
    chmod +x *.sh
    ./gdaladdo.sh
    ./rename.sh
    
  2. process_rgb.sh

    for filename in *.tif*; do echo gdal_translate -co TILED=YES -co COMPRESS=JPEG -co PHOTOMETRIC=YCBCR -b 1 -b 2 -b 3 $filename ${filename//.tif/.optimized.tif}; done > gdal_translate.sh
    chmod +x gdal_translate.sh
    ./gdal_translate.sh
    
    for filename in *.optimized.tif*; do echo gdaladdo -r average $filename 2 4 8 16 32 64 128 256 512; done > gdaladdo.sh
    for filename in *.optimized.tif*; do echo mv \"$filename\" \"${filename//.optimized.tif/.tif}\"; done > rename.sh
    chmod +x *.sh
    ./gdaladdo.sh
    ./rename.sh
    
  3. process_rgb_alpha.sh

    for filename in *.tif*; do echo gdal_translate -co TILED=YES -co COMPRESS=JPEG -co PHOTOMETRIC=YCBCR --config GDAL_TIFF_INTERNAL_MASK YES -b 1 -b 2 -b 3 -mask 4 $filename ${filename//.tif/.optimized.tif}; done > gdal_translate.sh
    chmod +x gdal_translate.sh
    ./gdal_translate.sh
    
    for filename in *.optimized.tif*; do echo gdaladdo -r average $filename 2 4 8 16 32 64 128 256 512; done > gdaladdo.sh
    for filename in *.optimized.tif*; do echo mv \"$filename\" \"${filename//.optimized.tif/.tif}\"; done > rename.sh
    chmod +x *.sh
    ./gdaladdo.sh
    ./rename.sh
    
  4. process_rgb_palette.sh

    for filename in *.tif*; do echo gdal_translate -co TILED=YES -co COMPRESS=DEFLATE $filename ${filename//.tif/.optimized.tif}; done > gdal_translate.sh
    chmod +x gdal_translate.sh
    ./gdal_translate.sh
    
    for filename in *.optimized.tif*; do echo gdaladdo -r average $filename 2 4 8 16 32 64 128 256 512; done > gdaladdo.sh
    for filename in *.optimized.tif*; do echo mv \"$filename\" \"${filename//.optimized.tif/.tif}\"; done > rename.sh
    chmod +x *.sh
    ./gdaladdo.sh
    ./rename.sh
    

创建用户和超级用户

您的第一步将是创建一个用户。有三个选项可供选择,具体取决于您要创建的用户类型,您可以选择不同的选项。我们将从创建一个 超级用户 ,因为这个用户是最重要的。超级用户无需显式分配即可拥有所有权限。

创建超级用户(在Linux中)的最简单方法是打开您的终端并键入:

$ DJANGO_SETTINGS_MODULE=geonode.settings python manage.py createsuperuser

注解

如果您启用了 local_settings.py 该命令将更改如下:

$ DJANGO_SETTINGS_MODULE=geonode.local_settings python manage.py createsuperuser

系统将询问您的用户名(在本教程中,我们将称为您现在创建的超级用户 your_superuser )、电子邮件地址和密码。

现在您已经创建了超级用户,您应该熟悉 Django管理界面 。作为超级用户,您可以访问此界面,您可以在其中管理用户、数据集、权限等。要了解有关此接口的更多详细信息,请查看此链接。现在,只需遵循步骤就足够了。去参加 Django管理界面 ,请转到您的Geonode网站并 登录 使用 your_superuser 。登录后,您的用户名将出现在右上角。点击它,将会出现以下菜单:

../../_images/menu_admin.png

单击 管理员 使界面显示。

../../_images/admin_interface.png

Auth -> 用户 您将看到当前存在的所有用户。在你的情况下,它只会是 your_superuser 。单击它,您将看到关于 个人信息 ,一开 权限 还有一个开着 重要日期 。目前,关于 权限 是最重要的。

../../_images/permissions_django_admin.png

如您所见,有三个框可以选中和取消选中。因为您已经创建了超级用户,所以所有三个框都是默认选中的。如果只有那个盒子 活动的 将被选中,则该用户将不是超级用户,并且将无法访问 Django管理界面 (该选项仅适用于具有 员工 状态)。因此,请牢记以下两点:

  • 超级用户能够访问 Django管理界面 并且他对上传到GeoNode的数据拥有所有权限。

  • 普通用户(从GeoNode界面创建)仅具有 活动的 默认情况下,权限。用户将无法访问 Django管理界面 并且必须为他添加某些权限。

到目前为止,我们只创建了超级用户。那么如何创建普通用户呢?您有两个选择:

  1. Django管理界面

    首先,我们将通过 Django管理界面 因为我们还开着。所以还是回去吧 Auth -> 用户 你应该在右边找到一个按钮,上面写着 添加用户

    ../../_images/add_user.png

    点击它,将出现一张要填写的表格。将新用户命名为test_user,选择密码,然后单击 save 在网站的右下角。

    ../../_images/add_test_user.png

    现在,您应该被定向到您可以在其中更改用户权限的站点 test_user 。仅作为默认设置 活动的 已选中。如果您希望此用户也能够参加此管理界面,您还可以选中 员工身份 。但是现在我们让设置保持原样!

    要测试是否成功创建了新用户,请返回GeoNode网页并尝试登录。

  2. GeoNode网站

    要创建普通用户,您也可以只使用GeoNode网站。如果使用发行版安装GeoNode,则应

    请参阅 寄存器 按钮在顶部,在 登录 按钮(您可能需要在此之前注销)。

    ../../_images/register.png

    点击按钮,将再次出现一张表格供您填写。此用户将命名为 geonode_user

    ../../_images/sign_up_test_user.png

    通过击打 注册 用户将注册,默认情况下仅注册状态 活动的

批处理同步权限

GeoNode提供了非常有用的管理命令 set_layers_permisions 允许管理员容易地向一个或多个数据集上的组和用户添加/移除权限。

这个 set_layers_permisions 命令参数为:

  • 权限 要设置/取消设置-->READ(R)、WRITE(W)、Download(D)、Owner(O)

    READ_PERMISSIONS = [
        'view_resourcebase'
    ]
    WRITE_PERMISSIONS = [
        'change_layer_data',
        'change_layer_style',
        'change_resourcebase_metadata'
    ]
    DOWNLOAD_PERMISSIONS = [
        'download_resourcebase'
    ]
    OWNER_PERMISSIONS = [
        'change_resourcebase',
        'delete_resourcebase',
        'change_resourcebase_permissions',
        'publish_resourcebase'
    ]
    
  • 资源 (数据集)将分配哪些权限-->键入数据集标题(对带有空格的标题使用引号),可以使用空格分隔符键入多个选项,如果未提供标题,将考虑所有数据集

  • 用户 权限将分配给谁,可以使用空格分隔符键入多个选项

  • 群组 权限将分配给谁,可以使用空格分隔符键入多个选项

  • 删除 标志(可选),表示将取消设置权限

使用示例:

  1. 分配 对数据集的权限 layer_X数据集Y 给用户 user_Auser_B 对这个团体来说也是如此 group_C

    python manage.py set_layers-permissions -p write -u user_A user_B -g group_C -r layer_X 'Dataset Y'
    
  2. 分配 所有者 组对所有数据集的权限 group_C

    python manage.py set_layers-permissions -p owner -g group_C
    
  3. 取消设置 下载 对数据集的权限 layer_X 对于用户而言 user_A

    python manage.py set_layers-permissions -p download -u user_A -r layer_X -d
    

同样的功能,但有一些限制,也可以从 Admin Dashboard >> Datasets

../../_images/layer_batch_perms_admin.png

名为的操作 Set Datasets permissions 从列表中可用,将管理员重定向到一个表单,以设置/取消设置所选数据集的读取、写入、下载和所有权权限。

../../_images/layer_batch_perms_form.png

删除某些GeoNode资源

这个 delete_resources Management Command 允许删除满足特定条件的资源,该条件以序列化Django q()表达式的形式指定。

首先我们来看一下 --help 的选项 delete_resources 管理命令,以便检查所有命令选项和功能。

DJANGO_SETTINGS_MODULE=geonode.settings python manage.py delete_resources --help

注解

如果您启用了 local_settings.py 该命令将更改如下:

DJANGO_SETTINGS_MODULE=geonode.local_settings python manage.py delete_resources --help

这将产生以下输出:

usage: manage.py delete_resources [-h] [-c CONFIG_PATH]
                                  [-l LAYER_FILTERS [LAYER_FILTERS ...]]
                                  [-m MAP_FILTERS [MAP_FILTERS ...]]
                                  [-d DOCUMENT_FILTERS [DOCUMENT_FILTERS ...]]
                                  [--version] [-v {0,1,2,3}]
                                  [--settings SETTINGS]
                                  [--pythonpath PYTHONPATH] [--traceback]
                                  [--no-color] [--force-color]

Delete resources meeting a certain condition

optional arguments:
  -h, --help            show this help message and exit
  -c CONFIG_PATH, --config CONFIG_PATH
                        Configuration file path. Default is:
                        delete_resources.json
  -l LAYER_FILTERS [LAYER_FILTERS ...], --layer_filters LAYER_FILTERS [LAYER_FILTERS ...]
  -m MAP_FILTERS [MAP_FILTERS ...], --map_filters MAP_FILTERS [MAP_FILTERS ...]
  -d DOCUMENT_FILTERS [DOCUMENT_FILTERS ...], --document_filters DOCUMENT_FILTERS [DOCUMENT_FILTERS ...]
  --version             show program's version number and exit
  -v {0,1,2,3}, --verbosity {0,1,2,3}
                        Verbosity level; 0=minimal output, 1=normal output,
                        2=verbose output, 3=very verbose output
  --settings SETTINGS   The Python path to a settings module, e.g.
                        "myproject.settings.main". If this isn't provided, the
                        DJANGO_SETTINGS_MODULE environment variable will be
                        used.
  --pythonpath PYTHONPATH
                        A directory to add to the Python path, e.g.
                        "/home/djangoprojects/myproject".
  --traceback           Raise on CommandError exceptions
  --no-color            Don't colorize the command output.
  --force-color         Force colorization of the command output.

有两种方法可以声明q()表达式,过滤哪些资源应该删除:

  1. 使用JSON配置文件:传递 -c 参数指定JSON配置文件的路径。

  • 示例1 :配置文件的相对路径(到 manage.py )

    DJANGO_SETTINGS_MODULE=geonode.settings python manage.py delete_resources -c geonode/base/management/commands/delete_resources.json
    
  • 示例2 :配置文件的绝对路径

    DJANGO_SETTINGS_MODULE=geonode.settings python manage.py delete_resources -c /home/User/Geonode/configs/delete_resources.json
    
  1. 使用CLI:通过 -l -d -m 列出每个资源(数据集、文档、地图)的参数

  • 示例3 :删除没有配置文件的资源

    DJANGO_SETTINGS_MODULE=geonode.settings python manage.py delete_resources -l 'Q(pk__in: [1, 2]) | Q(title__icontains:"italy")' 'Q(owner__name=admin)' -d '*' -m "Q(pk__in=[1, 2])"
    

配置文件

JSON配置文件应该包含单个 filters 对象,该对象由 Datasetmapdocument 列表。每个列表指定应用于相应查询集的过滤条件,定义将删除哪些项目。筛选器被求值并直接插入Django.filter()方法,这意味着作为单独列表项出现的筛选器将被视为AND条件。创建或查询的步骤 | 应该使用运算符。有关更多信息,请查看Django [文档] (https://docs.djangoproject.com/en/3.2/topics/db/queries/#complex-lookups-with-q-objects)).唯一的例外是传递一个带有 '*' 这将导致删除该资源的所有查询集。

  • 示例4 :配置文件的示例内容,它将删除ID为%1、%2和%3的数据集,即 admin 用户,以及所有定义的映射。

    {
      "filters": {
      "Dataset": [
          "Q(pk__in=[1, 2, 3]) | Q(title__icontains='italy')",
          "Q(user__name=admin)"
        ],
      "map": ["*"],
      "document": []
      }
    }
    

CLI

可以使用指定CLI配置 -l -d -m 列出参数,这些参数实际上是配置JSON文件的转换。 -l -d -m 参数的求值方式与示例4中的filters.Dataset、filters.map和filter.document相同。以下示例的结果与示例4等效:

  • 示例5 :示例CLI配置,它将删除ID为1、2和3的数据集以及所有映射。

    DJANGO_SETTINGS_MODULE=geonode.settings python manage.py delete_resources -l 'Q(pk__in: [1, 2, 3]) | Q(title__icontains:"italy")' 'Q(owner__name=admin)' -m '*'