# Dokumentasi Django 6.0.7

# API GDAL

## Ikhtisar

GDAL stands for Geospatial Data Abstraction Library, and is a veritable "Swiss army knife" of GIS data functionality. A subset of GDAL is the OGR Simple Features Library, which specializes in reading and writing vector geographic data in a variety of standard formats.

GeoDjango menyediakan antarmuka python tingkat-tinggi untuk beberapa dari kemampuan dari OGR, termasuk membaca dan perubahan kordinat dari data spasial vektor dan dukungan minimal untuk fitur-fitur GDAL dengan sehubungan data (gambar) raster.

Catatan

Meskipun modul dinamakan `gdal`, GeoDjango hanya mendukung beberapa kemampuan dari OGR dan fitur-fitur raster GDAL saat ini.

### Data Contoh

The GDAL/OGR tools described here are designed to help you read in your geospatial data, in order for most of them to be useful you have to have some data to work with. If you're starting out and don't yet have any data of your own to use, GeoDjango tests contain a number of data sets that you can use for testing. You can download them here:

    $ wget https://raw.githubusercontent.com/django/django/main/tests/gis_tests/data/cities/cities.{shp,prj,shx,dbf}
    $ wget https://raw.githubusercontent.com/django/django/main/tests/gis_tests/data/rasters/raster.tif

## Vector Data Source Object

### `DataSource`

`DataSource` is a wrapper for the OGR data source object that supports reading data from a variety of OGR-supported geospatial file formats and data sources using a consistent interface. Each data source is represented by a `DataSource` object which contains one or more layers of data. Each layer, represented by a `Layer` object, contains some number of geographic features (`Feature`), information about the type of features contained in that layer (e.g. points, polygons, etc.), as well as the names and types of any additional fields (`Field`) of data that may be associated with each feature in that layer.

class DataSource(ds_input, encoding='utf-8')

  Pembangun untuk `DataSource` hanya membutuhkan satu parameter: jalur dari berkas anda ingin baca. Bagaimanapun, OGR juga mendukung beragam sumber data lebih rumit, termasuk basisdata, yang mungkin diakses dengan melewatkan string nama khusus daripada jalur. Untuk informasi lebih, lihat dokumentasi OGR Vector Formats. Sifat `name` dari sebuah instance `DataSource` memberikan nama OGR dari sumber data pokok yang itu sedang gunakan.

  Pilihan parameter `encoding` mengizinkan anda menentukan penyandian bukan-standar dari string di sumber. Ini khususnya berguna ketika anda mendapatkan pengecualian `DjangoUnicodeDecodeError` selagi membaca nilai bidang.

  Once you've created your `DataSource`, you can find out how many layers of data it contains by accessing the `layer_count` property, or (equivalently) by using the `len()` function. For information on accessing the layers of data themselves, see the next section:

      >>> from django.contrib.gis.gdal import DataSource
      >>> ds = DataSource("/path/to/your/cities.shp")
      >>> ds.name
      '/path/to/your/cities.shp'
      >>> ds.layer_count  # This file only contains one layer
      1

  layer_count

  Mengembalikan sejumlah lapisan di sumber data.

  name

  Mengembalikan nama dari sumber data.

### `Lapisan`

class Layer

  `Layer` adalah sebuah pembungkus untuk lapisan dari data di obyek `DataSource`. Anda tidak pernah membuat obyek `Layer` secara langsung. Sebagai gantinya, anda mengambil mereka dari obyek `DataSource`, yang pada dasarnya wadah standar Python dari obyek `Layer`. Sebagai contoh, anda dapat mengakses lapisan khusus dengan indeksnya (misalnya `ds[0]` untuk mengakses lapisan pertama), atau anda dapat mengulang terhadap semua lapisan di wadah dalam perulangan `loop`. `Layer` itu sendiri bertindak sebagai sebuah wadah untuk fitur-fitur geometris.

  Typically, all the features in a given layer have the same geometry type. The `geom_type` property of a layer is an `OGRGeomType` that identifies the feature type. We can use it to print out some basic information about each layer in a `DataSource`:

      >>> for layer in ds:
      ...     print('Layer "%s": %i %ss' % (layer.name, len(layer), layer.geom_type.name))
      ...
      Layer "cities": 3 Points

  The example output is from the cities data source, loaded above, which evidently contains one layer, called `"cities"`, which contains three point features. For simplicity, the examples below assume that you've stored that layer in the variable `layer`:

      >>> layer = ds[0]

  name

  Mengembalikan nama lapisan ini di sumber data.

      >>> layer.name
      'cities'

  num_feat

  Returns the number of features in the layer. Same as `len(layer)`:

      >>> layer.num_feat
      3

  geom_type

  Returns the geometry type of the layer, as an `OGRGeomType` object:

      >>> layer.geom_type.name
      'Point'

  num_fields

  Returns the number of fields in the layer, i.e the number of fields of data associated with each feature in the layer:

      >>> layer.num_fields
      4

  fields

  Returns a list of the names of each of the fields in this layer:

      >>> layer.fields
      ['Name', 'Population', 'Density', 'Created']

  Returns a list of the data types of each of the fields in this layer. These are subclasses of `Field`, discussed below:

      >>> [ft.__name__ for ft in layer.field_types]
      ['OFTString', 'OFTReal', 'OFTReal', 'OFTDate']

  field_widths

  Returns a list of the maximum field widths for each of the fields in this layer:

      >>> layer.field_widths
      [80, 11, 24, 10]

  field_precisions

  Returns a list of the numeric precisions for each of the fields in this layer. This is meaningless (and set to zero) for non-numeric fields:

      >>> layer.field_precisions
      [0, 0, 15, 0]

  extent

  Returns the spatial extent of this layer, as an `Envelope` object:

      >>> layer.extent.tuple
      (-104.609252, 29.763374, -95.23506, 38.971823)

  srs

  Property that returns the `SpatialReference` associated with this layer:

      >>> print(layer.srs)
      GEOGCS["GCS_WGS_1984",
          DATUM["WGS_1984",
              SPHEROID["WGS_1984",6378137,298.257223563]],
          PRIMEM["Greenwich",0],
          UNIT["Degree",0.017453292519943295]]

  Jika `Layer` tidak mempunyai informasi acuan spasial terkait dengan itu, `` None`` dikembalikan.

  spatial_filter

  Property that may be used to retrieve or set a spatial filter for this layer. A spatial filter can only be set with an `OGRGeometry` instance, a 4-tuple extent, or `None`. When set with something other than `None`, only features that intersect the filter will be returned when iterating over the layer:

      >>> print(layer.spatial_filter)
      None
      >>> print(len(layer))
      3
      >>> [feat.get("Name") for feat in layer]
      ['Pueblo', 'Lawrence', 'Houston']
      >>> ks_extent = (-102.051, 36.99, -94.59, 40.00)  # Extent for state of Kansas
      >>> layer.spatial_filter = ks_extent
      >>> len(layer)
      1
      >>> [feat.get("Name") for feat in layer]
      ['Lawrence']
      >>> layer.spatial_filter = None
      >>> len(layer)
      3

  get_fields()

  A method that returns a list of the values of a given field for each feature in the layer:

      >>> layer.get_fields("Name")
      ['Pueblo', 'Lawrence', 'Houston']

  get_geoms(geos=False)

  A method that returns a list containing the geometry of each feature in the layer. If the optional argument `geos` is set to `True` then the geometries are converted to `GEOSGeometry` objects. Otherwise, they are returned as `OGRGeometry` objects:

      >>> [pt.tuple for pt in layer.get_geoms()]
      [(-104.609252, 38.255001), (-95.23506, 38.971823), (-95.363151, 29.763374)]

  test_capability(capability)

  Returns a boolean indicating whether this layer supports the given capability (a string). Examples of valid capability strings include: `'RandomRead'`, `'SequentialWrite'`, `'RandomWrite'`, `'FastSpatialFilter'`, `'FastFeatureCount'`, `'FastGetExtent'`, `'CreateField'`, `'Transactions'`, `'DeleteFeature'`, and `'FastSetNextByIndex'`.

