From 842e323042d8a89f28776052efb51bfa127bf6e2 Mon Sep 17 00:00:00 2001 From: Varun Raj Date: Mon, 30 Dec 2024 22:36:48 +0530 Subject: [PATCH] feat: added google heatmap Signed-off-by: Varun Raj --- bun.lockb | Bin 407641 -> 408531 bytes package.json | 1 + src/components/shared/Sidebar.tsx | 1 - src/config/constants/sidebarNavs.tsx | 7 +- src/config/environment.ts | 1 + src/config/routes.ts | 1 + src/contexts/ConfigContext.tsx | 1 + src/handlers/api/asset.handler.ts | 5 ++ src/pages/_app.tsx | 1 + src/pages/api/assets/geo-heatmap.ts | 33 +++++++++ src/pages/assets/geo-heatmap.tsx | 96 +++++++++++++++++++++++++++ 11 files changed, 145 insertions(+), 2 deletions(-) create mode 100644 src/pages/api/assets/geo-heatmap.ts create mode 100644 src/pages/assets/geo-heatmap.tsx diff --git a/bun.lockb b/bun.lockb index 9e16cf7de14e87de0ce979db92fe812e655e10ef..c8e45ab1da1ac3aa7704a815c6c2528cd676f33f 100755 GIT binary patch delta 75744 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

