📋 Project Overview

San Diego Project is a frontend-only React-based web application that allows users to visualize 14 different infrastructure layers of San Diego on an interactive map. Users can toggle layers on or off and search for specific addresses (e.g., 949 Sapphire St) to drop a marker on the map and view all relevant infrastructure layers for that location.


🤝 Collaboration & Development


📞 Contact & Repository

LinkedIn : Coming Soon
Repository : Coming Soon

🎉 Project Completion

San Diego Infrastructure Mapping Web App successfully demonstrates the integration of modern frontend development, GIS data visualization, and user-centered design principles. The project achieved its core objectives of providing a unified platform for visualizing multiple infrastructure layers with intuitive search and navigation capabilities.

"Mapping the future of civic infrastructure visualization, one layer at a time."

🎯 Problem Statement

Traditional infrastructure tools are often too complex for quick and efficient use. Key challenges include:

💡 Solution Approach

The project solves these issues by:


🚀 Key Features

Core Functionality

Technical Highlights


🏗️ System Architecture

┌───────────────────────┐ │  React Frontend       │ │  (Leaflet.js Map)     │ │                       │ │  - 14 Layers          │ │  - Address Search     │ │  - Marker Placement   │ │  - Layer Toggles      │ └─────────▲─────────────┘           │           ▼ ┌───────────────────────┐ │ GeoJSON Data Sources  │ │ (San Diego Open Data) │ └───────────────────────┘

🛠️ Technical Implementation

Map & Layers (React + Leaflet)

import { MapContainer, TileLayer, GeoJSON } from 'react-leaflet'; <MapContainer center={[32.7157, -117.1611]} zoom={12}> <TileLayer url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" /> {layers.map(layer => layer.visible && ( <GeoJSON key={layer.id} data={layer.geoJson} /> ))} </MapContainer>

Layer Toggle Component

{layers.map(layer => ( <div key={layer.id}> <input type="checkbox" checked={layer.visible} onChange={() => toggleLayer(layer.id)} /> {layer.name} </div> ))}

Search Box & Marker Placement

import L from 'leaflet'; const handleSearch = async (address) => { const response = await fetch(`https://nominatim.openstreetmap.org/search?format=json&q=${address}`); const data = await response.json(); if (data.length > 0) { const { lat, lon } = data[0]; const marker = L.marker([lat, lon]).addTo(map); map.setView([lat, lon], 16); } };

📊 Data Visualization

Map Layers


🛠️ Technology Stack

Frontend

React.js: UI framework
Leaflet.js: Mapping library for rendering maps and layers
React-Leaflet: Integration between React and Leaflet
CSS Modules: Component-level styling

APIs & Data

San Diego GeoJSON APIs: Open data for infrastructure layers
OpenStreetMap (Nominatim): Geocoding service for address search

Tools

Vercel/Netlify: Frontend hosting
VS Code: Development environment
Git: Version control

🔍 Key Challenges & Solutions

Challenge 1: Managing 14 Layers

Problem: Performance drops when rendering multiple large GeoJSON files.

Solution:
  • Implemented lazy loading for layers
  • Used simplified geometries for faster rendering
Challenge 2: Accurate Address Search

Problem: Inconsistent results from geocoding for certain addresses.

Solution:
  • Integrated OpenStreetMap Nominatim API with error handling and fallback mechanisms
Challenge 3: Layer Usability

Problem: Users needed a clear way to toggle layers without clutter.

Solution:
  • Added a collapsible layer control sidebar with clear labels and checkboxes

📈 Performance Metrics

<1s
Map Rendering
<300ms
Layer Toggle Speed
~95%
Search Accuracy
Instant
Marker Placement

🚀 Future Enhancements


📚 Learning Outcomes

Technical Skills Developed

Professional Skills Enhanced


🎯 Project Impact


📖 Documentation & Resources


🏆 Acknowledgments

Special thanks to the San Diego Open Data Portal for making this project possible.