### `Feature`

class Feature

  `Feature` membungkus fitur OGR. Anda tidak pernah membuat obyek `Feature` secara langsung. Sebagai gantinya, anda mengambil mereka dari obyek `Layer`. Setiap fitur terdiri dari sebuah geometri dan sekumpulan bidang mengandung sifat-sifat tambahan. Geometri dari sebuah bidang adalah dapat diakses melalui sifat `geom` nya, yang mengembalikan sebuah obyek `OGRGeometry`. Sebuah `Feature` berperilaku seperti wadah Python standar untuk bidangnya, yang itu dikembalikan sebagai obyek `Field`: anda dapat mengakses sebuah bidang secara langsung berdasarkan indeks atau namanya, atau dapat berulang terhadap bidang-bidang fitur, misalnya di sebuah perulangan `for`.

  geom

  Returns the geometry for this feature, as an `OGRGeometry` object:

      >>> city.geom.tuple
      (-104.609252, 38.255001)

  get

  A method that returns the value of the given field (specified by name) for this feature, not a `Field` wrapper object:

      >>> city.get("Population")
      102121

  geom_type

  Mengembalikan jenis geometri untuk fitur ini, sebagai sebuah obyek `OGRGeomType`. Ini akan sama untuk semua fitur dalam lapisan yang diberikan dan setara pada sifat `Layer.geom_type` dari obyek `Layer` fitur berasal.

  num_fields

  Mengembalikan sejumlah bidang-bidang dari data terkait dengan fitur. Ini akan sama untuk semua fitur dalam lapisan yang diberikan dan setara pada sifat `Layer.num_fields` dari obyek `Layer` fitur berasal.

  fields

  Mengembalikan daftar dari nama-nama dari bidang data terkait dengan fitur. Ini akan sama untuk semua fitur dalam lapisan yang diberikan dan setara pada sifat `Layer.fields` dari fitur obyek `Layer` yang datang.

  fid

  Returns the feature identifier within the layer:

      >>> city.fid
      0

  layer_name

  Returns the name of the `Layer` that the feature came from. This will be the same for all features in a given layer:

      >>> city.layer_name
      'cities'

  index

  A method that returns the index of the given field name. This will be the same for all features in a given layer:

      >>> city.index("Population")
      1

### `Field`

class Field
  name

  Returns the name of this field:

      >>> city["Name"].name
      'Name'

  type

  Returns the OGR type of this field, as an integer. The `FIELD_CLASSES` dictionary maps these values onto subclasses of `Field`:

      >>> city["Density"].type
      2

  type_name

  Returns a string with the name of the data type of this field:

      >>> city["Name"].type_name
      'String'

  value

  Returns the value of this field. The `Field` class itself returns the value as a string, but each subclass returns the value in the most appropriate form:

      >>> city["Population"].value
      102121

  width

  Returns the width of this field:

      >>> city["Name"].width
      80

  precision

  Returns the numeric precision of this field. This is meaningless (and set to zero) for non-numeric fields:

      >>> city["Density"].precision
      15

  as_double()

  Returns the value of the field as a double (float):

      >>> city["Density"].as_double()
      874.7

  as_int()

  Returns the value of the field as an integer:

      >>> city["Population"].as_int()
      102121

  as_string()

  Returns the value of the field as a string:

      >>> city["Name"].as_string()
      'Pueblo'

  as_datetime()

  Returns the value of the field as a tuple of date and time components:

      >>> city["Created"].as_datetime()
      (c_long(1999), c_long(5), c_long(23), c_long(0), c_long(0), c_long(0), c_long(0))

### `Driver`

class Driver(dr_input)

  Kelas `Driver` digunakan secara mendalam untuk membungkus sebuah driver `DataSource` OGR.

  driver_count

  Mengembalikan sejumlah driver vektor OGR saat ini terdaftar.

## Geometri OGR

### `OGRGeometry`

`OGRGeometry` objects share similar functionality with `GEOSGeometry` objects and are thin wrappers around OGR's internal geometry representation. Thus, they allow for more efficient access to data when using `DataSource`. Unlike its GEOS counterpart, `OGRGeometry` supports spatial reference systems and coordinate transformation:

    >>> from django.contrib.gis.gdal import OGRGeometry
    >>> polygon = OGRGeometry("POLYGON((0 0, 5 0, 5 5, 0 5))")

