Source code for reclaim.static_features.utils.area_perimeter

import numpy as np
from shapely.ops import transform

[docs] def calculate_length_area_meters(geometry, area= True): """ Calculate the length and area of a geometry in meters and square meters using approximate conversion factors based on the geometry's centroid latitude. Parameters: geometry (shapely.geometry): Geometry in WGS84 (EPSG:4326) to calculate length and area. Returns: tuple: (length in meters, area in square meters) """ # Get centroid for latitude reference centroid = geometry.centroid reference_latitude = centroid.y # latitude of the centroid # Conversion factors lat_factor = 111_000 # meters per degree latitude lon_factor = 111_320 * np.cos(np.radians(reference_latitude)) # meters per degree longitude at given latitude # Transform function to scale degrees to meters def scale_degrees_to_meters(x, y): return (x * lon_factor, y * lat_factor) # Scale geometry from degrees to meters using the conversion factors scaled_geometry = transform(scale_degrees_to_meters, geometry) # Calculate length and area in meters and square meters length_meters = scaled_geometry.length if area: area_square_meters = scaled_geometry.area return length_meters, area_square_meters else: return length_meters