Skip to content
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

Creating Curb Objects #126

Draft
wants to merge 22 commits into
base: dev
Choose a base branch
from
Draft

Conversation

jacobmalleau
Copy link
Collaborator

@jacobmalleau jacobmalleau commented Nov 20, 2023

Explain pull request

First commit / defining Curb Object

Is this a breaking change

  • No, not breaking

Impacted Spec

Which API(s) will this pull request impact?

  • Curbs
  • Events
  • Metrics

Additional context

Add any other context or screenshots about the feature request here.

First commit / defining Curb Object
@jacobmalleau jacobmalleau requested a review from a team as a code owner November 20, 2023 01:20
@CLAassistant
Copy link

CLAassistant commented Nov 20, 2023

CLA assistant check
All committers have signed the CLA.

@schnuerle schnuerle added enhancement New feature or request Curbs API Events API Metrics API schema Implications for the OpenAPI Schema labels Nov 20, 2023
@schnuerle schnuerle changed the base branch from feature-curb-objects to dev November 20, 2023 15:56
@schnuerle schnuerle marked this pull request as draft November 20, 2023 15:59
@schnuerle schnuerle linked an issue Nov 20, 2023 that may be closed by this pull request
@schnuerle schnuerle mentioned this pull request Nov 20, 2023
@schnuerle schnuerle added this to the 1.1 milestone May 17, 2024
@jamesian-barr
Copy link
Collaborator

@jacobmalleau this PR appears to be in decent shape. What do we need to do to take this to review?

@schnuerle
Copy link
Member

schnuerle commented Oct 16, 2024

@jamesian-barr there's probably a few more things to finish and revise on here. I'll make some targeted comments.

Then the steering committee (SC) can bring it before the working group for review. There is a SC meeting next week so we can see if this is ready to present.

And I think we need to finalize all the 1.0.1 issues and PRs (7 open, 10 done) and merge to 'dev' first so we don't run into any conflicts. So feel free to review and comment on those.

curbs/README.md Outdated

Some object types will have unique, custom attributes that can be optionally included with the given object type. These are given as unordered key-value pairs, e.g. `kilowatts` : `1.21`. For this current version of Curb Objects, specific object type attributes will not be included in the specification. As use of Curb Objects grows or specific use cases become more involved, common object type attributes can be added on an as needed basis.

##### Sample Object Type Attributes (for Future)
Copy link
Member

@schnuerle schnuerle Oct 16, 2024

Choose a reason for hiding this comment

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

This area needs to be fleshed out, and could get complicated fast. It's for custom object fields, so some subset of object types above would need to have their custom fields defined.

Could be defined by cities. Can provide examples here.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

I think we would be fine to leave this as a list of examples.
Do we have to tie these attributes to specific object types? Or just leave it open for cities as they see fit.

Copy link
Member

Choose a reason for hiding this comment

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

We agreed to remove this entire custom object type attributes section. Make sure references to it are removed from other parts of Objects.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Added in latest commit. I also added this for reference

Unique object type attributes for each object type are not included in this version of the specification. As use of Curb Objects grows or specific use cases become more involved, common object type attributes can be added.

@@ -106,6 +108,7 @@ A Curb Event is represented as a JSON object, whose fields are as follows:
| `curb_zone_id` | [UUID][uuid] | Conditionally Required | Unique ID of the Curb Zone where the event occurred. Required for events that occurred at a known Curb Zone for ALL _event_types_. |
| `curb_area_ids` | Array of [UUID][uuid] | Conditionally Required | Unique IDs of the Curb Area where the event occurred. Since Curb Areas can overlap, an event may happen in more than one. Required for events that occurred in a known Curb Area, if known and used, for these event_types: _enter_area, exit_area, park_start, park_end_ |
| `curb_space_id` | [UUID][uuid] | Conditionally Required | Unique ID of the Curb Space where the event occurred. Required for events that occurred at a known Curb Space, if known and used, for these event_types: _park_start, park_end, enter_area, exit_area_ |
| `curb_object_id` | [UUID][uuid] | Conditionally Required | Unique ID of the Curb Object where the event occurred. Required for events that occurred at a known Curb Object, if known and used, for these event_types: _park_start, park_end, enter_area, exit_area_ |
Copy link
Member

Choose a reason for hiding this comment

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

Should this be for multiple IDs, so curb_object_id? One event could use a meter and an EV charger and a locker, for example.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

We could list multiple IDs here, although maybe it should only be what the true source of the event is (if you plug into the charger, book the locker, or pay at the meter)? I think leaving it as one option could be cleaner.

Copy link
Member

Choose a reason for hiding this comment

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

Agreed that this can stay as one single ID per event. If multiple objects need to record simultaneous events at a zone, then they each get their own event. So this is fine as is.

@schnuerle
Copy link
Member

schnuerle commented Nov 5, 2024

We had a great public working group meeting on this topic. Here are the action items, notes, and recording.