class OGRGeometry(geom_input, srs=None)

  Obyek ini adalah sebuah pembungkus untuk kelas OGR Geometry. Obyek-obyek ini diinstasiasikan secara langsung dari parameter `geom_input` yang diberikan, yang mungkin berupa string mengandung WKT, HEX, GeoJSON, sebuah `buffer` mengandung data WKB, atau sebuah obyek `OGRGeomType`. Obyek-obyek ini juga dikembalikan dari atribut `Feature.geom`, ketika membaca data vektor dari `Layer` (yaitu pada giliran bagian dari sebuah `DataSource`).

  classmethod from_gml(gml_string)

  Membangun sebuah `OGRGeometry` dari string GML yang diberikan.

  classmethod from_bbox(bbox)

  Membangun sebuah `Polygon` dari kotak-terikat diberikan (4-tuple).

  __len__()

  Mengembalikan sejumlah titik dalam sebuah `LineString`, sejumlah geometri dalam sebuah `GeometryCollection`. Tidak diberlakukan ke jenis geometri lain.

  __iter__()

  Perulangan terhadap titik-titik dalam sebuah `LineString`, lingkaran dalam `Polygon`, atau geometri dalam sebuah `GeometryCollection`. Tidak dapat diterapkan pada jenis-jenis geometri lain.

  __getitem__()

  Mengembalikan titik pada indeks yang ditentukan untuk `LineString`, lingkaran dalam pada indeks ditentukan untuk `Polygon`, atau geometri pada indeks ditentukan dalam sebuah `GeometryCollection`. Tidak dapat diberlakukan pada jenis-jenis geometri lain.

  dimension

  Returns the number of coordinated dimensions of the geometry, i.e. 0 for points, 1 for lines, and so forth:

      >>> polygon.dimension
      2

  is_3d

  A boolean indicating if this geometry has Z coordinates.

  set_3d(value)

  A method that adds or removes the Z coordinate dimension.

      >>> p = OGRGeometry("POINT (1 2 3)")
      >>> p.is_3d
      True
      >>> p.set_3d(False)
      >>> p.wkt
      "POINT (1 2)"

  is_measured

  A boolean indicating if this geometry has M coordinates.

  set_measured(value)

  A method to add or remove the M coordinate dimension.

      >>> p = OGRGeometry("POINT (1 2)")
      >>> p.is_measured
      False
      >>> p.set_measured(True)
      >>> p.wkt
      "POINT M (1 2 0)"

  geom_count

  Returns the number of elements in this geometry:

      >>> polygon.geom_count
      1

  has_curve

  A boolean indicating if this geometry is or contains a curve geometry.

  get_linear_geometry()

  Returns a linear version of the geometry. If no conversion can be made, the original geometry is returned.

  get_curve_geometry()

  Returns a curved version of the geometry. If no conversion can be made, the original geometry is returned.

  point_count

  Returns the number of points used to describe this geometry:

      >>> polygon.point_count
      4

  num_points

  Nama lain untuk `point_count`.

  num_coords

  Nama lain untuk `point_count`.

  geom_type

  Mengembalikan jenis dari geometri ini, sebagai sebuah obyek `OGRGeomType`.

  geom_name

  Returns the name of the type of this geometry:

      >>> polygon.geom_name
      'POLYGON'

  area

  Returns the area of this geometry, or 0 for geometries that do not contain an area:

      >>> polygon.area
      25.0

  envelope

  Mengembalikan sampul dari geometri ini, sebagai sebuah obyek `Envelope`.

  extent

  Returns the envelope of this geometry as a 4-tuple, instead of as an `Envelope` object:

      >>> point.extent
      (0.0, 0.0, 5.0, 5.0)

  srs

  This property controls the spatial reference for this geometry, or `None` if no spatial reference system has been assigned to it. If assigned, accessing this property returns a `SpatialReference` object. It may be set with another `SpatialReference` object, or any input that `SpatialReference` accepts. Example:

      >>> city.geom.srs.name
      'GCS_WGS_1984'

  srid

  Returns or sets the spatial reference identifier corresponding to `SpatialReference` of this geometry. Returns `None` if there is no spatial reference information associated with this geometry, or if an SRID cannot be determined.

  geos

  Mengebalikan obyek `GEOSGeometry` sesuai pada geometri ini.

  gml

  Returns a string representation of this geometry in GML format:

      >>> OGRGeometry("POINT(1 2)").gml
      '<gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point>'

  hex

  Returns a string representation of this geometry in HEX WKB format:

      >>> OGRGeometry("POINT(1 2)").hex
      '0101000000000000000000F03F0000000000000040'

  json

  Returns a string representation of this geometry in JSON format:

      >>> OGRGeometry("POINT(1 2)").json
      '{ "type": "Point", "coordinates": [ 1.000000, 2.000000 ] }'

  kml

  Mengembalikan perwakilan string dari geometri ini dalam bentuk KML.

  wkb_size

  Returns the size of the WKB buffer needed to hold a WKB representation of this geometry:

      >>> OGRGeometry("POINT(1 2)").wkb_size
      21

  wkb

  Mengembalikan sebuah `buffer` mengandung perwakilan WKB dari geometri ini.

  wkt

  Mengembalikan perwakilan string dari geometri ini dalam bentuk WKT.

  ewkt

  Mengembalikan perwakilan EWKT dari geometri ini.

  clone()

  Mengembalikan klon baru `OGRGeometry` dari obyek geometri ini.

  close_rings()

  If there are any rings within this geometry that have not been closed, this routine will do so by adding the starting point to the end:

      >>> triangle = OGRGeometry("LINEARRING (0 0,0 1,1 0)")
      >>> triangle.close_rings()
      >>> triangle.wkt
      'LINEARRING (0 0,0 1,1 0,0 0)'

  transform(coord_trans, clone=False)

  Transforms this geometry to a different spatial reference system. May take a `CoordTransform` object, a `SpatialReference` object, or any other input accepted by `SpatialReference` (including spatial reference WKT and PROJ strings, or an integer SRID).

  Secara awalan dikembalikan dan geometri dirubah di-tempat. Bagaimanapun, jika kata kunci `clone` disetel menjadi `True` kemudian kloningan dirubah dari geometri dikembalikan sebagai gantinya

  intersects(other)

  Mengembalikan `True` jika geometri ini memotong ke lain, sebaliknya mengembalikan `False`.

  equals(other)

  Mengembalikan `True` jika geometri ini setara dengan lain, sebaliknya mengembalikan `True`.

  disjoint(other)

  Mengembalikan `True` jka geometri ini secara spasial menguraikan ke (yaitu tidak bersimpangan) lain, sebaliknya mengembalikan `False`.

  touches(other)

  Mengembalikan `True` jika geometri ini menyentuh lainnya, sebaliknya mengembalikan `False`.

  crosses(other)

  Mengembalikan `True` jika geometri ini bersilangan ke lainnya, sebaliknya mengembalikan `False`.

  within(other)

  Mengembalikan `True` jika geometri ini mengandung dalam yang lain, sebaliknya mengembalikan `False`.

  contains(other)

  Mengembalikan `True` jika geometri ini mengandung yang lainnya, sebaliknya mengembalikan `False`.

  overlaps(other)

  Mengembalikan `True` jika geometri ini tumpang tindih yang lain, sebaliknya mengembalikan `False`.

  boundary()

  Batasan geometri ini , sebagai sebuah obyek `OGRGeometry` baru.

  convex_hull

  Poligon cembung terkecil yang megnandung geometri ini, sebagai sebuah obyek `OGRGeometry` baru.

  difference()

  Mengembalikan kawasan terdiri dari perbedaan dari geometri dan lainnya, seperti obyek `OGRGeometry` baru.

  intersection()

  Mengembalikan kawasan terdiri dari persimpangan dari geometri dan lainnya, seperti obyek `OGRGeometry` baru.

  sym_difference()

  Mengembalikan kawasan terdiri dari perbedaan simetris dari geometri dan lainnya, seperti obyek `OGRGeometry` baru.

  union()

  Mengembalikan kawasan terdiri dari penggabungan dari geometri dan lainnya, seperti obyek `OGRGeometry` baru.

  centroid

  Returns a `Point` representing the centroid of this geometry.

  tuple

  Returns the coordinates of a point geometry as a tuple, the coordinates of a line geometry as a tuple of tuples, and so forth:

      >>> OGRGeometry("POINT (1 2)").tuple
      (1.0, 2.0)
      >>> OGRGeometry("LINESTRING (1 2,3 4)").tuple
      ((1.0, 2.0), (3.0, 4.0))

  coords

  Sebuah nama lain untuk `tuple`.

class Point
  x

  Returns the X coordinate of this point:

      >>> OGRGeometry("POINT (1 2)").x
      1.0

  y

  Returns the Y coordinate of this point:

      >>> OGRGeometry("POINT (1 2)").y
      2.0

  z

  Returns the Z coordinate of this point, or `None` if the point does not have a Z coordinate:

      >>> OGRGeometry("POINT (1 2 3)").z
      3.0

  m

  Returns the M coordinate of this point, or `None` if the Point does not have an M coordinate:

      >>> OGRGeometry("POINT ZM (1 2 3 4)").m
      4.0

class LineString
  x

  Returns a list of X coordinates in this line:

      >>> OGRGeometry("LINESTRING (1 2,3 4)").x
      [1.0, 3.0]

  y

  Returns a list of Y coordinates in this line:

      >>> OGRGeometry("LINESTRING (1 2,3 4)").y
      [2.0, 4.0]

  z

  Returns a list of Z coordinates in this line, or `None` if the line does not have Z coordinates:

      >>> OGRGeometry("LINESTRING (1 2 3,4 5 6)").z
      [3.0, 6.0]

  m

  Returns a list of M coordinates in this line or `None` if the line does not have M coordinates:

      >>> OGRGeometry("LINESTRING(0 1 2 10, 1 2 3 11, 2 3 4 12)").m
      [10.0, 11.0, 12.0]

class Polygon
  shell

  Mengembalikan cangkang atau eksterior lingkaran dari poligon ini, sebagai geometri `LinearRing`.

  exterior_ring

  Sebuah nama lain untuk `shell`.

class GeometryCollection
  add(geom)

  Menambah geometri ke kumpulan geometri. Tidak dapat diterapkan pada jenis geometri lain.

### `OGRGeomType`

class OGRGeomType(type_input)

  This class allows for the representation of an OGR geometry type in any of several ways:

      >>> from django.contrib.gis.gdal import OGRGeomType
      >>> gt1 = OGRGeomType(3)  # Using an integer for the type
      >>> gt2 = OGRGeomType("Polygon")  # Using a string
      >>> gt3 = OGRGeomType("POLYGON")  # It's case-insensitive
      >>> print(gt1 == 3, gt1 == "Polygon")  # Equivalence works w/non-OGRGeomType objects
      True True

  name

  Returns a short-hand string form of the OGR Geometry type:

      >>> gt1.name
      'Polygon'

  num

  Returns the number corresponding to the OGR geometry type:

      >>> gt1.num
      3

  django

  Returns the Django field type (a subclass of GeometryField) to use for storing this OGR type, or `None` if there is no appropriate Django type:

      >>> gt1.django
      'PolygonField'

### `Envelope`

