Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .lycheeignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
https://slack.com/shortcuts/Ft09CHNNHZNX/8d0d6f7d69a1350a91b2ef33fc6d5704
https://mapswipe.slack.com/archives/C0HCW2CJJ/p1774445684627589
https://mapswipe.slack.com/archives/C09L064N77G
Comment on lines +2 to +3

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any reason we need to add these slack links to ignore?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These links return 403 status. As these are from the mapswipe workspace..
Discussed this with thenav56.

https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword
https://www.mdpi.com/2072-4292/8/10/859

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 2 additions & 1 deletion docs/about_data/aggregated_results.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ One row per task, with the following columns:
| ------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| idx | integer | Sequential row index. |
| task_id | string | The ID of the task. For tile-based project types (e.g. Find Features) this is a composition of `TileZ-TileX-TileY`. |
| 0_count | integer | The number of users who marked this task as 0, e.g. "no building" for Find Features. |
| task_partition_index | integer | Index of the mini-tile partition within the task (Locate Objects only). Rows are aggregated per partition rather than per task for this project type; empty for other project types. |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we using the term "min-tile"

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, the term is referenced in the concept note shared by FAirswipe.

| 0_count | integer | The number of users who marked this task as 0, e.g. "no building" for Find Features. |
| 1_count | integer | The number of users who marked this task as 1, e.g. "building" for Find Features. |
| 2_count | integer | The number of users who marked this task as 2, e.g. "maybe" for Find Features. |
| 3_count | integer | The number of users who marked this task as 3, e.g. "bad imagery" for Find Features. |
Expand Down
1 change: 1 addition & 0 deletions docs/about_data/results.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ One row per submission, with the following columns:
| project_id | string | The project identifier. Usually a ULID for new projects; legacy Firebase-style for older migrated projects. |
| group_id | string | Public group identifier within the project (e.g. `g183`). |
| task_id | string | Public task identifier; for tile-based projects formatted as `TileZ-TileX-TileY`. |
| task_partition_index | integer | Index of the mini-tile partition within the task (Locate Objects only, since a task's result is a list of per-partition values). Empty for other project types. |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we using the term "min-tile"

| user_id | string | The Firebase user ID of the contributor. |
| timestamp | string | When the result was recorded (ISO 8601 with timezone). |
| start_time | string | When the user started the task (ISO 8601 with timezone). |
Expand Down
5 changes: 3 additions & 2 deletions docs/project_types.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,15 @@ The MapSwipe crowdsourcing workflow is designed following an approach already pr
3. **Distributing** *groups* and *tasks* to many users redundantly (e.g. every area gets mapped by at least three different users)
4. **Aggregating** all responses (*results*) per *task* from different users to reach a final solution (e.g. by choosing the majority vote)

The MapSwipe backend now supports 6 **project types**. Each project type formulates a specific kind of mapping challenge — follow the links for a description, screenshot, and data model details for each one.
The MapSwipe backend now supports 7 **project types**. Each project type formulates a specific kind of mapping challenge — follow the links for a description, screenshot, and data model details for each one.

- [Find Features](project_types/find_features.md)
- [Validate Footprints](project_types/validate_footprints.md)
- [Compare Dates](project_types/compare_dates.md)
- [Assess Images](project_types/assess_images.md)
- [Check Completeness](project_types/check_completeness.md)
- [View Streets](project_types/view_streets.md)
- [Locate Objects](project_types/locate_objects.md)


## Data Model
Expand All @@ -41,7 +42,7 @@ A project is divided into several **groups**, which are in turn divided into ind
| **projectId** | string | ID of the project. |
| **name** | string | The name of the project (25 chars max). |
| **lookFor** | string (optional) | What should the users look for (e.g. buildings, cars, trees)? (15 chars max). |
| **projectType** | enum (int) | Identifies the project type: `1` = Find Features, `2` = Validate Footprints, `3` = Compare Dates, `4` = Check Completeness, `7` = View Streets, `10` = Assess Images. See the page for each project type for the type-specific fields. |
| **projectType** | enum (int) | Identifies the project type: `1` = Find Features, `2` = Validate Footprints, `3` = Compare Dates, `4` = Check Completeness, `7` = View Streets, `9` = Locate Objects, `10` = Assess Images. See the page for each project type for the type-specific fields. |
| **image** | string (optional) | URL to a representative image for the project (formerly "Direct Image Link"). Make sure you have the rights to use this image; should end with `.jpg` or `.png`. |
| **projectDetails** | string | Description of the project (3-5 sentences). |
| **projectInstruction** | string (optional) | Instructions shown to the contributor during mapping. |
Expand Down
72 changes: 72 additions & 0 deletions docs/project_types/locate_objects.md

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"About the data" section should also change, because now the results have a different export format.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For the export files, I’ve added the new field we introduced for this project type. If that’s what you were referring to.

Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
---
title: Locate Objects
parent: Project Types
nav_order: 7
permalink: /project_types/locate_objects/
---

# Project Type - Locate Objects

Unlike Find Features, which asks whether an object is present anywhere in a full imagery tile, Locate Objects asks *where* within the tile it is. A single imagery tile is shown per screen, virtually subdivided into a grid of smaller mini tiles (2x2, 4x4, or 8x8, chosen by the project manager). Contributors tap the mini tile(s) that contain an object:

- One tap (highlighted green) — a single object is present in that mini tile.
- Two taps (highlighted yellow) — multiple objects are present in that mini tile.
- No tap — no object in that mini tile.

The mini-tile grid is a virtual subdivision of the same tile/zoom level (quad-tree style), not a request for higher-zoom imagery. The output is intended to produce AI-ready training datasets (e.g. for HOT's fAIr), so results capture per-mini-tile classification rather than a single yes/no per tile.

![](/assets/project_types/project_types/images/locate-objects.png)

Locate Objects projects have `projectType = 9`.

## Project
In addition to the common project fields documented in the [data model](../project_types.md), Locate Objects projects carry the following project-type-specific fields:

| Parameter | Type | Description |
|------------------------|-----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **zoomLevel** | int | Web Mercator zoom level at which tiles are served. |
| **tileServer** | object | Raster tile server configuration — includes a server `name`, `url`, `credits`, and an optional `apiKey`. |
| **subGridSize** | enum (string) | Size of the virtual mini-tile grid each screen's tile is subdivided into: `2x2` (4 partitions), `4x4` (16 partitions), or `8x8` (64 partitions). |
| **exportMetaKey** | string | Key of an additional metadata entry attached to exports (e.g. `"building"`). |
| **exportMetaValue** | string | Value of that additional metadata entry (e.g. `"roof_top"`). |
| **customOptions** | list (optional) | Custom answer options for classifying a mini tile (each with a value, title, description, icon, iconColor, and optional sub-options) — overrides the default No / Single Feature / Multiple Features choices. |

## Group
Locate Objects groups have no project-type-specific fields beyond the [common group fields](../project_types.md#groups), plus the tile-map-service bounding-box coordinates shared with Find Features:

| Parameter | Type | Description |
|-----------|------|--------------------------------------------------|
| **xMax** | int | Maximum tile-X coordinate covered by the group. |
| **xMin** | int | Minimum tile-X coordinate covered by the group. |
| **yMax** | int | Maximum tile-Y coordinate covered by the group. |
| **yMin** | int | Minimum tile-Y coordinate covered by the group. |

## Task
Each task is a single imagery tile, identical in shape to a Find Features task; the mini-tile grid shown to the contributor is derived client-side from `subGridSize` rather than stored per-task.

| Parameter | Type | Description |
|--------------|--------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **taskId** | string | ID of the task, formatted as `{zoomLevel}-{tileX}-{tileY}`. |
| **tileX** | int | Tile-X coordinate of the task at `zoomLevel`. |
| **tileY** | int | Tile-Y coordinate of the task at `zoomLevel`. |
| **geometry** | string | Polygon geometry of the tile, generated from `tileX`, `tileY` and `zoomLevel`. |
| **url** | string | Tile URL for the imagery at `tileX`, `tileY`, `zoomLevel`. |

## Result
Locate Objects deviates from the [common result shape](../project_types.md#results): instead of a single int per task, each entry in `results` (keyed by `taskId`) is a **list of ints** — one value per mini-tile partition, ordered by partition index. A `subGridSize` of `2x2` yields a 4-value list, `4x4` a 16-value list, `8x8` a 64-value list.

```
results: {
"9-267-352": [1, 0, 0, 2, ...]
}
```

Each value uses the same integer encoding as `customOptions` (or the fallback below when none are supplied). When exported, the backend explodes each list into one row per partition, adding a `task_partition_index` column set to the value's position in the list.

When the project creator does not supply `customOptions`, the backend falls back to the following defaults:

| Value | Title | Description |
|-------|-------------------|-----------------------------------------------------------|
| `0` | No | The mini tile does not contain a feature. |
| `1` | Single Feature | The mini tile contains a single feature. |
| `2` | Multiple Features | The mini tile contains multiple features. |
Loading