# Django 3.2.11.dev 文档

# 安装地理空间库

GeoDjango 使用和／或提供以下开源地理空间库的接口：

程序 | 描述 | 必须的 | 支持的版本
--- | --- | --- | ---
GEOS | 几何引擎开源 | 是 | 3.9, 3.8, 3.7, 3.6, 3.5
PROJ | 制图投影库 | 是（仅 PostgreSQL 和 SQLite） | 7.x. 6.x, 5.x, 4.x
GDAL | 地理空间数据抽象库 | 是 | 3.2, 3.1, 3.0, 2.4, 2.3, 2.2, 2.1, 2.0
GeoIP | 基于 IP 的地理定位库 | 否 | 2
PostGIS | PostgreSQL 的空间扩展 | 是（仅 PostgreSQL） | 3.0, 2.5, 2.4, 2.3
SpatiaLite | SQLite 的空间扩展 | 是（仅 SQLite） | 4.3

请注意，这些库的老版本或最新版本可能也能与 GeoDjango 完全兼容。你的里程数可能会有所不同。

注解

GeoDjango 的 GEOS、GDAL 和 GeoIP 接口可以独立于 Django 使用。 换句话说，不需要数据库或配置文件 —— 像正常的那样从 `django.contrib.gis` 导入它们。

在 Debian／Ubuntu 上，我们建议您安装以下软件包，它们将直接或通过依赖关系安装所需的地理空间库：

    $ sudo apt-get install binutils libproj-dev gdal-bin

如果你使用的是 macOS 或 Windows，也请参考特定平台的说明。

## 从源码构建

在 UNIX 和 GNU／Linux 系统上从源码安装时，请仔细按照安装说明，并按照给定的顺序安装库。 如果使用 MySQL 或 Oracle 作为空间数据库，则只需要 GEOS。

注解

在 Linux 平台上，可能需要在安装每个库后运行 `ldconfig` 命令。例如：

    $ sudo make install
    $ sudo ldconfig

注解

macOS 用户必须安装 Xcode 才能从源码编译软件。

### GEOS

GEOS 是一个用于执行几何运算的 C++ 库，是 GeoDjango 默认使用的内部几何表示法（它的背后是 “惰性” 的几何图形）。 具体来说，在 Python 中使用 ctypes 直接调用 C API 库（如 `libgeos_c.so`）。

首先，从 GEOS 网站下载 GEOS，并解压源文件：

    $ wget https://download.osgeo.org/geos/geos-X.Y.Z.tar.bz2
    $ tar xjf geos-X.Y.Z.tar.bz2

接下来，切换到解压 GEOS 的目录下，运行配置脚本、编译、安装：

    $ cd geos-X.Y.Z
    $ ./configure
    $ make
    $ sudo make install
    $ cd ..

#### 错误调试

##### 找不到 GEOS 库

当 GeoDjango 找不到 GEOS 时，就会出现这个错误：

    ImportError: Could not find the GEOS library (tried "geos_c"). Try setting GEOS_LIBRARY_PATH in your settings.

最常见的解决方案是正确配置你的 库环境配置 或 在你的配置中设置 GEOS_LIBRARY_PATH。

如果使用 GEOS 的二进制包（例如，在 Ubuntu 上），你可能需要 安装 binutils。

##### `GEOS_LIBRARY_PATH`

如果你的 GEOS 库在非标准位置，或者你不想修改系统的库路径，那么可以在你的 Django 配置文件中添加 `GEOS_LIBRARY_PATH` 配置，并将 GEOS C 库的完整路径添加进去。 例如：

    GEOS_LIBRARY_PATH = '/home/bob/local/lib/libgeos_c.so'

注解

这个配置必须是 C 共享库的 完整 路径；换句话说，你要使用 `libgeos_c.so`，而不是 `libgeos.so`。

另见 我的日志中充满了与 GEOS 有关的错误。

### PROJ

PROJ is a library for converting geospatial data to different coordinate reference systems.

First, download the PROJ source code:

    $ wget https://download.osgeo.org/proj/proj-X.Y.Z.tar.gz

... and datum shifting files (download `proj-datumgrid-X.Y.tar.gz` for PROJ < 7.x) [1]:

    $ wget https://download.osgeo.org/proj/proj-data-X.Y.tar.gz

Next, untar the source code archive, and extract the datum shifting files in the `data` subdirectory (use `nad` subdirectory for PROJ < 6.x). This must be done prior to configuration:

    $ tar xzf proj-X.Y.Z.tar.gz
    $ cd proj-X.Y.Z/data
    $ tar xzf ../../proj-data-X.Y.tar.gz
    $ cd ..

Finally, configure, make and install PROJ:

    $ ./configure
    $ make
    $ sudo make install
    $ cd ..

### GDAL

GDAL 是一个优秀的开源地理空间库，它支持读取大多数矢量和栅格空间数据格式。目前 GeoDjango 只支持 GDAL 的矢量数据 的功能 [2] 。 在构建 GDAL 之前，应该安装 GEOS 和 PROJ。

首先下载最新的 GDAL 版本，解压压缩包：

    $ wget https://download.osgeo.org/gdal/X.Y.Z/gdal-X.Y.Z.tar.gz
    $ tar xzf gdal-X.Y.Z.tar.gz
    $ cd gdal-X.Y.Z

配置、编译和安装：

    $ ./configure
    $ make # Go get some coffee, this takes a while.
    $ sudo make install
    $ cd ..

注解

因为 GeoDjango 有自己的 Python 接口，所以前面的说明并没有构建 GDAL 自己的 Python 绑定。当运行 `configure` 时，可以通过添加 `--with-python` 标志来构建绑定。关于 GDAL 的绑定的更多信息，请参见 GDAL/OGR In Python 。

如果你有任何问题，请参见下面的故障排除部分，以获得建议和解决方案。

#### 错误调试

##### 找不到 GDAL 库

当 GeoDjango 找不到 GDAL 库时，在你的配置中设置你的 库环境配置 或 GDAL_LIBRARY_PATH。

##### `GDAL_LIBRARY_PATH`

如果你的 GDAL 库在非标准位置，或者你不想修改系统的库路径，那么可以在你的 Django 配置文件中添加 `GDAL_LIBRARY_PATH` 设置，并添加 GDAL 库的完整路径。 例如：

    GDAL_LIBRARY_PATH = '/home/sue/local/lib/libgdal.so'

脚注

[1] | The datum shifting files are needed for converting data to and from certain projections. For example, the PROJ string for the Google projection (900913 or 3857) requires the `null` grid file only included in the extra datum shifting files. It is easier to install the shifting files now, then to have debug a problem caused by their absence later.

[2] | 具体来说，GeoDjango 提供了对 OGR 库的支持，这是 GDAL 的一个组件。