class Envelope(*args)

  mewakili sebuah struktur Sampul OGR yang mengandung kordinat minimual dan maksimal X, Y untuk kotak pembatas empat persegi panjang. Penamaan dari variabel adalah cocok dengan struktur Sampul OGR C.

  min_x

  Nilai minimal kordinat X

  min_y

  Nilai maksimal kordinat X.

  max_x

  Nilai minimal kordinat Y.

  max_y

  Nilai maksimal kordinat Y.

  ur

  Kordinat atas-kanan, sebagai sebuah tuple.

  ll

  Kordinat kiri-bawah, sebagai sebuah tuple.

  tuple

  Sebuah tuple mewakili bungkus.

  wkt

  Sebuah string mewakili amplop ini sebagai poligon dalam bentuk WKT.

  expand_to_include(*args)

## Coordinate System Object

### `SpatialReference`

class SpatialReference(srs_input)

  Obyek acuan spasial diinisialisasikan pada `srs_input` diberikan, yang mungkin satu dari berikut:

  - OGC Well Known Text (WKT) (sebuah string)

  - Kode EPSG(integer atau string)

  - PROJ string

  - Sebuah string tulisan cepat untuk standar dikenal-baik (`'WGS84'`, `'WGS72'`, `'NAD27'`, `'NAD83'`)

  Example:

      >>> wgs84 = SpatialReference("WGS84")  # shorthand string
      >>> wgs84 = SpatialReference(4326)  # EPSG code
      >>> wgs84 = SpatialReference("EPSG:4326")  # EPSG string
      >>> proj = "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs "
      >>> wgs84 = SpatialReference(proj)  # PROJ string
      >>> wgs84 = SpatialReference("""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.01745329251994328,
      ...      AUTHORITY["EPSG","9122"]],
      ... AUTHORITY["EPSG","4326"]]""")  # OGC WKT

  __getitem__(target)

  Returns the value of the given string attribute node, `None` if the node doesn't exist. Can also take a tuple as a parameter, (target, child), where child is the index of the attribute in the WKT. For example:

      >>> wkt = 'GEOGCS["WGS 84", DATUM["WGS_1984, ... AUTHORITY["EPSG","4326"]]'
      >>> srs = SpatialReference(wkt)  # could also use 'WGS84', or 4326
      >>> print(srs["GEOGCS"])
      WGS 84
      >>> print(srs["DATUM"])
      WGS_1984
      >>> print(srs["AUTHORITY"])
      EPSG
      >>> print(srs["AUTHORITY", 1])  # The authority value
      4326
      >>> print(srs["TOWGS84", 4])  # the fourth value in this wkt
      0
      >>> print(srs["UNIT|AUTHORITY"])  # For the units authority, have to use the pipe symbol.
      EPSG
      >>> print(srs["UNIT|AUTHORITY", 1])  # The authority value for the units
      9122

  attr_value(target, index=0)

  Nilai atribut untuk node sasaran diberikan (misalnya `'PROJCS'`). Kata kunci indeks menentukan sebuah indeks dari node anak untuk kembali.

  auth_name(target)

  Mengembalikan nama wewenang untuk node sasaran string yang diberikan.

  auth_code(target)

  Mengembalikan kode wewenang untuk node sasaran string yang diberikan.

  clone()

  Mengembalikan kloning dari obyek acuan spasial ini.

  identify_epsg()

  Metode ini memeriksa WKT dari `SpatialReference` ini dan akan menambahkan node-node wewenang EPSG dimana sebuah penciri EPSG dapat diterapkan.

  from_esri()

  Morphs this SpatialReference from ESRI's format to EPSG

  to_esri()

  Morphs this SpatialReference to ESRI's format.

  validate()

  Memeriksa untuk melihat jika acuan spasial diberikan adalah sah, jika tidak sebuah pengecualian akan dimunculkan.

  import_epsg(epsg)

  Impor acuan spasial dari kode EPSG.

  import_proj(proj)

  Import spatial reference from PROJ string.

  import_user_input(user_input)
  import_wkt(wkt)

  Impor acuan spasial dari WKT.

  import_xml(xml)

  Mengimpor acuan spasial dari XML.

  name

  Mengembalikan nama dari Spatial Reference ini.

  srid

  Mengembalikan SRID dari otoritas tingkat-tinggi, atau `None` jika tidak ditentukan.

  linear_name

  Mengambalikan nama dari satuan linear.

  linear_units

  Mengembalikan nilai dari satuan linear.

  angular_name

  Mengembalikan nama dari satuan sudut."

  angular_units

  Mengembalikan nilai dari satuan sudut.

  units

  Mengembalikan 2-tuple dari nilai satuan dan nama satuan dan akan otomatis menentukan apakah mengembalikan satuan segaris atau bersinggungan.

  ellipsoid

  Mengembalikan sebuah tuple dari parameter ellipsoid untuk acuan spasial ini: (sumbu semimajor, sumbu semiminor, dan kebalikan terbalik).

  semi_major

  Mengembalikan sumbu semi major dari ellipsoid untuk acuan spasial ini.

  semi_minor

  Mengembalikan sumbu semi minor dari ellipsoid untuk acuan spasial ini.

  inverse_flattening

  Mengembalikan kebalikan terbalik dari ellipsoid untuk acuan spasial ini.

  geographic

  Mengembalikan `True` jika acuan spasial ini adalah geografis (node akar adalah `GEOGCS`).

  local

  Mengembalikan `True` jika acuan spasial ini adalah lokal (node akar adalah `LOCAL_CS`).

  projected

  Mengembalikan `True` jika acuan spasial ini adalah sistem kordinat terproyeksi (node akar adalah `PROJCS`).

  wkt

  Mengembalikan perwakilan WKT dari acuan spasial ini.

  pretty_wkt

  Mengembalikan perwakilan 'pretty' dari WKT.

  proj

  Returns the PROJ representation for this spatial reference.

  proj4

  Nama lain untuk `SpatialReference.proj`.

  xml

  Mengembalikan perwakilan XML dari acuan spasial ini.

### `CoordTransform`

class CoordTransform(source, target)

Represents a coordinate system transform. It is initialized with two `SpatialReference`, representing the source and target coordinate systems, respectively. These objects should be used when performing the same coordinate transformation repeatedly on different geometries:

    >>> ct = CoordTransform(SpatialReference("WGS84"), SpatialReference("NAD83"))
    >>> for feat in layer:
    ...     geom = feat.geom  # getting clone of feature geometry
    ...     geom.transform(ct)  # transforming
    ...

## Obyek Data Raster

### `GDALRaster`

`GDALRaster` is a wrapper for the GDAL raster source object that supports reading data from a variety of GDAL-supported geospatial file formats and data sources using a consistent interface. Each data source is represented by a `GDALRaster` object which contains one or more layers of data named bands. Each band, represented by a `GDALBand` object, contains georeferenced image data. For example, an RGB image is represented as three bands: one for red, one for green, and one for blue.

Catatan

Untuk data raster tidak ada perbedaan diantara instance raster dan sumber datanya. Tidak seperti obyek Geometri, obyek `GDALRaster` adalah selalu sumber data. Raster-raster sementara dapat di instantiasi dalam memori menggunakan driver yang berhubungan, tetapi mereka akan menjadi kelas sama seeprti sumber-sumber raster berdasarkan-berkas.