6`VaOtMN^kfsQf|icy839#~)i~X;0$Ax| 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 QN4na%wl9CF+g$hm0Soo6_5c6? delta 74622 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 diff --git a/package.json b/package.json index 53e14c1..65ebe5d 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "@types/cookie": "^0.6.0", "@types/qs": "^6.9.15", "@types/react-calendar-heatmap": "^1.6.7", + "@vis.gl/react-google-maps": "^1.4.2", "axios": "^1.7.4", "chrono-node": "^1.4.9", "class-variance-authority": "^0.7.0", diff --git a/src/components/shared/Sidebar.tsx b/src/components/shared/Sidebar.tsx index f37830e..61b3401 100644 --- a/src/components/shared/Sidebar.tsx +++ b/src/components/shared/Sidebar.tsx @@ -5,7 +5,6 @@ import { cn } from "@/lib/utils"; import { useRouter } from "next/router"; import dynamic from "next/dynamic"; -import Image from "next/image"; import ProfileInfo from "./ProfileInfo"; const ThemeSwitcher = dynamic(() => import("@/components/shared/ThemeSwitcher"), { diff --git a/src/config/constants/sidebarNavs.tsx b/src/config/constants/sidebarNavs.tsx index 93ba057..f5c58e9 100644 --- a/src/config/constants/sidebarNavs.tsx +++ b/src/config/constants/sidebarNavs.tsx @@ -1,4 +1,4 @@ -import { Album, GalleryHorizontal, GalleryVerticalEnd, Home, Image, LocateOff, MapPinX, Search, User } from "lucide-react"; +import { Album, GalleryHorizontal, GalleryVerticalEnd, Home, Image, LocateOff, MapPin, MapPinX, Search, User } from "lucide-react"; export const sidebarNavs = [ { @@ -31,5 +31,10 @@ export const sidebarNavs = [ link: "/albums", icon: , }, + { + title: "Geo Heatmap", + link: "/assets/geo-heatmap", + icon: , + } ]; diff --git a/src/config/environment.ts b/src/config/environment.ts index a6ac9d1..692c635 100644 --- a/src/config/environment.ts +++ b/src/config/environment.ts @@ -7,6 +7,7 @@ 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, }; diff --git a/src/config/routes.ts b/src/config/routes.ts index 8d9bffb..3e25fc0 100644 --- a/src/config/routes.ts +++ b/src/config/routes.ts @@ -34,6 +34,7 @@ export const UPDATE_ASSETS_PATH = BASE_PROXY_ENDPOINT + "/assets"; export const ASSET_THUMBNAIL_PATH = (id: string) => BASE_PROXY_ENDPOINT + "/asset/thumbnail/" + id; export const ASSET_PREVIEW_PATH = (id: string) => BASE_PROXY_ENDPOINT + "/asset/thumbnail/" + id + "?size=preview"; export const ASSET_VIDEO_PATH = (id: string) => BASE_PROXY_ENDPOINT + "/asset/video/" + id; +export const ASSET_GEO_HEATMAP_PATH = BASE_API_ENDPOINT + "/assets/geo-heatmap"; // Location diff --git a/src/contexts/ConfigContext.tsx b/src/contexts/ConfigContext.tsx index a633fb0..7558664 100644 --- a/src/contexts/ConfigContext.tsx +++ b/src/contexts/ConfigContext.tsx @@ -5,6 +5,7 @@ export interface ConfigContextType { exImmichUrl: string; version?: string; geminiEnabled: boolean; + googleMapsApiKey: string; } const ConfigContext = createContext({ diff --git a/src/handlers/api/asset.handler.ts b/src/handlers/api/asset.handler.ts index b04cced..279f0f7 100644 --- a/src/handlers/api/asset.handler.ts +++ b/src/handlers/api/asset.handler.ts @@ -1,5 +1,6 @@ import { ADD_ASSETS_ALBUMS_PATH, + ASSET_GEO_HEATMAP_PATH, FIND_ASSETS, LIST_ALBUMS_PATH, LIST_MISSING_LOCATION_ASSETS_PATH, @@ -50,4 +51,8 @@ export const updateAssets = async (params: IUpdateAssetsParams) => { export const findAssets = async (query: string) => { return API.post(FIND_ASSETS, { query }); +} + +export const getAssetGeoHeatmap = async () => { + return API.get(ASSET_GEO_HEATMAP_PATH); } \ No newline at end of file diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index d9569e6..649a4b7 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -30,6 +30,7 @@ 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/api/assets/geo-heatmap.ts b/src/pages/api/assets/geo-heatmap.ts new file mode 100644 index 0000000..ba5870a --- /dev/null +++ b/src/pages/api/assets/geo-heatmap.ts @@ -0,0 +1,33 @@ +import { NextApiResponse } from "next"; + +import { db } from "@/config/db"; +import { getCurrentUser } from "@/handlers/serverUtils/user.utils"; +import { NextApiRequest } from "next"; +import { assets, exif } from "@/schema"; +import { and, eq, isNotNull } from "drizzle-orm"; + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + const currentUser = await getCurrentUser(req); + if (!currentUser) { + return res.status(401).json({ message: 'Unauthorized' }); + } + + const dbAssets = await db.select({ + assetId: assets.id, + latitude: exif.latitude, + longitude: exif.longitude, + }).from(assets) + .innerJoin(exif, eq(assets.id, exif.assetId)) + .where( + and( + eq(assets.ownerId, currentUser.id), + isNotNull(exif.latitude), + isNotNull(exif.longitude) + ) + ); + const heatmapData = dbAssets.map((asset) => [ + asset.longitude, + asset.latitude, + ]); + res.status(200).json(heatmapData); +} diff --git a/src/pages/assets/geo-heatmap.tsx b/src/pages/assets/geo-heatmap.tsx new file mode 100644 index 0000000..44a9136 --- /dev/null +++ b/src/pages/assets/geo-heatmap.tsx @@ -0,0 +1,96 @@ +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 PageLayout from '@/components/layouts/PageLayout'; +import { getAssetGeoHeatmap } from '@/handlers/api/asset.handler'; +import { useTheme } from 'next-themes'; +import { MapPinX } from 'lucide-react'; + + +const HeatMap = () => { + + 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().then((data) => { + console.log(data); + heatmap.setData(data.map(([lng, lat]: [number, number]) => ({ + location: new google.maps.LatLng(lat, lng), + weight: 10 + }))); + }); + + }, [heatmap]); + + 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'); + + useEffect(() => { + if (theme === 'light') { + setMapId(""); + } else { + setMapId('7a9e2ebecd32a903'); + } + }, [theme]); + + + return ( + +

+
+ {googleMapsApiKey ? ( + + + + + + ) : ( +
+ +

No Google Maps API key found

+

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

+
+ )} +
+ + ) +}