-
Notifications
You must be signed in to change notification settings - Fork 1
hotfix: Add polygon map layers for 7 campaigns (Issue #207) #10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,37 @@ | ||
| { | ||
| "type": "FeatureCollection", | ||
| "name": "Campaign: Anavilhanas Archipelago Monitoring", | ||
| "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, | ||
| "features": [ | ||
| { | ||
| "type": "Feature", | ||
| "id": "anavilhanas-1", | ||
| "properties": { | ||
| "id": "anavilhanas-1", | ||
| "identifier": "Anavilhanas Archipelago Monitoring", | ||
| "campaign": "Anavilhanas Archipelago Monitoring", | ||
| "status": "active", | ||
| "partners": ["ICMBio Brazil"], | ||
| "measurement": 42000, | ||
| "unitOfMeasure": "acre", | ||
| "watershedRegion": "Rio Negro Archipelago", | ||
| "projectType": "Environmental Monitoring", | ||
| "restorationServices": [] | ||
| }, | ||
| "geometry": { | ||
| "type": "Polygon", | ||
| "coordinates": [ | ||
| [ | ||
| [-60.1800, -2.9600], | ||
| [-60.1200, -2.9400], | ||
| [-60.0800, -2.9700], | ||
| [-60.0900, -3.0000], | ||
| [-60.1400, -3.0100], | ||
| [-60.1800, -2.9900], | ||
| [-60.1800, -2.9600] | ||
| ] | ||
| ] | ||
| } | ||
| } | ||
| ] | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| { | ||
| "type": "FeatureCollection", | ||
| "name": "Campaign: Ducke Forest Research", | ||
| "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, | ||
| "features": [ | ||
| { | ||
| "type": "Feature", | ||
| "id": "ducke-1", | ||
| "properties": { | ||
| "id": "ducke-1", | ||
| "identifier": "Ducke Forest Research", | ||
| "campaign": "Ducke Forest Research", | ||
| "status": "active", | ||
| "partners": ["INPA Research Institute"], | ||
| "measurement": 10000, | ||
| "unitOfMeasure": "acre", | ||
| "watershedRegion": "Upper Taruma Basin", | ||
| "projectType": "Research Station", | ||
| "restorationServices": [] | ||
| }, | ||
| "geometry": { | ||
| "type": "Polygon", | ||
| "coordinates": [ | ||
| [ | ||
| [-59.9700, -2.9500], | ||
| [-59.9200, -2.9500], | ||
| [-59.9200, -2.9900], | ||
| [-59.9400, -3.0100], | ||
| [-59.9700, -3.0000], | ||
| [-59.9700, -2.9500] | ||
| ] | ||
| ] | ||
| } | ||
| } | ||
| ] | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,37 @@ | ||
| { | ||
| "type": "FeatureCollection", | ||
| "name": "Campaign: Encontro das Aguas Reserve", | ||
| "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, | ||
| "features": [ | ||
| { | ||
| "type": "Feature", | ||
| "id": "encontro-1", | ||
| "properties": { | ||
| "id": "encontro-1", | ||
| "identifier": "Encontro das Aguas Reserve", | ||
| "campaign": "Encontro das Aguas Reserve", | ||
| "status": "active", | ||
| "partners": ["Meeting of the Waters Foundation"], | ||
| "measurement": 31000, | ||
| "unitOfMeasure": "acre", | ||
| "watershedRegion": "Negro-Solimoes Confluence", | ||
| "projectType": "Ecological Reserve", | ||
| "restorationServices": [] | ||
| }, | ||
| "geometry": { | ||
| "type": "Polygon", | ||
| "coordinates": [ | ||
| [ | ||
| [-59.9800, -3.0800], | ||
| [-59.9200, -3.0800], | ||
| [-59.9000, -3.1100], | ||
| [-59.9200, -3.1400], | ||
| [-59.9600, -3.1400], | ||
| [-59.9800, -3.1200], | ||
| [-59.9800, -3.0800] | ||
| ] | ||
| ] | ||
| } | ||
| } | ||
| ] | ||
| } | ||
|
Comment on lines
+1
to
+37
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
# Search for the FeatureProperties type/interface to confirm schema alignment
rg -n --type ts -A 20 "FeatureProperties"Repository: OpenSourceFellows/map_dashboard_hackathon Length of output: 2071 🏁 Script executed: #!/bin/bash
# Search for imports of the campaign fixture file
rg -n "campaign_encontro_das_aguas" --type tsRepository: OpenSourceFellows/map_dashboard_hackathon Length of output: 67 🏁 Script executed: #!/bin/bash
# Search for FeatureProperties interface (excluding QGIS)
rg -n "interface FeatureProperties|type FeatureProperties" --type ts -A 15Repository: OpenSourceFellows/map_dashboard_hackathon Length of output: 67 🏁 Script executed: #!/bin/bash
# Search for ProjectDetailView since it was mentioned as a consumer
rg -n "ProjectDetailView" --type ts -A 10 -B 5Repository: OpenSourceFellows/map_dashboard_hackathon Length of output: 67 🏁 Script executed: #!/bin/bash
# List the overall structure
ls -la src/Repository: OpenSourceFellows/map_dashboard_hackathon Length of output: 721 🏁 Script executed: #!/bin/bash
# Find all TypeScript files to understand project structure
fd -e ts -e tsx src/Repository: OpenSourceFellows/map_dashboard_hackathon Length of output: 407 🏁 Script executed: #!/bin/bash
# Search for "Feature" related type definitions
rg -n "interface.*Feature|type.*Feature" --type tsRepository: OpenSourceFellows/map_dashboard_hackathon Length of output: 1051 🏁 Script executed: #!/bin/bash
# Look for import.meta.glob patterns that might load fixtures
rg -n "import.meta.glob" --type tsRepository: OpenSourceFellows/map_dashboard_hackathon Length of output: 181 🏁 Script executed: #!/bin/bash
# Read the geometry types file
cat -n src/types/geometry.tsRepository: OpenSourceFellows/map_dashboard_hackathon Length of output: 432 🏁 Script executed: #!/bin/bash
# Read the fixture-reader.ts file
cat -n src/data/fixture-reader.tsRepository: OpenSourceFellows/map_dashboard_hackathon Length of output: 909 🏁 Script executed: #!/bin/bash
# Search for Feature type with properties in TypeScript files
rg -n "properties:" --type ts -B 3 -A 3 | head -60Repository: OpenSourceFellows/map_dashboard_hackathon Length of output: 700 🏁 Script executed: #!/bin/bash
# Search for components that use FixtureReader or access fixture data
rg -n "FixtureReader|fixture" --type ts -B 3 -A 3Repository: OpenSourceFellows/map_dashboard_hackathon Length of output: 2462 🏁 Script executed: #!/bin/bash
# Search for components that might access feature properties like "identifier" or "partners"
rg -n "\.properties\.|identifier|partners" --type tsx -B 2 -A 2Repository: OpenSourceFellows/map_dashboard_hackathon Length of output: 113 🏁 Script executed: #!/bin/bash
# Look at the components directory structure
find src/components -type f -name "*.tsx" -o -name "*.ts"Repository: OpenSourceFellows/map_dashboard_hackathon Length of output: 284 🏁 Script executed: #!/bin/bash
# Check Layer.tsx which likely iterates over features
cat -n src/components/Map/Layer.tsxRepository: OpenSourceFellows/map_dashboard_hackathon Length of output: 793 🏁 Script executed: #!/bin/bash
# Check MapContainer.tsx
cat -n src/components/Map/MapContainer.tsxRepository: OpenSourceFellows/map_dashboard_hackathon Length of output: 3684 🏁 Script executed: #!/bin/bash
# Search for any property access on feature objects
rg -n "feature\.properties|\.properties\[" --type tsRepository: OpenSourceFellows/map_dashboard_hackathon Length of output: 228 🏁 Script executed: #!/bin/bash
# Search for detail views or components that might show campaign info
rg -n "Detail|Campaign|campaign" --type ts --type tsx -iRepository: OpenSourceFellows/map_dashboard_hackathon Length of output: 113 🏁 Script executed: #!/bin/bash
# Check what the geojson types define for properties
rg -n "properties" --type ts src/hooks src/componentsRepository: OpenSourceFellows/map_dashboard_hackathon Length of output: 204 🏁 Script executed: #!/bin/bash
# Search for campaign or detail related files without tsx flag
find src -type f \( -name "*.ts" -o -name "*.tsx" \) | xargs grep -l "campaign\|Detail\|properties" -iRepository: OpenSourceFellows/map_dashboard_hackathon Length of output: 188 🏁 Script executed: #!/bin/bash
# Check if there's a types file for campaign or feature-specific properties
ls -la src/types/Repository: OpenSourceFellows/map_dashboard_hackathon Length of output: 313 🏁 Script executed: #!/bin/bash
# Search for all files that might define property-related interfaces
rg -n "interface.*Properties|type.*Properties" -uRepository: OpenSourceFellows/map_dashboard_hackathon Length of output: 150 🏁 Script executed: #!/bin/bash
# Check the map.ts file for property-related types
cat -n src/types/map.tsRepository: OpenSourceFellows/map_dashboard_hackathon Length of output: 3475 🏁 Script executed: #!/bin/bash
# Check if there are any recent commits that might show schema changes
git log --oneline -20 2>/dev/null | head -20Repository: OpenSourceFellows/map_dashboard_hackathon Length of output: 156 🏁 Script executed: #!/bin/bash
# Show the refactoring commit details
git show 56f21e4 --stat 2>/dev/nullRepository: OpenSourceFellows/map_dashboard_hackathon Length of output: 7156 🏁 Script executed: #!/bin/bash
# Show actual changes in that commit
git show 56f21e4 2>/dev/null | head -100Repository: OpenSourceFellows/map_dashboard_hackathon Length of output: 3115 Create The refactoring commit standardized campaign fixture properties ( 🤖 Prompt for AI Agents |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| { | ||
| "type": "FeatureCollection", | ||
| "name": "Campaign: Puraquequara Lake Protection", | ||
| "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, | ||
| "features": [ | ||
| { | ||
| "type": "Feature", | ||
| "id": "puraquequara-1", | ||
| "properties": { | ||
| "id": "puraquequara-1", | ||
| "identifier": "Puraquequara Lake Protection", | ||
| "campaign": "Puraquequara Lake Protection", | ||
| "status": "planning", | ||
| "partners": ["Manaus Environmental Agency"], | ||
| "measurement": 7500, | ||
| "unitOfMeasure": "acre", | ||
| "watershedRegion": "Puraquequara Lake System", | ||
| "projectType": "Lake Protection", | ||
| "restorationServices": [] | ||
| }, | ||
| "geometry": { | ||
| "type": "Polygon", | ||
| "coordinates": [ | ||
| [ | ||
| [-59.9200, -3.0200], | ||
| [-59.8800, -3.0200], | ||
| [-59.8700, -3.0500], | ||
| [-59.8900, -3.0700], | ||
| [-59.9200, -3.0600], | ||
| [-59.9200, -3.0200] | ||
| ] | ||
| ] | ||
| } | ||
| } | ||
| ] | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| { | ||
| "type": "FeatureCollection", | ||
| "name": "Campaign: Rio Negro Conservation", | ||
| "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, | ||
| "features": [ | ||
| { | ||
| "type": "Feature", | ||
| "id": "rio-negro-1", | ||
| "properties": { | ||
| "id": "rio-negro-1", | ||
| "identifier": "Rio Negro Conservation", | ||
| "campaign": "Rio Negro Conservation", | ||
| "status": "active", | ||
| "partners": ["Amazon River Foundation"], | ||
| "measurement": 18500, | ||
| "unitOfMeasure": "acre", | ||
| "watershedRegion": "Rio Negro Basin", | ||
| "projectType": "River Conservation", | ||
| "restorationServices": [] | ||
| }, | ||
| "geometry": { | ||
| "type": "Polygon", | ||
| "coordinates": [ | ||
| [ | ||
| [-60.1200, -3.0500], | ||
| [-60.0600, -3.0500], | ||
| [-60.0600, -3.0900], | ||
| [-60.0800, -3.1100], | ||
| [-60.1200, -3.1100], | ||
| [-60.1200, -3.0500] | ||
| ] | ||
| ] | ||
| } | ||
| } | ||
| ] | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| { | ||
| "type": "FeatureCollection", | ||
| "name": "Campaign: Solimoes Wetland Restoration", | ||
| "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, | ||
| "features": [ | ||
| { | ||
| "type": "Feature", | ||
| "id": "solimoes-1", | ||
| "properties": { | ||
| "id": "solimoes-1", | ||
| "identifier": "Solimoes Wetland Restoration", | ||
| "campaign": "Solimoes Wetland Restoration", | ||
| "status": "active", | ||
| "partners": ["Wetlands International"], | ||
| "measurement": 22000, | ||
| "unitOfMeasure": "acre", | ||
| "watershedRegion": "Solimoes Watershed", | ||
| "projectType": "Wetland Restoration", | ||
| "restorationServices": [] | ||
| }, | ||
| "geometry": { | ||
| "type": "Polygon", | ||
| "coordinates": [ | ||
| [ | ||
| [-60.0800, -3.1400], | ||
| [-60.0200, -3.1400], | ||
| [-60.0200, -3.1800], | ||
| [-60.0500, -3.2000], | ||
| [-60.0800, -3.1900], | ||
| [-60.0800, -3.1400] | ||
| ] | ||
| ] | ||
| } | ||
| } | ||
| ] | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| { | ||
| "type": "FeatureCollection", | ||
| "name": "Campaign: Taruma Biodiversity Corridor", | ||
| "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, | ||
| "features": [ | ||
| { | ||
| "type": "Feature", | ||
| "id": "taruma-1", | ||
| "properties": { | ||
| "id": "taruma-1", | ||
| "identifier": "Taruma Biodiversity Corridor", | ||
| "campaign": "Taruma Biodiversity Corridor", | ||
| "status": "planning", | ||
| "partners": ["Biodiversity Alliance Brazil"], | ||
| "measurement": 9800, | ||
| "unitOfMeasure": "acre", | ||
| "watershedRegion": "Taruma-Acu Basin", | ||
| "projectType": "Wildlife Corridor", | ||
| "restorationServices": [] | ||
| }, | ||
| "geometry": { | ||
| "type": "Polygon", | ||
| "coordinates": [ | ||
| [ | ||
| [-60.1000, -3.0100], | ||
| [-60.0500, -3.0100], | ||
| [-60.0500, -3.0500], | ||
| [-60.0700, -3.0600], | ||
| [-60.1000, -3.0500], | ||
| [-60.1000, -3.0100] | ||
| ] | ||
| ] | ||
| } | ||
| } | ||
| ] | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All 7 exterior polygon rings are wound clockwise — violates RFC 7946 §3.1.6
RFC 7946 §3.1.6 mandates that "a linear ring MUST follow the right-hand rule with respect to the area it bounds, i.e., exterior rings are counterclockwise, and holes are clockwise." Applying the shoelace signed-area formula to each fixture confirms every exterior ring has a negative signed area (clockwise). The violation is consistent across all seven files.
For backwards compatibility, parsers SHOULD NOT reject polygons that do not follow the right-hand rule, so current Leaflet/Mapbox rendering will be unaffected. However, strict geospatial backends (PostGIS with
ST_IsValid, certain spatial databases, and validation pipelines) do enforce winding order, which matters once the backend endpoints from Issue#206land and these fixtures are used as reference shapes.The fix is simply to reverse the interior points of each ring while keeping the closing coordinate:
🔧 Proposed fix for `campaign_encontro_das_aguas.geojson` (apply same reversal pattern to all 7 files)
"coordinates": [ [ - [-59.9800, -3.0800], - [-59.9200, -3.0800], - [-59.9000, -3.1100], - [-59.9200, -3.1400], - [-59.9600, -3.1400], - [-59.9800, -3.1200], - [-59.9800, -3.0800] + [-59.9800, -3.0800], + [-59.9800, -3.1200], + [-59.9600, -3.1400], + [-59.9200, -3.1400], + [-59.9000, -3.1100], + [-59.9200, -3.0800], + [-59.9800, -3.0800] ] ]You can automate rewinding all seven files at once using the
geojson-rewindCLI or the equivalent npm package before this branch is merged.📝 Committable suggestion
🤖 Prompt for AI Agents