class GDALRaster(ds_input, write=False)

  aPembangunan untuk `GDALRaster` menerima dua parameter. Parameter pertama menentukan sumber raster, dan parameter kedua ditentukan jika raster harus dibuka dalam suasana tulis. Untuk raster baru-dibuat, parameter kedua diabaikan dan raster baru selalu dibuat dalam suasana tulis.

  The first parameter can take three forms: a string or `Path` representing a file path (filesystem or GDAL virtual filesystem), a dictionary with values defining a new raster, or a bytes object representing a raster file.

  Jika masukan adalah jalur berkas, raster dibuka dari sana. Jika masukan adalah mentah dalam dictionary, parameter `width`, `height`, dan `srid` diwajibkan. Jika masukan adalah obyek byte, itu akan dibuka menggunakan sistem berkas maya GDAL.

  Untuk gambaran rinci pada bagaimana membuat raster menggunakan masukan dictionary, lihat Membuat raster dari data. Untuk gambaran rinci pada bagaimana membuat raster-raster dalam sistem berkas maya, lihat Menggunakan Virtual Filesystem GDAL.

  Contoh berikut menunjukkan bagaimana raster-raster dapat dibuat dari sumber masukan berbeda (menggunakan data contoh dari percobaan GeoDjango; lihat juga bagian Data Contoh).

      >>> from django.contrib.gis.gdal import GDALRaster
      >>> rst = GDALRaster("/path/to/your/raster.tif", write=False)
      >>> rst.name
      '/path/to/your/raster.tif'
      >>> rst.width, rst.height  # This file has 163 x 174 pixels
      (163, 174)
      >>> rst = GDALRaster(
      ...     {  # Creates an in-memory raster
      ...         "srid": 4326,
      ...         "width": 4,
      ...         "height": 4,
      ...         "datatype": 1,
      ...         "bands": [
      ...             {
      ...                 "data": (2, 3),
      ...                 "offset": (1, 1),
      ...                 "size": (2, 2),
      ...                 "shape": (2, 1),
      ...                 "nodata_value": 5,
      ...             }
      ...         ],
      ...     }
      ... )
      >>> rst.srs.srid
      4326
      >>> rst.width, rst.height
      (4, 4)
      >>> rst.bands[0].data()
      array([[5, 5, 5, 5],
             [5, 2, 3, 5],
             [5, 2, 3, 5],
             [5, 5, 5, 5]], dtype=uint8)
      >>> rst_file = open("/path/to/your/raster.tif", "rb")
      >>> rst_bytes = rst_file.read()
      >>> rst = GDALRaster(rst_bytes)
      >>> rst.is_vsi_based
      True
      >>> rst.name  # Stored in a random path in the vsimem filesystem.
      '/vsimem/da300bdb-129d-49a8-b336-e410a9428dad'

  name

    Nama dari sumber yang setara pada jalur berkas masukan atau nama disediakan ketika instansiasi.

        >>> GDALRaster({"width": 10, "height": 10, "name": "myraster", "srid": 4326}).name
        'myraster'

  driver

    The name of the GDAL driver used to handle the input file. For `GDALRaster`s created from a file, the driver type is detected automatically. The creation of rasters from scratch is an in-memory raster by default (`'MEM'`), but can be altered as needed. For instance, use `GTiff` for a `GeoTiff` file. For a list of file types, see also the GDAL Raster Formats list.

    Raster dalam-memori dibuat melalui contoh berikut:

        >>> GDALRaster({"width": 10, "height": 10, "srid": 4326}).driver.name
        'MEM'

    Sebuah berkas berdasarkan raster GeoTiff dibuat melalui contoh berikut:

        >>> import tempfile
        >>> rstfile = tempfile.NamedTemporaryFile(suffix=".tif")
        >>> rst = GDALRaster(
        ...     {
        ...         "driver": "GTiff",
        ...         "name": rstfile.name,
        ...         "srid": 4326,
        ...         "width": 255,
        ...         "height": 255,
        ...         "nr_of_bands": 1,
        ...     }
        ... )
        >>> rst.name
        '/tmp/tmp7x9H4J.tif'           # The exact filename will be different on your computer
        >>> rst.driver.name
        'GTiff'

  width

    Lebar dari sumber dalam pixel (sumbu-X).

        >>> GDALRaster({"width": 10, "height": 20, "srid": 4326}).width
        10

  height

    Lebar dari sumber dalam pixel (sumbu-Y).

        >>> GDALRaster({"width": 10, "height": 20, "srid": 4326}).height
        20

  srs

    Sistem acuan spasial dari raster, seperti instance `SpatialReference`. SRS dapat dirubah dengan merubah itu ke `SpatialReference` lain atau menyediakan masukan apapun yang diterima oleh pembangun `SpatialReference`.

        >>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326})
        >>> rst.srs.srid
        4326
        >>> rst.srs = 3086
        >>> rst.srs.srid
        3086

  srid

    Spatial Reference System Identifier (SRID) dari raster. Sifat ini adalah jalan pintas untuk mendapatkan atau menyetel SRID melalui atribut `srs`.

        >>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326})
        >>> rst.srid
        4326
        >>> rst.srid = 3086
        >>> rst.srid
        3086
        >>> rst.srs.srid  # This is equivalent
        3086

  geotransform

    Matriks perubahan affine digunakan untuk pengacuan geo sumber, sebagai sebuah tuple dari enam koefisien yang memetakan kordinat pixel/baris menjadi ruang acuan geo menggunakan hubungan berikut:

        Xgeo = GT(0) + Xpixel * GT(1) + Yline * GT(2)
        Ygeo = GT(3) + Xpixel * GT(4) + Yline * GT(5)

    Nilai-nilai sama dapat diambil dengan mengakses sifat attr:origin (indeks 0 dan 3), `scale` (indeks 1 dan 5) dan `skew` (indeks 2 dan 4).

    Awalnya adalah `[0.0, 1.0, 0.0, 0.0, 0.0, -1.0]`.

        >>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326})
        >>> rst.geotransform
        [0.0, 1.0, 0.0, 0.0, 0.0, -1.0]

  origin

    Kordinat-kordinat dari kiri atas asli dari raster dalam sistem acuan spasial dari sumber, sebagai sebuah obyek titik dengan anggota `x` dn `y`.

        >>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326})
        >>> rst.origin
        [0.0, 0.0]
        >>> rst.origin.x = 1
        >>> rst.origin
        [1.0, 0.0]

  scale

    Pixel width and height used for georeferencing the raster, as a point object with `x` and `y` members. See `geotransform` for more information.

        >>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326})
        >>> rst.scale
        [1.0, -1.0]
        >>> rst.scale.x = 2
        >>> rst.scale
        [2.0, -1.0]

  skew

    Koefisien tidak simetris digunakan untuk pengacuan geo raster, sebagai sebuah obyek titik dengan anggota `x` dan `y`. Dalam kasus gambar ke utara, koefisien ini keduanya `0`.

        >>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326})
        >>> rst.skew
        [0.0, 0.0]
        >>> rst.skew.x = 3
        >>> rst.skew
        [3.0, 0.0]

  extent

    Perpanjang (nilai-nilai batasan) dari sumber raster, sebagai sebuah 4-tuple `(xmin, ymin, xmax, ymax)` dalam sistem acuan spasial dari sumber.

        >>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326})
        >>> rst.extent
        (0.0, -20.0, 10.0, 0.0)
        >>> rst.origin.x = 100
        >>> rst.extent
        (100.0, -20.0, 110.0, 0.0)

  bands

    Daftar pita dari sumber, seperti contoh `GDALBand`.

        >>> rst = GDALRaster(
        ...     {
        ...         "width": 1,
        ...         "height": 2,
        ...         "srid": 4326,
        ...         "bands": [{"data": [0, 1]}, {"data": [2, 3]}],
        ...     }
        ... )
        >>> len(rst.bands)
        2
        >>> rst.bands[1].data()
        array([[ 2.,  3.]], dtype=float32)

  warp(ds_input, resampling='NearestNeighbour', max_error=0.0)

    Mengembalikan versi melengkung dari raster ini.

    Parameter pelengkungan dapat ditentukan melalui argumen `ds_input`. Penggunaan `ds_input` sejalan pada argumen berhubungan dari pembangun kelas. Itu adalah sebuah dictionary dengan karakteristik dari sasaran raster. Nilai-nilai kunci dictionary yang diizinkan adalah lebar, tinggi, SRID, asli, skala, kemiringan, jenis data, driver, dan nama (nama berkas).

    Secara awalan, fungsi melengkung menjaga kebanyakan parameter setara pada nilai-nilai dari raster sumber asli, jadi hanya parameter yang harus dirubah butuh ditentukan. Catat bahwa ini termasuk driver, jadi untuk raster berdasarkan berkas fungsi melengkung akan membuat raster baru pada cakram.

    Parameter yang hanya disetel berbeda dari raster sumber adalah nama. Nilai awalan dari nama raster adalah nama dari sumber raster ditambahkan dengan `'_copy' + source_driver_name`. Untuk raster berdasarkan-berkas itu dianjurkan untuk menyediakan jalur berkas dari raster sasaran.

    Algoritma contoh ulang digunakan untuk melengkungkan dapat ditentukan dengan argumen `resampling`. Awalan adalah `NearestNeighbor`, dan nilai lainnya diizinkan adalah `Bilinear`, `Cubic`, `CubicSpline`, `Lanczos`, `Average`, dan `Mode`.

    Argumen `max_error` dapat digunakan untuk menentukan kesalahan maksimal diukur dalam masukan pixel yang diizinkan dalam mendekati perubahan. Awalan adalah 0.0 untuk perhitungan tepat.

    Untuk pengguna akrab dengan `GDAL`, fungsi ini mempunyai fungsionalitas mirip pada kegunaan baris-perintah `gdalwarp`.

    Sebagai contoh, fungsi pembungkus dapat digunakan untuk mengumpulkan raster untuk menggandakan dari skala pixel aslinya.

        >>> rst = GDALRaster(
        ...     {
        ...         "width": 6,
        ...         "height": 6,
        ...         "srid": 3086,
        ...         "origin": [500000, 400000],
        ...         "scale": [100, -100],
        ...         "bands": [{"data": range(36), "nodata_value": 99}],
        ...     }
        ... )
        >>> target = rst.warp({"scale": [200, -200], "width": 3, "height": 3})
        >>> target.bands[0].data()
        array([[  7.,   9.,  11.],
               [ 19.,  21.,  23.],
               [ 31.,  33.,  35.]], dtype=float32)

  transform(srs, driver=None, name=None, resampling='NearestNeighbour', max_error=0.0)

    Transforms this raster to a different spatial reference system (`srs`), which may be a `SpatialReference` object, or any other input accepted by `SpatialReference` (including spatial reference WKT and PROJ strings, or an integer SRID).

    It calculates the bounds and scale of the current raster in the new spatial reference system and warps the raster using the `warp` function.

    Secara awalan, driver dari sumber raster digunakan dan nama dari raster adalah nama asli ditambahkan dengan `'_copy' + source_driver_name`. Sebuah driver berbeda dapat ditentukan dengan argumen `driver` dan `name`.

    Algoritma contoh ulang adalah `NearestNeighbour` tetapi dapat dirubah menggunakan argumen `resmpling`. Maksimal kesalahan awalan diizinkan untuk contoh ulang adalah 0.0 dan dapat dirubah menggunakan argumen `max_error`. Obrolkan dokumen `warp` untuk rincian pada argumen-argumen tersebut.

        >>> rst = GDALRaster(
        ...     {
        ...         "width": 6,
        ...         "height": 6,
        ...         "srid": 3086,
        ...         "origin": [500000, 400000],
        ...         "scale": [100, -100],
        ...         "bands": [{"data": range(36), "nodata_value": 99}],
        ...     }
        ... )
        >>> target_srs = SpatialReference(4326)
        >>> target = rst.transform(target_srs)
        >>> target.origin
        [-82.98492744885776, 27.601924753080144]

  info

    Mengembalikan string dengan ringkasan dari raster. Ini setara pada kegunaan baris perintah gdalinfo.

  metadata

    Metadata dari raster ini, diwakili sebagai dictionary bersarang. Kunci tingkat-pertama adalah ranah metadata. Tingkat-kedua mengandung barang metadata dan nilai dari setiap ranah.

    Untuk menyetel atau memperbaharui barang metadata, lewatkan barang metadata berhubungan ke metode menggunakan struktur bersarang digambarkan diatas. Hanya kunci-kunci yang dalam dictionary ditentukan adalah diperbaharui; sisa dari metadata tetap tidak berubah.

    Untuk memindahkan barang metadata, gunakan `None` sebagai nilai metadata.

        >>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326})
        >>> rst.metadata
        {}
        >>> rst.metadata = {"DEFAULT": {"OWNER": "Django", "VERSION": "1.0"}}
        >>> rst.metadata
        {'DEFAULT': {'OWNER': 'Django', 'VERSION': '1.0'}}
        >>> rst.metadata = {"DEFAULT": {"OWNER": None, "VERSION": "2.0"}}
        >>> rst.metadata
        {'DEFAULT': {'VERSION': '2.0'}}

  vsi_buffer

    Sebuah `bytes` perwakilan dari raster ini. Mengembalikan `None` untuk raster-raster yang tidak disimpan dalam sistem berkas maya GDAL.

  is_vsi_based

    Sebuah boolean menunjukkan jika raster ini disimpan dalam sistem berkas maya GDAL.

