Part 2 - Working with Geometries¶
Creating geometries¶
The arcgis.geometry
module defines geometry types for working with geographic features in a GIS. It provides functions which use geometric types as input and output as well as functions for easily converting geometries between different representations.
Several functions in this module accept geometries represented as Python dictionary objects. To get started, we import the following classes and functions from the geometry
module.
from arcgis.gis import GIS
from arcgis.geocoding import geocode
from arcgis.geometry import lengths, areas_and_lengths, project
from arcgis.geometry import Point, Polyline, Polygon, Geometry
import pandas as pd
gis = GIS('home')
Object Model Diagram (OMD) of the geometry module¶
The picture below illustrates how the geometry module is organized (which showcase only the important objects, sub-modules, and properties via the OMD):
The arcgis.geometry
module contains classes and utility functions to construct geometry objects such as Point
s, Polyline
s, Polygon
s and perform spatial operations on them. The arcgis.geometry.Geometry
class is a base class from which specific geometry classes inherit. Users generally do not instantiate the base class, but work directly with one or more child classes such as Point
, Polyline
, Polygon
etc. The base class provides geometry operations such as clip()
, difference()
, buffer()
... which the child classes inherit. The arcgis.geometry.functions
sub-module contains an alternate set of spatial operations. There difference between these two sets of operations is explained in the section 'Two patterns of applying spatial operations'.
The SpatialReference
class is used to represent spatial reference
and coordinate system information
. The arcgis.geometry.filters
module provides functions that can be used to define spatial relationships to be used in queries against feature layers and imagery layers.
The layout diagram further shows how Feature
and spatially enabled DataFrame
objects from arcgis.features
module return components of the geometry module.
Creating Point
objects¶
A point contains x and y fields along with a spatialReference
field. A point can also contain m and z fields as well, representing the vertical and linear referencing system coordinates. A point is empty when its x field is present and has the value null or the string NaN
. An empty point has no location in space.
pt = Point({"x" : -118.15, "y" : 33.80,
"spatialReference" : {"wkid" : 4326}})
pt
As shown above, you can create a Point
geometry using a dictionary. The x
and y
key value pairs in this example contain longitude and latitude respectively. The spatialReference
dictionary with the wkid
kvp specifies the coordinate system in which x
and y
are in. Thus, you could have passed it X and Y values from a projected coordinate system and constructed the same point by specifying the appropriate wkid
.
When using the Jupyter Notebook (or ArcGIS Notebook) interface, you can query a geometry and get a visual representation as shown in the cell earlier. Alternately you can check the validity of a geometry by querying the is_valid()
method.
pt.is_valid()
print(pt.is_empty)
To get the geometry type, use the type
property:
print(pt.type)
To get the object type in Python, use the built-in type
function:
type(pt)
map0 = gis.map("Port of Long Beach")
map0.basemap = "satellite"
map0.zoom = 6
map0