Rahul S. answered 05/19/25
Senior Software Engineer
#python file for given problem Date: 20th May 2025
#Author : rahul sehrawat
import math
def rectangle_vertices(latA, lonA, latB, lonB, breadth_m):
# Constants
meters_per_deg_lat = 111320
# Use average latitude for longitude meter conversion
avg_lat = (latA + latB) / 2
meters_per_deg_lon = 111320 * math.cos(math.radians(avg_lat))
# Step 2: Vector AB in meters
dx = (lonB - lonA) * meters_per_deg_lon
dy = (latB - latA) * meters_per_deg_lat
# Step 3: Length and unit vectors
length = math.sqrt(dx**2 + dy**2)
ux = dx / length
uy = dy / length
# Perpendicular unit vector (rotated +90 degrees)
px = -uy
py = ux
# Step 4: Half breadth offset
half_b = breadth_m / 2
offset_x = px * half_b
offset_y = py * half_b
# Step 5 & 6: Calculate vertices
# V1 = A + offset
v1_lon = lonA + offset_x / meters_per_deg_lon
v1_lat = latA + offset_y / meters_per_deg_lat
# V2 = A - offset
v2_lon = lonA - offset_x / meters_per_deg_lon
v2_lat = latA - offset_y / meters_per_deg_lat
# V3 = B - offset
v3_lon = lonB - offset_x / meters_per_deg_lon
v3_lat = latB - offset_y / meters_per_deg_lat
# V4 = B + offset
v4_lon = lonB + offset_x / meters_per_deg_lon
v4_lat = latB + offset_y / meters_per_deg_lat
return [(v1_lat, v1_lon), (v2_lat, v2_lon), (v3_lat, v3_lon), (v4_lat, v4_lon)]
# Example inputs
A = (10.767008, 106.665884)
B = (10.767715, 106.667151)
breadth = 4 # meters
vertices = rectangle_vertices(A[0], A[1], B[0], B[1], breadth)
for i, (lat, lon) in enumerate(vertices, 1):
print(f"Vertex {i}: Latitude = {lat}, Longitude = {lon}")