### `GDALBand`

class GDALBand

  Instance-instance `GDALBand` tidak dibuat tegas, tetapi daripada mengambil dari obyek `GDALRaster`, melalui atribut `bands` nya. GDALBand mengandung nilai pixel sebenarnya dari raster.

  description

    Nama dari gambaran dari pita, jika ada.

  width

    Lebar dari pita dalam pixel (sumbu-X).

  height

    Lebar dari pita dalam pixel (sumbu-Y).

  pixel_count

    Jumlah angka dari pixel dalam pita ini. Adalah setara pada `width * height`.

  statistics(refresh=False, approximate=False)

    Menghitung statistik pada nilai pixel dari pita ini. Nilai kembalian adalah sebuah tuple diikuti struktur berikut: `(minimum, maximum, mean, standard deviation)`.

    Jika argumen `approximate` disetel menjadi `True`, statistik mungkin dihitung berdasarkan pada tinjauan atau subset dari ubin-ubin gambar.

    Jika argumen `refresh` disetel menjadi `True`, statistik akan dihitung dari data langsung, dan cache akan diperbaharui dengan hasil.

    Jika nilai cache tetap ditemukan, nilai itu dikembalikan. Untuk bentuk raster menggunakan layanan Persistent Auxiliary Metadata (PAM), statistik mungkin di cache dalam berkas bantu. Dalam beberapa kasus metadata ini mungkin diluar sinkronisasi dengan nilai pixel atau menyebabkan nilai dari panggilan sebelumnya dikembalikan yang tidak mencerminkan nilai dari argumen `approximate`. Dalam kasus itu, gunakan argumen `resfresh` untuk mendapatkan nilai pembaharuan dan menyimpan mereka dalam cache.

    Untuk pita kosong (dimana semua nilai pixel adalah "no data"), semua statistik dikembalikan sebagai `None`.

    Statistik dapat juga diambil langsung dengan mengakses milik `min`, `max`, `mean`, dan `std`.

  min

    Nilai pixel minimal dari pita (tidak termasuk nilai "no data").

  max

    Nilai pixel maksimal dari pita (tidak termasuk nilai "no data").

  mean

    Arti dari semua nilai-nilai pixel dari pita (tidak termasuk nilai "no data").

  std

    Penyimpangan standar dari semua nilai pixel dari pita (tidak termasuk nilai "no data").

  nodata_value

    Nilai "no data" untuk pita umumnya penanda khusus nilai digunakan untuk menandai pixel yang bukan data sah. Pixel tersebut harus umtumnya jangan ditampilkan, ataupun membantu menganalisa tindakan-tindakan.

    To delete an existing "no data" value, set this property to `None`.

  datatype(as_string=False)

    The data type contained in the band, as an integer constant between 0 (Unknown) and 14. If `as_string` is `True`, the data type is returned as a string. Check out the "GDAL Pixel Type" column in the datatype value table for possible values.

  color_interp(as_string=False)

    The color interpretation for the band, as an integer between 0 and 16. If `as_string` is `True`, the data type is returned as a string with the following possible values: `GCI_Undefined`, `GCI_GrayIndex`, `GCI_PaletteIndex`, `GCI_RedBand`, `GCI_GreenBand`, `GCI_BlueBand`, `GCI_AlphaBand`, `GCI_HueBand`, `GCI_SaturationBand`, `GCI_LightnessBand`, `GCI_CyanBand`, `GCI_MagentaBand`, `GCI_YellowBand`, `GCI_BlackBand`, `GCI_YCbCr_YBand`, `GCI_YCbCr_CbBand`, and `GCI_YCbCr_CrBand`. `GCI_YCbCr_CrBand` also represents `GCI_Max` because both correspond to the integer 16, but only `GCI_YCbCr_CrBand` is returned as a string.

  data(data=None, offset=None, size=None, shape=None)

    Pengakses ke nilai-nilai pexel dari `GDALBand`. Mengembalikan larik data lengkap jika tidak ada parameter disediakan. Sebuah subset dari larik pixel dapat diminta dengan menentukan sebuah penyeimbang dan ukuran blok sebagai tuple.

    Jika NumPy tersedia, data dikembalikan sebagai larik NumPy. Untuk alasan penampilan, sangat dianjurkan menggunakan NumPy.

    Data ditulis pada `GDALBand` jika parameter `data` disediakan. Masukan dapat berupa satu dari jenis-jenis berikut - string paket, buffer, list, senarai, dan senarai NumPy. Jumlah barang-barang dalam masukan harus biasanya menanggapi pada jumlah angka dari pixel dalam pita, atau pada angka pixel untuk blok khusus dari nilai pixel jika parameter `offset` dan `size` disediakan.

    Jika sejumlah barang dalam masukan berbeda dari ssaran blok pixel, parameter `shape` harus ditentukan. Shape adalah tuple yang menentukan lebar dan tinggi dari masukan data dalam pixel. Data kemudian direplikasi untuk memperbaharui nilai dari blok terpilih. Ini sangat berguna untuk mengisi seluruh pita dengan nilai tunggal, sebagai contoh.

    Sebagai contoh:

        >>> rst = GDALRaster(
        ...     {"width": 4, "height": 4, "srid": 4326, "datatype": 1, "nr_of_bands": 1}
        ... )
        >>> bnd = rst.bands[0]
        >>> bnd.data(range(16))
        >>> bnd.data()
        array([[ 0,  1,  2,  3],
               [ 4,  5,  6,  7],
               [ 8,  9, 10, 11],
               [12, 13, 14, 15]], dtype=int8)
        >>> bnd.data(offset=(1, 1), size=(2, 2))
        array([[ 5,  6],
               [ 9, 10]], dtype=int8)
        >>> bnd.data(data=[-1, -2, -3, -4], offset=(1, 1), size=(2, 2))
        >>> bnd.data()
        array([[ 0,  1,  2,  3],
               [ 4, -1, -2,  7],
               [ 8, -3, -4, 11],
               [12, 13, 14, 15]], dtype=int8)
        >>> bnd.data(data="\x9d\xa8\xb3\xbe", offset=(1, 1), size=(2, 2))
        >>> bnd.data()
        array([[  0,   1,   2,   3],
               [  4, -99, -88,   7],
               [  8, -77, -66,  11],
               [ 12,  13,  14,  15]], dtype=int8)
        >>> bnd.data([1], shape=(1, 1))
        >>> bnd.data()
        array([[1, 1, 1, 1],
               [1, 1, 1, 1],
               [1, 1, 1, 1],
               [1, 1, 1, 1]], dtype=uint8)
        >>> bnd.data(range(4), shape=(1, 4))
        array([[0, 0, 0, 0],
               [1, 1, 1, 1],
               [2, 2, 2, 2],
               [3, 3, 3, 3]], dtype=uint8)

  metadata

    Metadata dari pita ini. Kegunaannya mirip pada `GDALRaster.metadata`.