Here were the main consensus items from the 49 attendees, including direct feedback from representatives from CurbIQ, Umojo, Turnstone, INRIX, SFTMA, SDOT, and others.

  1. Remove custom Object Type Attributes from Curb Objects (could come later in 1.2 if it's needed)
  2. Update curb object ids description in Zones to specify it is about the object's area of influence
  3. Update curb zone id description in Objects to specify it is closest location of the object at the zone
  4. Keep curb events object id in Events as is so each object get its own event and details when needed

I'll be flagging the specific PR lines with each of these for @jacobmalleau to edit. If you agree with these, let us know here. If don't agree, let us know too.

curbs/README.md Outdated
@@ -263,6 +308,7 @@ A Curb Zone is represented as a JSON object, whose fields are as follows:
| `entire_roadway`| Boolean | Optional | If "true", this curb location takes up the entire width of the roadway (which may be impassible for through traffic when the Curb Zone is being used for parking or loading). This is a common condition for alleyways. If `entire_roadway` is `true`, `street_side` MUST NOT be present. |
| `curb_area_ids`| Array of [UUID][uuid] | Optional | The ID(s) of the [Curb Areas](#curb-area) that this Curb Zone is a part of. If specified, the areas identified MUST be retrievable through the Curb API and its geographical area MUST contain that of the Curb Zone. |
| `curb_space_ids`| Array of [UUID][uuid] | Optional | The ID(s) of the [Curb Spaces](#curb-space) that this Curb Zone contains. If specified, the spaces identified MUST be retrievable through the Curb API and its geographical area MUST be contained in this Curb Zone. |
| `curb_object_ids` | Array of [UUID][uuid] | Optional | The ID(s) of the [Curb Objects](#curb-object) that this Curb Zone is related to. If specified, the objects identified MUST be retrievable through the Curb API. Curb Objects can be related to a Curb Space or a Curb Zone. |
Copy link
Member

@schnuerle schnuerle Nov 5, 2024

Choose a reason for hiding this comment

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

This description should specify that the curb objects listed are the objects that are in the zone's 'area of influence'. The Objects that relate to this curb zone. So a locker's ID might be listed in 4 curb zones along a block face. Or a camera's ID might be listed in 3 curb zones that the camera has visibility into. Or the parking meter might be useable by 5 zones on a block.

Copy link
Collaborator Author

@jacobmalleau jacobmalleau Nov 7, 2024

Choose a reason for hiding this comment

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

Added text for this in the latest commit. I am still a little weary of how this can be interpreted (e.g. a camera is located in one curb zone, but monitors several curb zones, how will a user know which is which). But I think with the inverse ID linkage this for an object this should be covered (e.g. you use the Curb Zone ID attribute for Curb Object to specify where the curb object is, then associate it with any zones it covers). Another example: a pay station's Curb Zone ID attribute shows where it is physically, and this field lets you indicate all the curb zones it covers.

curbs/README.md Outdated
@@ -317,6 +363,7 @@ A Curb Space is represented as a JSON object whose fields are as follows:
| `published_date` | [Timestamp][ts] | Required | The date/time that this curb area was first published in this data feed. |
| `last_updated_date` | [Timestamp][ts] | Required | The date/time that the properties of ths curb area were last updated. This helps consumers know that some fields may have changed. |
| `curb_zone_id` | [UUID][uuid] | Required | The ID of the Curb Zone this space is within. The geometry of the specified Curb Zone MUST contain the geometry of this space. |
| `curb_object_ids` | Array of [UUID][uuid] | Conditionally Required | The ID(s) of the [Curb Objects](#curb-object) that this Curb Space is related to. If specified, the objects identified MUST be retrievable through the Curb API. Curb Objects can be related to a Curb Space or a Curb Zone.|
Copy link
Member

Choose a reason for hiding this comment

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

Similar to the object IDs in a zone, for spaces, this description should specify that the curb objects listed are the objects that are in the space's 'area of influence'. So a meter might be for 2 curb spaces.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Addressed in latest commit

curbs/README.md Outdated
| ------ | ------ | ------------------- | ------------- |
| `curb_object_id` | [UUID][uuid] | Required | The ID of the curb object. |
| `geometry` | [Point][point] | Required |The spatial location of this curb object location. This can represent the approximate center of the object, or the centroid location of the object, depending on its size and shape. |
| `curb_zone_id` | [UUID][uuid] | Conditionally Required | The ID of the Curb Zone this object is related to. The geometry of the specified Curb Zone does not need to directly relate to the geometry of this object. Either a Zone or Space ID is required for an Object. |
Copy link
Member

Choose a reason for hiding this comment

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

The curb_zone_id description should reflect the idea that the object's physical location is nearest to this zone. Similarly with curb_space_id below.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Added in latest commit

See meeting notes for additional context.
Copy link
Collaborator Author

@jacobmalleau jacobmalleau left a comment

Choose a reason for hiding this comment

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

Left comments throughout with items addressed in my latest commit

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Curbs API enhancement New feature or request Events API Metrics API schema Implications for the OpenAPI Schema
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add Curb Objects
4 participants