diff --git a/components/Map.js b/components/Map.js new file mode 100644 index 0000000..d63f936 --- /dev/null +++ b/components/Map.js @@ -0,0 +1,31 @@ +import { MapContainer, TileLayer, Marker, Popup } from 'react-leaflet'; +import 'leaflet/dist/leaflet.css'; +import L from 'leaflet'; + +// Убедитесь, что иконка маркера отображается правильно +delete L.Icon.Default.prototype._getIconUrl; +L.Icon.Default.mergeOptions({ + iconRetinaUrl: '/leaflet/images/marker-icon-2x.png', + iconUrl: '/leaflet/images/marker-icon.png', + shadowUrl: '/leaflet/images/marker-shadow.png', +}); + +const Map = () => { + const position = [51.505, -0.09]; // Координаты для центра карты + + return ( + + + + + A pretty CSS3 popup.
Easily customizable. +
+
+
+ ); +}; + +export default Map; \ No newline at end of file diff --git a/eslint.config.mjs b/eslint.config.mjs index c85fb67..fea3594 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -14,3 +14,4 @@ const eslintConfig = [ ]; export default eslintConfig; + diff --git a/package-lock.json b/package-lock.json index f2ddac7..021cdb6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,9 +8,11 @@ "name": "my-qgis-app", "version": "0.1.0", "dependencies": { + "leaflet": "^1.9.4", "next": "15.2.3", "react": "^19.0.0", - "react-dom": "^19.0.0" + "react-dom": "^19.0.0", + "react-leaflet": "^5.0.0" }, "devDependencies": { "@eslint/eslintrc": "^3", @@ -840,6 +842,17 @@ "node": ">=12.4.0" } }, + "node_modules/@react-leaflet/core": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-leaflet/core/-/core-3.0.0.tgz", + "integrity": "sha512-3EWmekh4Nz+pGcr+xjf0KNyYfC3U2JjnkWsh0zcqaexYqmmB5ZhH37kz41JXGmKzpaMZCnPofBBm64i+YrEvGQ==", + "license": "Hippocratic-2.1", + "peerDependencies": { + "leaflet": "^1.9.0", + "react": "^19.0.0", + "react-dom": "^19.0.0" + } + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -3863,6 +3876,12 @@ "node": ">=0.10" } }, + "node_modules/leaflet": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", + "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==", + "license": "BSD-2-Clause" + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -4693,6 +4712,20 @@ "dev": true, "license": "MIT" }, + "node_modules/react-leaflet": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-5.0.0.tgz", + "integrity": "sha512-CWbTpr5vcHw5bt9i4zSlPEVQdTVcML390TjeDG0cK59z1ylexpqC6M1PJFjV8jD7CF+ACBFsLIDs6DRMoLEofw==", + "license": "Hippocratic-2.1", + "dependencies": { + "@react-leaflet/core": "^3.0.0" + }, + "peerDependencies": { + "leaflet": "^1.9.0", + "react": "^19.0.0", + "react-dom": "^19.0.0" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", diff --git a/package.json b/package.json index 3e113a3..f10a18a 100644 --- a/package.json +++ b/package.json @@ -9,19 +9,21 @@ "lint": "next lint" }, "dependencies": { + "leaflet": "^1.9.4", + "next": "15.2.3", "react": "^19.0.0", "react-dom": "^19.0.0", - "next": "15.2.3" + "react-leaflet": "^5.0.0" }, "devDependencies": { - "typescript": "^5", + "@eslint/eslintrc": "^3", + "@tailwindcss/postcss": "^4", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", - "@tailwindcss/postcss": "^4", - "tailwindcss": "^4", "eslint": "^9", "eslint-config-next": "15.2.3", - "@eslint/eslintrc": "^3" + "tailwindcss": "^4", + "typescript": "^5" } } diff --git a/pages/index.js b/pages/index.js new file mode 100644 index 0000000..6d286a8 --- /dev/null +++ b/pages/index.js @@ -0,0 +1,15 @@ +import Head from 'next/head'; +import Map from '../components/Map'; + +export default function Home() { + return ( +
+ + QGIS Map Example + + + + +
+ ); +} \ No newline at end of file