From 0349646953d0cbc027138b11d20e863f253631fd Mon Sep 17 00:00:00 2001 From: Varun Raj Date: Wed, 27 Aug 2025 08:30:42 +0530 Subject: [PATCH] feat: moved from google maps to open street maps for heatmaps Signed-off-by: Varun Raj --- .env.sample | 1 - README.md | 1 - bun.lockb | Bin 490231 -> 490115 bytes package.json | 3 +- src/components/LeafletHeatMap.tsx | 139 ++++++++++++++++++++++++++++ src/config/environment.ts | 1 - src/contexts/ConfigContext.tsx | 2 - src/pages/_app.tsx | 1 - src/pages/assets/geo-heatmap.tsx | 147 ++++++++++-------------------- src/styles/globals.scss | 11 +++ 10 files changed, 199 insertions(+), 107 deletions(-) create mode 100644 src/components/LeafletHeatMap.tsx diff --git a/.env.sample b/.env.sample index a47d796..1b86051 100644 --- a/.env.sample +++ b/.env.sample @@ -10,7 +10,6 @@ DB_DATABASE_NAME="" # Name of the database SECURE_COOKIE=false # Set to true to enable secure cookies # Optional -GOOGLE_MAPS_API_KEY="" # Google Maps API Key for heatmap GEMINI_API_KEY="" # Gemini API Key for parsing search query in "Find" # Immich Share Link diff --git a/README.md b/README.md index 3fd8e8a..d2cbcd9 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,6 @@ DB_PORT = "5432" DB_HOST = "immich_postgres" # Optional -GOOGLE_MAPS_API_KEY= # Google Maps API Key GEMINI_API_KEY= # Gemini API Key ``` Refer here for obtaining Immich API Key: https://immich.app/docs/features/command-line-interface#obtain-the-api-key diff --git a/bun.lockb b/bun.lockb index f82886271f2b8cb8281196536ccad690efe87604..f6133adbc69ad5e7cc7fcab1dd5887b36eb046c2 100755 GIT binary patch delta 95544 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 delta 95770 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 T+1;V;ic&VN$9-dEK&}7(_TDh> diff --git a/package.json b/package.json index ff936fe..c02115e 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,6 @@ "@types/react-autosuggest": "^10.1.11", "@types/react-calendar-heatmap": "^1.6.7", "@types/react-window": "^1.8.8", - "@vis.gl/react-google-maps": "^1.4.2", "axios": "^1.7.4", "chrono-node": "^1.4.9", "class-variance-authority": "^0.7.0", @@ -55,6 +54,7 @@ "jsonwebtoken": "^9.0.2", "leaflet": "^1.9.4", "leaflet-defaulticon-compatibility": "0.1.2", + "leaflet.heat": "^0.2.0", "lucide-react": "^0.428.0", "next": "14.2.5", "next-themes": "^0.3.0", @@ -86,6 +86,7 @@ "@tanstack/eslint-plugin-query": "^5.68.0", "@types/jsonwebtoken": "^9.0.6", "@types/leaflet": "^1.9.15", + "@types/leaflet.heat": "^0.2.4", "@types/node": "^20", "@types/pg": "^8.11.6", "@types/react": "^18", diff --git a/src/components/LeafletHeatMap.tsx b/src/components/LeafletHeatMap.tsx new file mode 100644 index 0000000..c7a40d5 --- /dev/null +++ b/src/components/LeafletHeatMap.tsx @@ -0,0 +1,139 @@ +import React, { useEffect, useRef, useState } from 'react'; +import L from 'leaflet'; +import 'leaflet/dist/leaflet.css'; +import 'leaflet.heat'; +import { getAssetGeoHeatmap, IHeatMapParams } from '@/handlers/api/asset.handler'; +import { Loader2 } from 'lucide-react'; + +// Fix for default markers in Leaflet +import 'leaflet-defaulticon-compatibility/dist/leaflet-defaulticon-compatibility.css'; +import 'leaflet-defaulticon-compatibility'; + +interface LeafletHeatMapProps { + filters: IHeatMapParams; + isDarkMode: boolean; + onLoadingChange?: (loading: boolean) => void; +} + +const LeafletHeatMap: React.FC = ({ filters, isDarkMode, onLoadingChange }) => { + const mapRef = useRef(null); + const mapContainerRef = useRef(null); + const heatLayerRef = useRef(null); + const [isLoading, setIsLoading] = useState(false); + + useEffect(() => { + if (!mapContainerRef.current) return; + + // Initialize the map + const map = L.map(mapContainerRef.current, { + center: [0, 0], + zoom: 2, + zoomControl: true, + scrollWheelZoom: true, + doubleClickZoom: true, + boxZoom: true, + keyboard: true, + dragging: true, + touchZoom: true, + }); + + mapRef.current = map; + + // Add tile layer based on theme + const tileLayer = isDarkMode + ? L.tileLayer('https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png', { + attribution: '© OpenStreetMap contributors © CARTO', + subdomains: 'abcd', + maxZoom: 20 + }) + : L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { + attribution: '© OpenStreetMap contributors', + maxZoom: 20 + }); + + tileLayer.addTo(map); + + return () => { + if (mapRef.current) { + mapRef.current.remove(); + mapRef.current = null; + } + }; + }, [isDarkMode]); + + useEffect(() => { + if (!mapRef.current) return; + + // Start loading + setIsLoading(true); + onLoadingChange?.(true); + + // Fetch heatmap data and update the layer + getAssetGeoHeatmap(filters).then((data) => { + // Remove existing heat layer + if (heatLayerRef.current) { + mapRef.current?.removeLayer(heatLayerRef.current); + } + + // Create new heat layer with the data + // Convert [lng, lat] to [lat, lng, intensity] format for leaflet.heat + const heatData: [number, number, number][] = data.map(([lng, lat]: [number, number]) => [ + lat, // latitude first for leaflet.heat + lng, // longitude second + 1 // intensity (weight) + ]); + + if (heatData.length > 0) { + heatLayerRef.current = L.heatLayer(heatData, { + radius: 25, + blur: 15, + maxZoom: 17, + max: 1.0, + minOpacity: 0.5, + }).addTo(mapRef.current!); + + // Fit map bounds to show all heat points + const group = new L.FeatureGroup(); + heatData.forEach(([lat, lng]) => { + L.marker([lat, lng]).addTo(group); + }); + + if (heatData.length === 1) { + // If only one point, center on it with a reasonable zoom level + mapRef.current!.setView([heatData[0][0], heatData[0][1]], 10); + } else { + // Fit bounds with some padding + mapRef.current!.fitBounds(group.getBounds(), { padding: [20, 20] }); + } + } + }).catch((error) => { + console.error('Error loading heatmap data:', error); + }).finally(() => { + // End loading + setIsLoading(false); + onLoadingChange?.(false); + }); + }, [filters, onLoadingChange]); + + return ( +
+
+ + {/* Loading Overlay */} + {isLoading && ( +
+
+ +

Loading heatmap data...

+
+
+ )} +
+ ); +}; + +export default LeafletHeatMap; diff --git a/src/config/environment.ts b/src/config/environment.ts index a903517..380495f 100644 --- a/src/config/environment.ts +++ b/src/config/environment.ts @@ -13,7 +13,6 @@ export const ENV = { SECURE_COOKIE: process.env.SECURE_COOKIE === 'true', VERSION: process.env.VERSION, GEMINI_API_KEY: process.env.GEMINI_API_KEY as string, - GOOGLE_MAPS_API_KEY: process.env.GOOGLE_MAPS_API_KEY as string, IMMICH_SHARE_LINK_KEY: process.env.IMMICH_SHARE_LINK_KEY as string, POWER_TOOLS_ENDPOINT_URL: process.env.POWER_TOOLS_ENDPOINT_URL as string, }; diff --git a/src/contexts/ConfigContext.tsx b/src/contexts/ConfigContext.tsx index cb13231..a633fb0 100644 --- a/src/contexts/ConfigContext.tsx +++ b/src/contexts/ConfigContext.tsx @@ -5,7 +5,6 @@ export interface ConfigContextType { exImmichUrl: string; version?: string; geminiEnabled: boolean; - googleMapsApiKey: string; } const ConfigContext = createContext({ @@ -13,7 +12,6 @@ const ConfigContext = createContext({ exImmichUrl: "", version: "", geminiEnabled: false, - googleMapsApiKey: "", }); export default ConfigContext; diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 4954850..2b8ea0e 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -34,7 +34,6 @@ App.getInitialProps = async () => { immichURL: ENV.IMMICH_URL, version: ENV.VERSION, geminiEnabled: !!ENV.GEMINI_API_KEY?.length, - googleMapsApiKey: ENV.GOOGLE_MAPS_API_KEY, }, }; }; diff --git a/src/pages/assets/geo-heatmap.tsx b/src/pages/assets/geo-heatmap.tsx index 94b376b..3c65ee7 100644 --- a/src/pages/assets/geo-heatmap.tsx +++ b/src/pages/assets/geo-heatmap.tsx @@ -1,126 +1,73 @@ import Header from '@/components/shared/Header' -import { useConfig } from '@/contexts/ConfigContext'; -import React, { useEffect, useMemo, useState } from 'react' -import { useMap, useMapsLibrary } from '@vis.gl/react-google-maps'; -import { APIProvider, Map } from '@vis.gl/react-google-maps'; +import React, { useState } from 'react' import PageLayout from '@/components/layouts/PageLayout'; import { getAssetGeoHeatmap, IHeatMapParams } from '@/handlers/api/asset.handler'; import { useTheme } from 'next-themes'; -import { MapPinX, X } from 'lucide-react'; +import { X } from 'lucide-react'; import AlbumDropdown from '@/components/shared/AlbumDropdown'; import PeopleDropdown from '@/components/shared/PeopleDropdown'; import { Button } from '@/components/ui/button'; +import dynamic from 'next/dynamic'; + +// Dynamically import the LeafletHeatMap component to avoid SSR issues +const LeafletHeatMap = dynamic(() => import('../../components/LeafletHeatMap'), { + ssr: false, + loading: () =>
Loading map...
+}); interface IHeatMapProps { filters: IHeatMapParams; } -const HeatMap = ({ filters }: IHeatMapProps) => { - - const map = useMap(); - const visualization = useMapsLibrary('visualization'); - - const heatmap = useMemo(() => { - if (!visualization) return null; - - return new google.maps.visualization.HeatmapLayer({ - radius: 20, - opacity: 0.5 - }); - - }, [visualization]); - - useEffect(() => { - if (!heatmap) return; - - getAssetGeoHeatmap(filters).then((data) => { - heatmap.setData([]); - heatmap.setData(data.map(([lng, lat]: [number, number]) => ({ - location: new google.maps.LatLng(lat, lng), - weight: 10 - }))); - }); - - }, [heatmap, filters]); - - useEffect(() => { - if (!heatmap) return; - - heatmap.setMap(map); - - return () => { - heatmap.setMap(null); - }; - }, [heatmap, map]); - - return null; -} - export default function GeoHeatmap() { - const { googleMapsApiKey } = useConfig(); const { theme } = useTheme(); - const [mapId, setMapId] = useState('7a9e2ebecd32a903'); const [filters, setFilters] = useState<{ albumIds?: string peopleIds?: string }>({ }); - - useEffect(() => { - if (theme === 'light') { - setMapId(""); - } else { - setMapId('7a9e2ebecd32a903'); - } - }, [theme]); + const [isLoading, setIsLoading] = useState(false); return ( -
- { - setFilters({ - ...filters, - albumIds: albumIds?.[0] - }) - }} /> - { - setFilters({ - ...filters, - peopleIds: peopleIds?.[0] - }) - }} /> - - - } /> -
- {googleMapsApiKey ? ( - - + { + setFilters({ + ...filters, + albumIds: albumIds?.[0] + }) + }} /> - - - - ) : ( -
- -

No Google Maps API key found

-

- Please create and add your Google Maps API key in the env file under GOOGLE_MAPS_API_KEY. -

-
- )} + { + setFilters({ + ...filters, + peopleIds: peopleIds?.[0] + }) + }} + /> + + + } + /> +
+
) diff --git a/src/styles/globals.scss b/src/styles/globals.scss index afc4d8c..f14c264 100644 --- a/src/styles/globals.scss +++ b/src/styles/globals.scss @@ -98,4 +98,15 @@ .ReactGridGallery_tile { @apply bg-zinc-800 !important; } +} + + +.leaflet-tile-pane { + z-index: 1 !important; +} +.leaflet-pane { + z-index: 2 !important; +} +.leaflet-control-container { + z-index: 3 !important; } \ No newline at end of file