### Membuat raster dari data

Bagian ini menggambarkan bagaimana membuat raster dari goresan menggunakan parameter `ds_input`.

Raster baru dibuat ketika `dict` dilewatkan pada pembangun `GDALRaster`. Dictionary mengandung menentukan parameter dari raster baru, seperti aslinnya, ukuran, atau sistem acuan spasial. Dictionary dapat juga mengandung data pixel dan informasi mengenai bentuk dari raster baru. Raster dihasilkan dapat karena itu berupa berdasarkan-berkas atau berdasarkan-memori, tergantung pada driver yang ditentukan.

Tidak ada standar untuk menggambarkan data raster dalam dictionary atau rasa JSON. Pengertian dari masukan dictionary pada kelas `GDALRaster` adalah karena itu khusus pada Django. Itu terinspirasi oleh bentuk geojson, tetapi standar `geojson` saat ini terbatas pada bentuk vektor.

Contoh-contoh dari menggunakan kunci berbeda ketika membuat raster dapat ditemukan dalam dokumentasi dari atribut berhubungan dan metode-metode dari kelas-kelas `GDALRaster` dan `GDALBand`.

#### Kamus `ds_input`

Hanya sedikit kunci dibutuhkan dalam dictionary `ds_input` untuk membuat raster: `width`, `height`, dan `srid`. Semua parameter lain memiliki nilai awalan (lihat tabel dibawah). Daftar dari kunci yang dapat dilewatkan dalam dictionary `ds_input` sangat dekat terkait tetapi bukan mirip pada sifat `GDALRaster`. Banyak dari parameter dipetakan secara langsung ke sifat tersebut; lainnya digambarkan dibawah.

Tabel berikut menggambarkan semua kunci yang dapat disetel dalam dictionary `ds_input`.

Kunci | Awalan | Penggunaan
--- | --- | ---
`srid` | diwajibkan | Dipetakan ke atribut `srid`
`width` | diwajibkan | Dipetakan ke atribut `width`
`height` | diwajibkan | Dipetakan ke atribut `height`
`driver` | `MEM` | Dipetakan ke atribut `driver`
`name` | `''` | Lihat dibawah
`origin` | `0` | Dipetakan ke atribut `origin`
`scale` | `0` | Dipetakan ke atribut `scale`
`skew` | `0` | Dipetakan ke atribut `width`
`bands` | `[]` | Lihat dibawah
`nr_of_bands` | `0` | Lihat dibawah
`datatype` | `6` | Lihat dibawah
`papsz_options` | `{}` | Lihat dibawah

name

  Strung mewakili nama dari raster. ketika membuat raster berdasarkan-berkas, parameter ini harus berupa jalur berkas untuk raster baru. jika nama dimulai dengan `/vsimem/`, raster dibuat dalam sistem berkas maya GDAL.

datatype

  Integer mewakili jenis data untuk semua pita. Awalan pada `6` (Float32). Semua pita dari raster baru diwajibkan memiliki jenis data sama. Pemetaan nilai adalah:

  Nilai | Jenis Piksel GDAL | Deskripsi
  --- | --- | ---
  1 | GDT_Byte | 8 bit unsigned integer
  2 | GDT_UInt16 | 16 bit unsigned integer
  3 | GDT_Int16 | 16 bit signed integer
  4 | GDT_UInt32 | 32 bit unsigned integer
  5 | GDT_Int32 | 32 bit signed integer
  6 | GDT_Float32 | 32 bit floating point
  7 | GDT_Float64 | 64 bit floating point
  12 | GDT_UInt64 | 64 bit unsigned integer (GDAL 3.5+)
  13 | GDT_Int64 | 64 bit signed integer (GDAL 3.5+)
  14 | GDT_Int8 | 8 bit signed integer (GDAL 3.7+)

nr_of_bands

  Integer mewakilkan angka dari pita dari raster. Sebuah raster dapat dibuat tanpa melewati data pita ketika pembuatan. Jika angka dari pita tidak ditentukan, itu otomatis dihitung dari panjang dari masukan `band`. Angka dari pita tidak dapat dirubah setelah pembuatan.

