Momepy is built on top of geopandas GeoDataFrame objects and, for network analysis, on networkx Graph.
GeoDataFrame
Graph
For any kind of morphometric analysis, data needs to be provided as GeoDataFrames. Results of morphometric analysis from momepy can be generally returned as pandas Series to be added as a column of existing GeoDataFrame. All the detailes and attributes of each class are clearly described in the API.
GeoDataFrames
momepy
Series
Morphometric functions available in momepy could be divided into four different groups based on their approach to data requirements and outputs.
Simple characters
Simple morphometric characters are using single GeoDataFrame as a source of the data.
Relational characters
Relational characters are based on relations between two or more GeoDataFrames. Typical example is AreaRatio, which requires a) features to be covered (e.g. land unit) and b) features which are covering them (e.g. buildings).
AreaRatio
Network analysis
Network analysis (graph module) characters are based on networkx.Graph and returns networkx.Graph with additional node or edge attributes.
graph
networkx.Graph
Additional modules (elements and utils) cover functions generating new morphological elements (like morphological tessellation) or links between them. For details, please refer to the API.
elements
utils
Majority of functions used within momepy is not limited to one type of morphological elements. However, the whole package is built with a specific set of elements in mind, based on the research done at the University of Strathclyde by the Urban Design Studies Unit. This is true especially for morphological tessellation, partitioning of space based on building footprints. Morphological tessellation can substitute plots for certain types of analysis and provide additional information, like the adjacency, for the other. More information on tessellation is in dedicated section of this guide.
Generally, we can work with any kind of morphological element which fits selected function, there is no restriction. Sometimes, where documentation refers to buildings, other elements like blocks can be used as well as long as the principle remains the same.
For example, you can use momepy to do morphometric analysis of:
buildings,
plots,
morphological cells,
streets,
profiles,
networks,
blocks,
and more.
When using more than one morphological element, momepy needs to understand what is the relationship between them. For this, it relies on unique_id attributes. It is expected, that every building lies on certain plot or morphological cell, on certain street or within certain block. To use momepy, each feature of each layer needs its own unique_id. Moreover, each feature also needs to bear unique_id of related elements. Consider following sample rows of buildings_gdf:
unique_id
buildings_gdf
building_id
block_id
network_edge_id
1
143
22
2
25
3
144
4
5
29
Each building has its own unique building_id, while more building share block_id of block they belong to. In this sense, in blocks_gdf each feature would have its own unique block_id used as a reference for buildings_gdf. In principle, elements on the smaller scale contains IDs of elements on the larger - blocks will not have building IDs.
blocks_gdf
Momepy can generate unique ID using momepy.unique_id() and link certain types of elements together
momepy.unique_id()
Unique IDs are also used as an ID within spatial weights matrices. Thanks to this, spatial weights generated on morphological tessellation (like Queen contiguity) can be directly used on buildings and vice versa. Detailed information on using spatial weights within momepy will be discussed later.