<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="mapsengine_v1.html">Google Maps Engine API</a> . <a href="mapsengine_v1.tables.html">tables</a> . <a href="mapsengine_v1.tables.features.html">features</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#batchDelete">batchDelete(id, body)</a></code></p>
<p class="firstline">Delete all features matching the given IDs.</p>
<p class="toc_element">
  <code><a href="#batchInsert">batchInsert(id, body)</a></code></p>
<p class="firstline">Append features to an existing table.</p>
<p class="toc_element">
  <code><a href="#batchPatch">batchPatch(id, body)</a></code></p>
<p class="firstline">Update the supplied features.</p>
<p class="toc_element">
  <code><a href="#get">get(tableId, id, version=None, select=None)</a></code></p>
<p class="firstline">Return a single feature, given its ID.</p>
<p class="toc_element">
  <code><a href="#list">list(id, orderBy=None, intersects=None, pageToken=None, maxResults=None, version=None, limit=None, include=None, where=None, select=None)</a></code></p>
<p class="firstline">Return all features readable by the current user.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="batchDelete">batchDelete(id, body)</code>
  <pre>Delete all features matching the given IDs.

Args:
  id: string, The ID of the table that contains the features to be deleted. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # The request sent to features.BatchDelete.
    "gx_ids": [
      "A String",
    ],
    "primaryKeys": [
      "A String",
    ],
  }

</pre>
</div>

<div class="method">
    <code class="details" id="batchInsert">batchInsert(id, body)</code>
  <pre>Append features to an existing table.

A single batchInsert request can create:

- Up to 50 features.
- A combined total of 10 000 vertices.
Feature limits are documented in the Supported data formats and limits article of the Google Maps Engine help center. Note that free and paid accounts have different limits.

For more information about inserting features, read Creating features in the Google Maps Engine developer's guide.

Args:
  id: string, The ID of the table to append the features to. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # The request sent to features.Insert.
    "normalizeGeometries": true, # If true, the server will normalize feature geometries. It is assumed that the South Pole is exterior to any polygons given. See here for a list of normalizations. If false, all feature geometries must be given already normalized. The points in all LinearRings must be listed in counter-clockwise order, and LinearRings may not intersect.
    "features": [
      { # A feature within a table.
        "geometry": { # The geometry member of this Feature.
        },
        "type": "Feature", # Identifies this object as a feature.
        "properties": { # The properties associated with a feature. # Key/value pairs of this Feature.
          "a_key": "", # An arbitrary key-value pair. The key must be the name of a column in the table's schema, and the type of the value must correspond to the type specified in the schema.
        },
      },
    ],
  }

</pre>
</div>

<div class="method">
    <code class="details" id="batchPatch">batchPatch(id, body)</code>
  <pre>Update the supplied features.

A single batchPatch request can update:

- Up to 50 features.
- A combined total of 10 000 vertices.
Feature limits are documented in the Supported data formats and limits article of the Google Maps Engine help center. Note that free and paid accounts have different limits.

Feature updates use HTTP PATCH semantics:

- A supplied value replaces an existing value (if any) in that field.
- Omitted fields remain unchanged.
- Complex values in geometries and properties must be replaced as atomic units. For example, providing just the coordinates of a geometry is not allowed; the complete geometry, including type, must be supplied.
- Setting a property's value to null deletes that property.
For more information about updating features, read Updating features in the Google Maps Engine developer's guide.

Args:
  id: string, The ID of the table containing the features to be patched. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # The request sent to features.BatchPatch.
    "normalizeGeometries": true, # If true, the server will normalize feature geometries. It is assumed that the South Pole is exterior to any polygons given. See here for a list of normalizations. If false, all feature geometries must be given already normalized. The points in all LinearRings must be listed in counter-clockwise order, and LinearRings may not intersect.
    "features": [
      { # A feature within a table.
        "geometry": { # The geometry member of this Feature.
        },
        "type": "Feature", # Identifies this object as a feature.
        "properties": { # The properties associated with a feature. # Key/value pairs of this Feature.
          "a_key": "", # An arbitrary key-value pair. The key must be the name of a column in the table's schema, and the type of the value must correspond to the type specified in the schema.
        },
      },
    ],
  }

</pre>
</div>

<div class="method">
    <code class="details" id="get">get(tableId, id, version=None, select=None)</code>
  <pre>Return a single feature, given its ID.

Args:
  tableId: string, The ID of the table. (required)
  id: string, The ID of the feature to get. (required)
  version: string, The table version to access. See Accessing Public Data for information.
    Allowed values
      draft - The draft version.
      published - The published version.
  select: string, A SQL-like projection clause used to specify returned properties. If this parameter is not included, all properties are returned.

Returns:
  An object of the form:

    { # A feature within a table.
    "geometry": { # The geometry member of this Feature.
    },
    "type": "Feature", # Identifies this object as a feature.
    "properties": { # The properties associated with a feature. # Key/value pairs of this Feature.
      "a_key": "", # An arbitrary key-value pair. The key must be the name of a column in the table's schema, and the type of the value must correspond to the type specified in the schema.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(id, orderBy=None, intersects=None, pageToken=None, maxResults=None, version=None, limit=None, include=None, where=None, select=None)</code>
  <pre>Return all features readable by the current user.

Args:
  id: string, The ID of the table to which these features belong. (required)
  orderBy: string, An SQL-like order by clause used to sort results. If this parameter is not included, the order of features is undefined.
  intersects: string, A geometry literal that specifies the spatial restriction of the query.
  pageToken: string, The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.
  maxResults: integer, The maximum number of items to include in the response, used for paging. The maximum supported value is 1000.
  version: string, The table version to access. See Accessing Public Data for information.
    Allowed values
      draft - The draft version.
      published - The published version.
  limit: integer, The total number of features to return from the query, irrespective of the number of pages.
  include: string, A comma separated list of optional data to include. Optional data available: schema.
  where: string, An SQL-like predicate used to filter results.
  select: string, A SQL-like projection clause used to specify returned properties. If this parameter is not included, all properties are returned.

Returns:
  An object of the form:

    { # The response returned by a call to features.List.
    "nextPageToken": "A String", # Next page token.
    "allowedQueriesPerSecond": 3.14, # An indicator of the maximum rate at which queries may be made, if all queries were as expensive as this query.
    "type": "FeatureCollection",
    "features": [ # Resources returned.
      { # A feature within a table.
        "geometry": { # The geometry member of this Feature.
        },
        "type": "Feature", # Identifies this object as a feature.
        "properties": { # The properties associated with a feature. # Key/value pairs of this Feature.
          "a_key": "", # An arbitrary key-value pair. The key must be the name of a column in the table's schema, and the type of the value must correspond to the type specified in the schema.
        },
      },
    ],
    "schema": { # A schema indicating the properties which may be associated with features within a Table, and the types of those properties. # The feature schema.
      "primaryGeometry": "A String", # The name of the column that contains a feature's geometry. This field can be omitted during table create; Google Maps Engine supports only a single geometry column, which must be named geometry and be the first object in the columns array.
      "primaryKey": "A String", # The name of the column that contains the unique identifier of a Feature.
      "columns": [ # An array of TableColumn objects. The first object in the array must be named geometry and be of type points, lineStrings, polygons, or mixedGeometry.
        {
          "type": "A String", # The type of data stored in this column.
          "name": "A String", # The column name.
        },
      ],
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>