diff --git a/ts/rmo/content/Nuisance.vue b/ts/rmo/content/Nuisance.vue
index 7bc4ba9a..2814a05b 100644
--- a/ts/rmo/content/Nuisance.vue
+++ b/ts/rmo/content/Nuisance.vue
@@ -499,10 +499,11 @@ select.tall {
diff --git a/ts/store/location.ts b/ts/store/location.ts
new file mode 100644
index 00000000..a20e569f
--- /dev/null
+++ b/ts/store/location.ts
@@ -0,0 +1,35 @@
+import { defineStore } from "pinia";
+
+interface GeolocationOptions {
+ maximumAge?: number;
+ timeout?: number;
+ enableHighAccuracy?: boolean;
+}
+export const useLocationStore = defineStore("location", () => {
+ function get(options?: GeolocationOptions): Promise {
+ return new Promise((resolve, reject) => {
+ // Check if geolocation is supported by the browser
+ if (!navigator.geolocation) {
+ reject(new Error("Geolocation is not supported by your browser"));
+ return;
+ }
+
+ // Default options if none provided
+ const geolocationOptions = options || {
+ enableHighAccuracy: true,
+ timeout: 5000,
+ maximumAge: 0,
+ };
+
+ // Call the geolocation API
+ navigator.geolocation.getCurrentPosition(
+ (position) => resolve(position),
+ (error) => reject(error),
+ geolocationOptions,
+ );
+ });
+ }
+ return {
+ get,
+ };
+});
diff --git a/ts/type/map.ts b/ts/type/map.ts
new file mode 100644
index 00000000..1f83aa8a
--- /dev/null
+++ b/ts/type/map.ts
@@ -0,0 +1,16 @@
+import maplibregl from "maplibre-gl";
+import type { Location } from "@/types";
+
+export interface Camera {
+ location: Location;
+ zoom: number;
+}
+
+export type MoveEndEventInternal = maplibregl.MapLibreEvent<
+ | maplibregl.MapMouseEvent
+ | maplibregl.MapTouchEvent
+ | maplibregl.MapWheelEvent
+ | undefined
+> & {
+ isInternalUpdate: boolean;
+};