fix: restrict map route domain to Chennai region and implement numbered stop markers
This commit is contained in:
@@ -167,10 +167,6 @@
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Ayyampettai": {
|
||||
"lat": 10.8962881,
|
||||
"lng": 79.1886395
|
||||
},
|
||||
"Ayyangarkulam": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
@@ -178,5 +174,473 @@
|
||||
"Ayyapanthangal": {
|
||||
"lat": 13.041,
|
||||
"lng": 80.1412
|
||||
},
|
||||
"B.B.Road": {
|
||||
"lat": 13.0095255,
|
||||
"lng": 80.2537619
|
||||
},
|
||||
"BDO Office": {
|
||||
"lat": 12.9022177,
|
||||
"lng": 80.0257182
|
||||
},
|
||||
"Bai Kadai": {
|
||||
"lat": 13.0198261,
|
||||
"lng": 80.1430544
|
||||
},
|
||||
"Balaji Dental College": {
|
||||
"lat": 12.9441308,
|
||||
"lng": 80.208506
|
||||
},
|
||||
"Banavaram koot": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Beach Station": {
|
||||
"lat": 13.0942257,
|
||||
"lng": 80.2921033
|
||||
},
|
||||
"Bharath College": {
|
||||
"lat": 12.9079915,
|
||||
"lng": 80.1394791
|
||||
},
|
||||
"Bharathi nagar": {
|
||||
"lat": 13.1226511,
|
||||
"lng": 80.2237949
|
||||
},
|
||||
"Butt Road": {
|
||||
"lat": 13.0084,
|
||||
"lng": 80.1987
|
||||
},
|
||||
"Butt road": {
|
||||
"lat": 13.0084,
|
||||
"lng": 80.1987
|
||||
},
|
||||
"CIT Nagar": {
|
||||
"lat": 13.0293843,
|
||||
"lng": 80.2342825
|
||||
},
|
||||
"CMBT (Koyambedu)": {
|
||||
"lat": 13.0678,
|
||||
"lng": 80.2054
|
||||
},
|
||||
"CRP": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"CRPF": {
|
||||
"lat": 12.9912054,
|
||||
"lng": 80.1881366
|
||||
},
|
||||
"Camp Road ICICI Bank": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Camp Road Singal": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Canara Bank": {
|
||||
"lat": 12.9764294,
|
||||
"lng": 80.2224084
|
||||
},
|
||||
"Central": {
|
||||
"lat": 13.0827,
|
||||
"lng": 80.2707
|
||||
},
|
||||
"Chembarambakkam": {
|
||||
"lat": 13.016769,
|
||||
"lng": 80.1367942
|
||||
},
|
||||
"Chengalpattu Bypass": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Chengalpattu Rattinakinaru": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Chennai Trade Centre": {
|
||||
"lat": 13.0142534,
|
||||
"lng": 80.1905788
|
||||
},
|
||||
"Chennirkuppam": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Cheriyan Hospital": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Cheyyar-SBI": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Chinmaiya Nagar": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Chintadripet (Post Offiec)": {
|
||||
"lat": 13.0761258,
|
||||
"lng": 80.270781
|
||||
},
|
||||
"Chintamani": {
|
||||
"lat": 13.0472403,
|
||||
"lng": 80.1853252
|
||||
},
|
||||
"Chinthamani": {
|
||||
"lat": 13.0410061,
|
||||
"lng": 80.2373742
|
||||
},
|
||||
"Chithukadu Blue": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Choolai Post Office": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Choolaimedu": {
|
||||
"lat": 13.0666515,
|
||||
"lng": 80.230974
|
||||
},
|
||||
"Choolaimedu Subway": {
|
||||
"lat": 13.0645,
|
||||
"lng": 80.2224
|
||||
},
|
||||
"Choolaimedu bus stop": {
|
||||
"lat": 13.0666287,
|
||||
"lng": 80.2305198
|
||||
},
|
||||
"Chrompet": {
|
||||
"lat": 12.961,
|
||||
"lng": 80.1462
|
||||
},
|
||||
"Collector Nagar": {
|
||||
"lat": 13.0884944,
|
||||
"lng": 80.1909707
|
||||
},
|
||||
"Collector Office": {
|
||||
"lat": 13.0959177,
|
||||
"lng": 80.2922668
|
||||
},
|
||||
"Collector nagar": {
|
||||
"lat": 13.0884944,
|
||||
"lng": 80.1909707
|
||||
},
|
||||
"D.R.Super Market": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"D1 Police Station": {
|
||||
"lat": 13.0683459,
|
||||
"lng": 80.2135958
|
||||
},
|
||||
"Dasprakash": {
|
||||
"lat": 13.0811,
|
||||
"lng": 80.2524
|
||||
},
|
||||
"Deepam Foods": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Donbosco": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"E.B": {
|
||||
"lat": 13.0869258,
|
||||
"lng": 80.2194441
|
||||
},
|
||||
"E.B. Stop": {
|
||||
"lat": 13.0869258,
|
||||
"lng": 80.2194441
|
||||
},
|
||||
"Eaga Theatre": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Egambaranathar Koil": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Egmore": {
|
||||
"lat": 13.0792,
|
||||
"lng": 80.2598
|
||||
},
|
||||
"Ekkatuthangal": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Elango Nagar": {
|
||||
"lat": 12.9715538,
|
||||
"lng": 80.2523792
|
||||
},
|
||||
"Ellaimman Koil": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Erumaiyur": {
|
||||
"lat": 12.9547388,
|
||||
"lng": 80.0815988
|
||||
},
|
||||
"Eswar Nagar": {
|
||||
"lat": 13.0577106,
|
||||
"lng": 80.2190678
|
||||
},
|
||||
"G3 Police Station": {
|
||||
"lat": 13.0683459,
|
||||
"lng": 80.2135958
|
||||
},
|
||||
"GRT": {
|
||||
"lat": 12.9826003,
|
||||
"lng": 80.2181059
|
||||
},
|
||||
"Ganga Cinima": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Gangaiamman koil": {
|
||||
"lat": 13.0551756,
|
||||
"lng": 80.1913579
|
||||
},
|
||||
"Gerugambakkam": {
|
||||
"lat": 13.0152345,
|
||||
"lng": 80.1368538
|
||||
},
|
||||
"Golden Flats": {
|
||||
"lat": 13.0883017,
|
||||
"lng": 80.1784121
|
||||
},
|
||||
"Golden flat": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Govardhanagari": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Govarthanagiri Bus Stand": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Government Hospital": {
|
||||
"lat": 13.1093369,
|
||||
"lng": 80.2312849
|
||||
},
|
||||
"Gudalore": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Guduvanchery": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Guindy": {
|
||||
"lat": 13.0067,
|
||||
"lng": 80.2206
|
||||
},
|
||||
"HDFC Bank": {
|
||||
"lat": 13.0308653,
|
||||
"lng": 80.2455467
|
||||
},
|
||||
"HVF": {
|
||||
"lat": 13.0293266,
|
||||
"lng": 80.1667524
|
||||
},
|
||||
"Housing Board": {
|
||||
"lat": 13.0084674,
|
||||
"lng": 80.2475552
|
||||
},
|
||||
"ICF Church": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"ICF Signal": {
|
||||
"lat": 13.1001091,
|
||||
"lng": 80.2145485
|
||||
},
|
||||
"IOB Bank": {
|
||||
"lat": 13.0224668,
|
||||
"lng": 80.2230059
|
||||
},
|
||||
"Ice House Police Station": {
|
||||
"lat": 13.052,
|
||||
"lng": 80.2762
|
||||
},
|
||||
"Indian Bank Thiruvninravur": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Indira Gandhi Nagar": {
|
||||
"lat": 13.0914233,
|
||||
"lng": 80.2541906
|
||||
},
|
||||
"Indra Nagar (KPM Railwaygate)": {
|
||||
"lat": 13.0370804,
|
||||
"lng": 80.1887213
|
||||
},
|
||||
"Irungattukottai bus stand": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Iyyappanthangal": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"JJ Nagar": {
|
||||
"lat": 13.0790498,
|
||||
"lng": 80.1719442
|
||||
},
|
||||
"JJ Nagar Police Station": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Janappanchatram Bypass": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Jaya College": {
|
||||
"lat": 13.1225267,
|
||||
"lng": 80.0454078
|
||||
},
|
||||
"Jayalakshmi Theatre": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Jeyachandran": {
|
||||
"lat": 12.9211296,
|
||||
"lng": 80.1968403
|
||||
},
|
||||
"Joint Office": {
|
||||
"lat": 13.101916,
|
||||
"lng": 80.230392
|
||||
},
|
||||
"Joshua School": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Jothi Nagar": {
|
||||
"lat": 12.9459767,
|
||||
"lng": 80.239775
|
||||
},
|
||||
"K4 Police Station": {
|
||||
"lat": 13.0925413,
|
||||
"lng": 80.2179712
|
||||
},
|
||||
"KK Nagar": {
|
||||
"lat": 13.0373,
|
||||
"lng": 80.2045
|
||||
},
|
||||
"KK Nagar ESI": {
|
||||
"lat": 13.0373,
|
||||
"lng": 80.2045
|
||||
},
|
||||
"Kachapeswarar Koil": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Kaduveti": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Kaiveli": {
|
||||
"lat": 12.9633783,
|
||||
"lng": 80.2160859
|
||||
},
|
||||
"Kakkalur": {
|
||||
"lat": 13.1305159,
|
||||
"lng": 79.9243758
|
||||
},
|
||||
"Kakkalur Signal": {
|
||||
"lat": 13.1305159,
|
||||
"lng": 79.9243758
|
||||
},
|
||||
"Kakkan Bridge": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Kallikuppam": {
|
||||
"lat": 13.1331405,
|
||||
"lng": 80.1701786
|
||||
},
|
||||
"Kalmandapam": {
|
||||
"lat": 13.1153712,
|
||||
"lng": 80.2905548
|
||||
},
|
||||
"Kalpana Lamp": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Kalyan Jewalrs": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Kamarajapuram": {
|
||||
"lat": 13.1933419,
|
||||
"lng": 80.2612852
|
||||
},
|
||||
"Kambar Colony": {
|
||||
"lat": 12.9755337,
|
||||
"lng": 80.2296597
|
||||
},
|
||||
"Ayyampettai": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Chitteri": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Ganeshapuram": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Kamban Nagar": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Kammal Street": {
|
||||
"lat": 13.0903441,
|
||||
"lng": 80.2791264
|
||||
},
|
||||
"Kammala street": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Kankaiyamman Kovil": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Kannadhasan Nagar": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Karanodai Bypass": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Karapakkam": {
|
||||
"lat": 12.9117073,
|
||||
"lng": 80.2277203
|
||||
},
|
||||
"Karapakkam - TCS": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Karayanchavadi": {
|
||||
"lat": 13.0467114,
|
||||
"lng": 80.1109051
|
||||
},
|
||||
"Karima Nagar": {
|
||||
"lat": 13.0118,
|
||||
"lng": 80.0214
|
||||
},
|
||||
"Kasi Theatre": {
|
||||
"lat": 13.0305,
|
||||
"lng": 80.2132
|
||||
},
|
||||
"Kasimedu": {
|
||||
"lat": 13.1364038,
|
||||
"lng": 80.2958012
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,13 @@ CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
BUS_ROUTES_PATH = os.path.abspath(os.path.join(CURRENT_DIR, "..", "backend", "src", "main", "resources", "bus_routes.json"))
|
||||
CACHE_PATH = os.path.join(CURRENT_DIR, "coordinates_cache.json")
|
||||
|
||||
# Domain restriction (Chennai, Tiruvallur, Kanchipuram districts)
|
||||
MIN_LAT, MAX_LAT = 12.7, 13.4
|
||||
MIN_LNG, MAX_LNG = 79.6, 80.4
|
||||
|
||||
def is_valid_coordinate(lat, lng):
|
||||
return MIN_LAT <= lat <= MAX_LAT and MIN_LNG <= lng <= MAX_LNG
|
||||
|
||||
# Predefined coordinates for hard-to-geocode stops or fallback landmarks in Chennai
|
||||
STATIC_COORDINATES = {
|
||||
"RIT Campus": {"lat": 13.0118, "lng": 80.0214},
|
||||
@@ -68,7 +75,15 @@ def load_cache():
|
||||
if os.path.exists(CACHE_PATH):
|
||||
try:
|
||||
with open(CACHE_PATH, "r", encoding="utf-8") as f:
|
||||
return json.load(f)
|
||||
data = json.load(f)
|
||||
# Clean coordinates that are outside the map route domain
|
||||
cleaned = {}
|
||||
for name, coords in data.items():
|
||||
if is_valid_coordinate(coords["lat"], coords["lng"]):
|
||||
cleaned[name] = coords
|
||||
else:
|
||||
print(f"Removing invalid cache entry for '{name}': {coords}")
|
||||
return cleaned
|
||||
except Exception:
|
||||
pass
|
||||
return {}
|
||||
@@ -114,8 +129,11 @@ def geocode_nominatim(name):
|
||||
if data:
|
||||
lat = float(data[0]["lat"])
|
||||
lng = float(data[0]["lon"])
|
||||
print(f"-> Found: {lat}, {lng}")
|
||||
return {"lat": lat, "lng": lng}
|
||||
if is_valid_coordinate(lat, lng):
|
||||
print(f"-> Found within domain: {lat}, {lng}")
|
||||
return {"lat": lat, "lng": lng}
|
||||
else:
|
||||
print(f"-> Found but DISCARDED (outside domain): {lat}, {lng}")
|
||||
# Rest to respect API limit
|
||||
time.sleep(1.2)
|
||||
except Exception as e:
|
||||
@@ -132,39 +150,7 @@ def geocode_nominatim(name):
|
||||
print(f"-> No match found for '{name}'. Defaulting to RIT Campus.")
|
||||
return STATIC_COORDINATES["RIT Campus"]
|
||||
|
||||
def geocode_routes():
|
||||
if not os.path.exists(BUS_ROUTES_PATH):
|
||||
print(f"Error: {BUS_ROUTES_PATH} does not exist.")
|
||||
return
|
||||
|
||||
with open(BUS_ROUTES_PATH, "r", encoding="utf-8") as f:
|
||||
routes = json.load(f)
|
||||
|
||||
cache = load_cache()
|
||||
modified = False
|
||||
|
||||
# Collect all unique stop names
|
||||
unique_names = set()
|
||||
for r in routes:
|
||||
unique_names.add(r["from"])
|
||||
unique_names.add(r["to"])
|
||||
for stop in r.get("stops", []):
|
||||
unique_names.add(stop["name"])
|
||||
|
||||
print(f"Total unique stops to geocode: {len(unique_names)}")
|
||||
|
||||
# Geocode each stop
|
||||
count = 0
|
||||
for name in sorted(unique_names):
|
||||
if name not in cache:
|
||||
coords = geocode_nominatim(name)
|
||||
cache[name] = coords
|
||||
count += 1
|
||||
# Save cache incrementally
|
||||
if count % 5 == 0:
|
||||
save_cache(cache)
|
||||
save_cache(cache)
|
||||
|
||||
def update_bus_routes_json(routes, cache):
|
||||
# Enrich bus_routes.json
|
||||
for r in routes:
|
||||
from_coords = cache.get(r["from"], STATIC_COORDINATES["RIT Campus"])
|
||||
@@ -183,7 +169,49 @@ def geocode_routes():
|
||||
with open(BUS_ROUTES_PATH, "w", encoding="utf-8") as f:
|
||||
json.dump(routes, f, indent=2)
|
||||
|
||||
print("Geocoding process complete! bus_routes.json updated with coordinates.")
|
||||
def geocode_routes():
|
||||
if not os.path.exists(BUS_ROUTES_PATH):
|
||||
print(f"Error: {BUS_ROUTES_PATH} does not exist.")
|
||||
return
|
||||
|
||||
with open(BUS_ROUTES_PATH, "r", encoding="utf-8") as f:
|
||||
routes = json.load(f)
|
||||
|
||||
cache = load_cache()
|
||||
|
||||
# Save the cleaned cache to start
|
||||
save_cache(cache)
|
||||
|
||||
# Write coordinates to the JSON immediately for any stops that are already in the cache!
|
||||
update_bus_routes_json(routes, cache)
|
||||
print("Initial cache applied to bus_routes.json.")
|
||||
|
||||
# Collect all unique stop names
|
||||
unique_names = set()
|
||||
for r in routes:
|
||||
unique_names.add(r["from"])
|
||||
unique_names.add(r["to"])
|
||||
for stop in r.get("stops", []):
|
||||
unique_names.add(stop["name"])
|
||||
|
||||
print(f"Total unique stops to geocode: {len(unique_names)}")
|
||||
|
||||
# Geocode each stop
|
||||
count = 0
|
||||
for name in sorted(unique_names):
|
||||
if name not in cache:
|
||||
coords = geocode_nominatim(name)
|
||||
cache[name] = coords
|
||||
count += 1
|
||||
# Save cache and update JSON incrementally
|
||||
save_cache(cache)
|
||||
update_bus_routes_json(routes, cache)
|
||||
print(f"Updated routes JSON with '{name}' ({coords['lat']}, {coords['lng']})")
|
||||
|
||||
# Final save
|
||||
save_cache(cache)
|
||||
update_bus_routes_json(routes, cache)
|
||||
print("Geocoding process complete! bus_routes.json fully synchronized.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
geocode_routes()
|
||||
|
||||
Reference in New Issue
Block a user