<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.projects.html">projects</a> . <a href="mapsengine_v1.projects.icons.html">icons</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(projectId, body=None, media_body=None)</a></code></p>
<p class="firstline">Create an icon.</p>
<p class="toc_element">
  <code><a href="#get">get(projectId, id)</a></code></p>
<p class="firstline">Return an icon or its associated metadata</p>
<p class="toc_element">
  <code><a href="#get_media">get_media(projectId, id)</a></code></p>
<p class="firstline">Return an icon or its associated metadata</p>
<p class="toc_element">
  <code><a href="#list">list(projectId, pageToken=None, maxResults=None)</a></code></p>
<p class="firstline">Return all icons in the current project</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="create">create(projectId, body=None, media_body=None)</code>
  <pre>Create an icon.

Args:
  projectId: string, The ID of the project. (required)
  body: object, The request body.
    The object takes the form of:

{ # An icon is a user-uploaded image that can be used to style point geometries.
    "description": "A String", # The description of this Icon, supplied by the author.
    "name": "A String", # The name of this Icon, supplied by the author.
    "id": "A String", # An ID used to refer to this Icon.
  }

  media_body: string, The filename of the media request body, or an instance of a MediaUpload object.

Returns:
  An object of the form:

    { # An icon is a user-uploaded image that can be used to style point geometries.
      "description": "A String", # The description of this Icon, supplied by the author.
      "name": "A String", # The name of this Icon, supplied by the author.
      "id": "A String", # An ID used to refer to this Icon.
    }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(projectId, id)</code>
  <pre>Return an icon or its associated metadata

Args:
  projectId: string, The ID of the project. (required)
  id: string, The ID of the icon. (required)

Returns:
  An object of the form:

    { # An icon is a user-uploaded image that can be used to style point geometries.
      "description": "A String", # The description of this Icon, supplied by the author.
      "name": "A String", # The name of this Icon, supplied by the author.
      "id": "A String", # An ID used to refer to this Icon.
    }</pre>
</div>

<div class="method">
    <code class="details" id="get_media">get_media(projectId, id)</code>
  <pre>Return an icon or its associated metadata

Args:
  projectId: string, The ID of the project. (required)
  id: string, The ID of the icon. (required)

Returns:
  The media object as a string.

    </pre>
</div>

<div class="method">
    <code class="details" id="list">list(projectId, pageToken=None, maxResults=None)</code>
  <pre>Return all icons in the current project

Args:
  projectId: string, The ID of the project. (required)
  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 a single response page. The maximum supported value is 50.

Returns:
  An object of the form:

    { # The response returned by a call to icons.List.
    "nextPageToken": "A String", # Next page token.
    "icons": [ # Resources returned.
      { # An icon is a user-uploaded image that can be used to style point geometries.
          "description": "A String", # The description of this Icon, supplied by the author.
          "name": "A String", # The name of this Icon, supplied by the author.
          "id": "A String", # An ID used to refer to this Icon.
        },
    ],
  }</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>