Spaces:
Runtime error
Runtime error
Commit
·
bbaff48
1
Parent(s):
fede4e1
Add borders for satellite map view
Browse files- Manually copypasted a json denoting all the border coordinates of the world. Source - https://raw.githubusercontent.com/datasets/geo-countries/master/data/countries.geojson
- This was easier than using a module.
- Sub-country level border unavailable in the copypasted data. I won't add it as it'll make it messier.
- README.md +2 -1
- frontend/src/components/Map.js +27 -5
README.md
CHANGED
@@ -22,4 +22,5 @@ pinned: false
|
|
22 |
|
23 |
## Resources
|
24 |
- [Geodesic Area calculator](https://geographiclib.sourceforge.io/cgi-bin/Planimeter?type=polygon&rhumb=geodesic&radius=6378137&flattening=1%2F298.257223563&input=40.7128%2C+-74.0060%0D%0A34.0522%2C+-118.2437%0D%0A51.5074%2C+0.1278&option=Submit)
|
25 |
-
- [Area calculator function in geographiclib-geodesic module's codebase](https://github.com/geographiclib/geographiclib-js/blob/main/geodesic/PolygonArea.js)
|
|
|
|
22 |
|
23 |
## Resources
|
24 |
- [Geodesic Area calculator](https://geographiclib.sourceforge.io/cgi-bin/Planimeter?type=polygon&rhumb=geodesic&radius=6378137&flattening=1%2F298.257223563&input=40.7128%2C+-74.0060%0D%0A34.0522%2C+-118.2437%0D%0A51.5074%2C+0.1278&option=Submit)
|
25 |
+
- [Area calculator function in geographiclib-geodesic module's codebase](https://github.com/geographiclib/geographiclib-js/blob/main/geodesic/PolygonArea.js)
|
26 |
+
- [Country border data](https://raw.githubusercontent.com/datasets/geo-countries/master/data/countries.geojson)
|
frontend/src/components/Map.js
CHANGED
@@ -9,7 +9,7 @@ import { MapContainer, TileLayer,
|
|
9 |
Polyline,
|
10 |
Tooltip,
|
11 |
Polygon,
|
12 |
-
|
13 |
} from 'react-leaflet';
|
14 |
import L from 'leaflet';
|
15 |
import 'leaflet/dist/leaflet.css';
|
@@ -78,6 +78,8 @@ const Map = ( { onMapClick, searchQuery, contentType } ) => {
|
|
78 |
|
79 |
const [viewPanelOpen, setViewPanelOpen] = useState(true);
|
80 |
|
|
|
|
|
81 |
const handleMouseDown = (e) => {
|
82 |
isDragging.current = true;
|
83 |
startX.current = e.clientX;
|
@@ -294,6 +296,14 @@ const Map = ( { onMapClick, searchQuery, contentType } ) => {
|
|
294 |
}
|
295 |
}, [geoToolMode, areaPoints]);
|
296 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
297 |
|
298 |
const wrapCount = 3;
|
299 |
|
@@ -340,6 +350,7 @@ const Map = ( { onMapClick, searchQuery, contentType } ) => {
|
|
340 |
|
341 |
// const longitudeLines = generateLongitudeLines(30, 1);
|
342 |
|
|
|
343 |
return (
|
344 |
<div ref={containerRef} style={{ display: 'flex', height: '100vh', width: '100%', overflow: 'hidden' }}>
|
345 |
{panelSize !== 'closed' && (
|
@@ -496,13 +507,24 @@ const Map = ( { onMapClick, searchQuery, contentType } ) => {
|
|
496 |
{baseLayer === "satellite" && (
|
497 |
<>
|
498 |
<TileLayer
|
499 |
-
|
500 |
-
|
501 |
/>
|
502 |
<TileLayer
|
503 |
-
|
504 |
-
|
505 |
/>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
506 |
</>
|
507 |
)}
|
508 |
|
|
|
9 |
Polyline,
|
10 |
Tooltip,
|
11 |
Polygon,
|
12 |
+
GeoJSON
|
13 |
} from 'react-leaflet';
|
14 |
import L from 'leaflet';
|
15 |
import 'leaflet/dist/leaflet.css';
|
|
|
78 |
|
79 |
const [viewPanelOpen, setViewPanelOpen] = useState(true);
|
80 |
|
81 |
+
const [countryBorders, setCountryBorders] = useState(null);
|
82 |
+
|
83 |
const handleMouseDown = (e) => {
|
84 |
isDragging.current = true;
|
85 |
startX.current = e.clientX;
|
|
|
296 |
}
|
297 |
}, [geoToolMode, areaPoints]);
|
298 |
|
299 |
+
useEffect(() => {
|
300 |
+
if (!countryBorders) {
|
301 |
+
fetch('/data/countryBorders.json')
|
302 |
+
.then(res => res.json())
|
303 |
+
.then(data => setCountryBorders(data))
|
304 |
+
.catch(err => console.error("Failed to load country borders:", err));
|
305 |
+
}
|
306 |
+
}, [countryBorders]);
|
307 |
|
308 |
const wrapCount = 3;
|
309 |
|
|
|
350 |
|
351 |
// const longitudeLines = generateLongitudeLines(30, 1);
|
352 |
|
353 |
+
|
354 |
return (
|
355 |
<div ref={containerRef} style={{ display: 'flex', height: '100vh', width: '100%', overflow: 'hidden' }}>
|
356 |
{panelSize !== 'closed' && (
|
|
|
507 |
{baseLayer === "satellite" && (
|
508 |
<>
|
509 |
<TileLayer
|
510 |
+
url="https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}"
|
511 |
+
attribution='© <a href="https://www.esri.com/">Esri</a> & contributors'
|
512 |
/>
|
513 |
<TileLayer
|
514 |
+
url="https://{s}.basemaps.cartocdn.com/light_only_labels/{z}/{x}/{y}.png"
|
515 |
+
attribution='© CartoDB'
|
516 |
/>
|
517 |
+
{countryBorders && (
|
518 |
+
<GeoJSON
|
519 |
+
data={countryBorders}
|
520 |
+
style={{
|
521 |
+
color: '#ffff99',
|
522 |
+
weight: 1.5,
|
523 |
+
opacity: 0.8,
|
524 |
+
fillOpacity: 0.1,
|
525 |
+
}}
|
526 |
+
/>
|
527 |
+
)}
|
528 |
</>
|
529 |
)}
|
530 |
|