bands

  Sebuah list dari dictionary `band_input` dengan data masukan pita. Indeks hasil pita adalah sama seperti dalam list yang disediakan. Pengertian dari dictionary masukan pita diberikan dibawah. Jika data pita tidak disediakan, nilai pita raster diinstansiasikan sebagai sebuah larik nol dan nilai "no data" disetel menjadi `None`.

papsz_options

  Sebuah dictionary dengan pilihan pembuatan raster. Pasangan kunci-nilai dari masukan dictionary dilewatkan ke driver pada pembuatan dari raster.

  Pilihan-pilihan tersedia adalah driver-khusus dan digambarkan dalam dokumentasi dari setiap driver.

  Nilai-nilai dalam dictianry bukan sensitif-kasus dan otomatis dirubah ke bentuk string benar ketika pembuatan.

  The following example uses some of the options available for the GTiff driver. The result is a compressed raster with an internal tiling scheme. The internal tiles have a block size of 23 by 23:

      >>> GDALRaster(
      ...     {
      ...         "driver": "GTiff",
      ...         "name": "/path/to/new/file.tif",
      ...         "srid": 4326,
      ...         "width": 255,
      ...         "height": 255,
      ...         "nr_of_bands": 1,
      ...         "papsz_options": {
      ...             "compress": "packbits",
      ...             "tiled": "yes",
      ...             "blockxsize": 23,
      ...             "blockysize": 23,
      ...         },
      ...     }
      ... )

#### Kamus `band_input`

Kunci `bands` dalam dictionary `ds_input` adalah daftar dari dictionary `band_input`. Setiap dictionary `band_input` dapat mengandung nilai-nilai pixel dan nilai "no data" untuk disetel pada pita dari raster baru. Larik data dapat memiliki ukuran penuh dari raster baru atau lebih kecil. Untuk larik yang paling kecil dari raster penuh, Kunci-kunci `size`, `shape`, dan `offset` mengendalikan nilai pixel. Kunci-kunci berhubungan dilewatkan ke metode `data()`. Kegunaan mereka sama seperti mengatur data pita dengan metode itu. Tabel berikut menggambarkan kunci-kunci yang dapat digunakan.

Kunci | Awalan | Penggunaan
--- | --- | ---
`nodata_value` | `None` | Dipetakan ke atribut `nodata_value`
`data` | Sama seperti `nodata_value` atau `0` | Dilewatkan ke metode `data()`
`size` | `(with, height)` dari raster | Dilewatkan ke metode `data()`
`shape` | Sama seperti ukuran | Dilewatkan ke metode `data()`
`offset` | `(0, 0)` | Dilewatkan ke metode `data()`

### Menggunakan Virtual Filesystem GDAL

GDAL can access files stored in the filesystem, but also supports virtual filesystems to abstract accessing other kind of files, such as compressed, encrypted, or remote files.

#### Using memory-based Virtual Filesystem

GDAL mempunyai berkas sistem berdasarkan-memori dalam, yang mengizinkan memberlakukan blok-blok dari memori sebagai berkas. Itu dapat digunakan untuk membaca dan menulis obyek `GDALRaster` pada dan dari penyangga berkas biner.

Ini berguna dalam konteks jaringan dimana raster-raster mungkin diambil sebagai penyangga dari penyimpanan terpencil atau dikembalikan dari sebuah tampilan tanpa sedang ditulis ke cakram.

Obyek-obyek `GDALRaster` dibuat dalam sistem berkas maya ketika sebuah obyek `bytes` disediakan sebagai masukan, atau ketika jalur berkas dimulai dengan `/vsimem/`.

Input provided as `bytes` has to be a full binary representation of a file. For instance:

    # Read a raster as a file object from a remote source.
    >>> from urllib.request import urlopen
    >>> dat = urlopen("https://example.com/raster.tif").read()
    # Instantiate a raster from the bytes object.
    >>> rst = GDALRaster(dat)
    # The name starts with /vsimem/, indicating that the raster lives in the
    # virtual filesystem.
    >>> rst.name
    '/vsimem/da300bdb-129d-49a8-b336-e410a9428dad'

Untuk membuat raster berdasarkan-berkas maya dari goresan, gunakan perwakilan dictionary `ds_input` dan sediakan argumen `name` yang dimulai dengan `/vsimem/` (untuk rincian dari perwakilan dictionary, lihat Membuat raster dari data). Untuk raster berdasarkan-berkas maya, atribut `vsi_buffer` mengembalikan perwakilan `bytes` dari raster.

Here's how to create a raster and return it as a file in an `HttpResponse`:

    >>> from django.http import HttpResponse
    >>> rst = GDALRaster(
    ...     {
    ...         "name": "/vsimem/temporarymemfile",
    ...         "driver": "tif",
    ...         "width": 6,
    ...         "height": 6,
    ...         "srid": 3086,
    ...         "origin": [500000, 400000],
    ...         "scale": [100, -100],
    ...         "bands": [{"data": range(36), "nodata_value": 99}],
    ...     }
    ... )
    >>> HttpResponse(rast.vsi_buffer, "image/tiff")

#### Using other Virtual Filesystems

Depending on the local build of GDAL other virtual filesystems may be supported. You can use them by prepending the provided path with the appropriate `/vsi*/` prefix. See the GDAL Virtual Filesystems documentation for more details.

Peringatan

Rasters with names starting with `/vsi*/` will be treated as rasters from the GDAL virtual filesystems. Django doesn't perform any extra validation.

##### Compressed rasters

Instead of decompressing the file and instantiating the resulting raster, GDAL can directly access compressed files using the `/vsizip/`, `/vsigzip/`, or `/vsitar/` virtual filesystems:

    >>> from django.contrib.gis.gdal import GDALRaster
    >>> rst = GDALRaster("/vsizip/path/to/your/file.zip/path/to/raster.tif")
    >>> rst = GDALRaster("/vsigzip/path/to/your/file.gz")
    >>> rst = GDALRaster("/vsitar/path/to/your/file.tar/path/to/raster.tif")

##### Network rasters

GDAL can support online resources and storage providers transparently. As long as it's built with such capabilities.

To access a public raster file with no authentication, you can use `/vsicurl/`:

    >>> from django.contrib.gis.gdal import GDALRaster
    >>> rst = GDALRaster("/vsicurl/https://example.com/raster.tif")
    >>> rst.name
    '/vsicurl/https://example.com/raster.tif'

For commercial storage providers (e.g. `/vsis3/`) the system should be previously configured for authentication and possibly other settings (see the GDAL Virtual Filesystems documentation for available options).

#### Security considerations

Since `GDALRaster` always opens new rasters in write mode, it is essential to prevent instantiating one from untrusted input. Otherwise, an attacker might gain the ability to write a file or make a network request.

To mitigate this, spatial lookups prevent `str`, `pathlib.Path`, and `dict` values from reaching `GDALRaster` altogether. To use these types with lookups, wrap them explicitly with `GDALRaster`, indicating that the value is trusted. Bytes are accepted without being wrapped in `GDALRaster` because they are opened through GDAL's memory-based virtual filesystem.

This protection applies only to spatial lookups. Assigning a `dict` value to a `RasterField` will still open a new raster, and assigning a `str` or `Path` will still fetch and open the referenced raster.

When validating geometry inputs, the `GeometryField` form field will reject raster values. When validating raster inputs, you should write custom validation.

For defense-in-depth strategies for limiting the available raster drivers, see GDAL security considerations.

Changed in Django 5.2.17:

In earlier versions, spatial lookups accepted `str` and `dict` types for new rasters, allowing file writes and network fetches.

## Pengaturan

### `GDAL_LIBRARY_PATH`

A string specifying the location of the GDAL library. Typically, this setting is only used if the GDAL library is in a non-standard location (e.g., `/home/john/lib/libgdal.so`).

## Pengecualian

exception GDALException

  Pengecualian GDAL dasar, menunjukkan kesalahan terkait-GDAL.

exception SRSException

  Sebuah pengecualian dimunculkan ketika kesalahan muncul ketika membangun atau menggunakan obyek sistem acuan spasial.