a-b-street / abstreet

Transportation planning and traffic simulation software for creating cities friendlier to walking, biking, and public transit
https://a-b-street.github.io/docs/
Apache License 2.0
7.75k stars 345 forks source link

LTN expanding boundary #857

Open XaranDeBruregor opened 2 years ago

XaranDeBruregor commented 2 years ago

Hi,

I'm trying to draw rather large LTN (compared to the one initially calculated on a map).

So I use a lot of "adjust boundary" function. For regular and simple geometry blocks, it works very well. When used on more complex geometry, I'm stuck and can't expand more a LTN. I get the message preventing me to splitting the neighborhood in 2 (or 3). From my understanding, it's to prevent a LTN to be surrounded entirely by a bigger LTN. Here is an example:

image

Q : Is there a way to find / display which blocks I'm trying to split ? Q : I thought that when this warning message is displayed, it might be giver the possibilty to "swallow" the other LTN entirely. Like a merge of two neighbor.

Complex geometry that I have trouble with:

dabreegster commented 2 years ago

Thanks for writing up these issues! As you can tell, the adjust boundary tool needs lots of work. Your understanding about preventing one neighborhood from being swallowed by another is correct; the red boundary marking the perimeter roads has to be one nice contiguous loop for the rest of the tool to work correctly.

Q : Is there a way to find / display which blocks I'm trying to split ? Q : I thought that when this warning message is displayed, it might be giver the possibilty to "swallow" the other LTN entirely. Like a merge of two neighbor.

I'm trying to get something like this working, but it doesn't yet: https://github.com/a-b-street/abstreet/tree/ltn_intermediates Will resume work on it soon

Very small triangle. [I had to zoom and "paint" the whole area with the mouse to find a tiny triangle]

Yep, this is a super annoying problem. :( I think if there was a nice way to automatically add "intermediate" blocks preventing a larger block from being added, this wouldn't be as painful, because the tiny blocks would get added without extra work.

Tunnels <- I have no idea how to deal with them because they might pass under other LTN area and the boundary are very hard to see.

In #849 I made many tunnels not factor in when tracing the individual blocks, so things work more intuitively. But it's not working here: Screenshot from 2022-02-08 14-27-41 I think in this case, it's kind of clear what should happen: Screenshot from 2022-02-08 14-28-45 but in general, bridges/tunnels are confusing to deal with.

In short: I'm still working on solving these problems, but the remaining ones are proving to be very hard. I don't want the LTN tool to be broken if this boundary selection is broken. Originally, I was considering other ways to let people mark the boundary they wanted, like drawing a freehand polygon shape, or tracing along perimeter roads. But it's really unclear to me how to make that kind of UI modifiable -- if you have a shape already, how do you "stretch" or "shrink" it? Painting block-by-block felt the most intuitive to me. And also, the result has to be a full partitioning -- every block needs to belong to exactly one neighborhood grouping. If the UI worked by roads or freeform polygons, I don't know how to achieve that.

Any ideas for alternate ways to divide a city into contiguous boundaries like this?

XaranDeBruregor commented 2 years ago

Thanks for your fantastic job here !

I'm just starting to bump into bridges and tunnel issues. That's seems to be a difficult issue.
I checked this tunnel (1,7 km long) and can see better the issue. image

Other ideas coming into my mind :

dabreegster commented 2 years ago

An example of the current bridge/tunnel rule breaking in Bristol: Screenshot from 2022-02-10 11-15-46 Resulting in: Screenshot from 2022-02-10 11-16-12

Need to both generalize the bridge/tunnel rules to work in Lyon and fix cases like this

dabreegster commented 2 years ago

An idea: ignore z-order entirely? Since the ultimate result has to partition 2D space, maybe we need to insert fake intersections into the process where one road crosses another, and trace that corner. This gets back to the tension between this "trace a block" concept being used both for rendering / selection, and semantics of "a perimeter road surrounding a neighborhood"

XaranDeBruregor commented 2 years ago

I think ignoring z-order entirely is a good idea.

I was thinking about tunnels and bridges. When they don't cross others road (under or above), they are just normal roads. That's mainly the case when crossing water ( water is not counted as a road). But the problem is when they cross others road and blocks.

Now my opinion about what I want to achieve with such infrastructure: 1/ Keep the tunnel/bridge as a transit road that will be used for cars. (that's mostly the case) 2/ Close the tunnel/bridge to transit trafic. (like converting it to a pure pedestrian way, or cycle way, or public transport only)

Ideas to deal with crossing road : 1/ most simple: Delete the road or exclude it from the block calculation. We know the road is there but is not treated in LTN. 2/ "black holes road segment": Do not include road segment (or the series of road segment) in the LTN boundary calculation process. The road segment extremity is seen as an entrance to a "black hole tunnel" and the other extremity is seen as a exit of the "black hole tunnel", the middle isn't included for LTN boundary calculation process. 3/ If idea "2" is not possible, maybe something can be changed at the intersection level (at the entrance and exit of tunnel/bridge segment) ?

I'm still brainstorming !

dabreegster commented 2 years ago

Another example where a bridge breaks things, near https://www.openstreetmap.org/node/53048825 Screenshot from 2022-02-26 17-57-26 Sometimes, sticking to one layer for the block would be best, ignoring the road that goes over or under. That might break in some cases working well today... try it out and see if we can distinguish the two

XaranDeBruregor commented 2 years ago

Hi ! Using latest abstreet_windows_v0_3_13. The software crashes when I load Lyon map into LTN.

I saw a large number of error in the console.

Also tried to do it with the web version. But the loading froze for 10 min.

(Let me know how I can send logs if you need further investigation)

dabreegster commented 2 years ago

Thanks for letting me know! I can reproduce the problem. 23cf7c8d0c15d9c503d7fa57261c85ecbbe5622c caused it -- this check is apparently not paranoid enough. I'll look into the problem when I can (swamped with conference presentations...) and also add Lyon to the blockfinding test to prevent this regression in the future.

dabreegster commented 2 years ago

Root cause is one of the blocks stretching too far near another bridge/tunnel situation. https://www.openstreetmap.org/node/254580779 For the next release, I can re-enable the slower checks so Lyon at least doesn't crash. But still need to solve more of these situations properly

dabreegster commented 2 years ago

I applied a very blunt hammer for the Lyon map -- don't trace blocks near bridges/tunnels at all. So, there shouldn't be crashes or strange overlapping shapes. But there are lots of gaps that'll prevent you from drawing the neighborhood boundary you want.

It's a small step forward, but obviously not the real solution

XaranDeBruregor commented 2 years ago

I will obviously test that with a lot a excitement.

To go further on this topic : Is it possible to get a custom Map into LTN ? I'm still new with this sort of things. My idea : Load and modify a existing map (ie. Deleting bridges and tunnels), then import into LTN to draw blocks. Maybe the workload would be more on the user side than on the developer side.

dabreegster commented 2 years ago

Is it possible to get a custom Map into LTN ? I'm still new with this sort of things.

https://a-b-street.github.io/docs/user/new_city.html

modify a existing map (ie. Deleting bridges and tunnels), then import into LTN to draw blocks.

I think you're right -- it's feeling like a lost cause for the software to automatically do the right thing in all cases. A human could probably fix up errors quickly if the process of deleting roads is easy enough. It'll take me some effort to put together that mode for skipping bridges/tunnels manually, so... don't expect it anytime soon, unfortunately. :\

XaranDeBruregor commented 2 years ago

I tested the function to import a city already. It works very well. Great job ! Although it doesn't solve the bridge / tunnel / blocks issues.

I thought the process of deleting roads was already possible. To test that I used "Traffic Simulation Sandbox" on the default map "Montlake and Eastlake"

image

I tried to delete the road segment (montlake boulevard est). Apparently it's possible to shrink it down to a sidewalk lane but not entirely delete it.

So I'm still brainstorming ideas : Is it possible to edit a map in the Sandbox mode, save it, and use it in LTN ?

By extension : Is it possible to delete a road in sandbox mode ? If not, is it possible to shrink a lane to sidewalk and then exclude it from block processing in LTN ?

By the way : I tested the new "lasso" function - It's wonderful ! Great idea !

XaranDeBruregor commented 2 years ago

Quick message to give news : Testing version v0_3_14 Lyon maps is back in LTN (thank you for the changes). Tested the lasso function. Sometimes it helps to expand LTN Boundary

I still bump to a lot of messages : "You must first add intermediate blocks to avoid splitting this neighborhood in 2 pieces" Let's take : Lyon Basic map + Street "Rue Dusquene"; If I try to expand the block, I'm stuck. I I follow blue arrows, then I can't expand boundary. From what I see, I don't have the feeling that i'm trying to split the neighborhood in 2 pièces. (The other neighborhood is on the left image, that's a rather large area that can't be split in two just by removing a block) image

I'll keep trying to test others features ( the changes are great)

dabreegster commented 2 years ago

You're right about problems expanding the boundary. For a while, I was attributing most of the problems to missing some of the smaller blocks entirely, but there are plenty of cases now when the blocks are all there, but trying to add one block doesn't work. I'll try and figure out why...

dabreegster commented 2 years ago

Just recording a situation where it's impossible to expand the boundary. There's a hole, but you can't add the hole without the area around it. What should we do here? Screenshot from 2022-03-18 15-56-46

XaranDeBruregor commented 2 years ago

Add the hole AND the area around ?

Turn all the light blue block to purple. (I have the feeling, it won't be this simple...)

dabreegster commented 2 years ago

I think you're right. It doesn't make sense to treat the cyan area or the holes as separate for the purposes of defining the boundary. The question becomes how to merge the holes with the larger shape. It's almost like the dead-end road cased that's handled already. I'll try some stuff out.

dabreegster commented 2 years ago

I have some ideas on dealing with the holes, but not ready yet. I did want to mention that there'll be a new release in a few hours that added your idea for showing walking and biking directions too -- thanks for that! Screenshot from 2022-03-23 10-53-17 (The UI will become less terrible eventually)

XaranDeBruregor commented 2 years ago

1/ NEW VERSION Using abstreet v0_3_17 (and v0_3_16). It's much easier to expand boundaries ! There are far less things that keeps you from adding new blocks. CONGRATS !

2/ HOLES I found some holes example. From my point of view, I would still like to add them with the block surrounding the hole. hole example image image

3/ PLAN A ROUTE Testing driving / cycling / walking new feature ! Very exciting.

4/ TUNNELS Also I'm still brainstorming about bridges / tunnel : If 2 roads cross each other at the same altitude, then there is a junction . If 2 roads cross each other at different altitude, is it possible to know which road is above the other one ? I think that's possible because they are displayed the right way. Or is there any information saying it's tunnel or a bridge ? If yes, is it possible to exclude them from the block calculation ? If not, is it possible to tag them virtually to exclude them ?

LTN is already able to work with road crossing each other. Like bridges cross a bike lane, then the block process is working fine image I guess that block creation process is only using "car street" to be used as block's sides.

XaranDeBruregor commented 2 years ago

Hi !

Congrats for the new features in LTN.
I'm impressed by the progress.

Last version I used v0_3_21 & v0_3_24 are great. I checked the tunnel and bridge issue. Unfortunately every tunnel and bridge are still difficult to use. Blocks with roads going under/above other roads prevent block to be added/removed from LTN area.

dabreegster commented 2 years ago

Thank you for the continued testing! I haven't had any time to work on the tunnel/bridge problem (and I don't expect to have any in the next few months, based on other work projects). The current approach works great in limited situations, but totally falls apart in others you've identified. It could be worth thinking through alternate ways to achieve the same thing. Sometimes the boundary of an LTN includes a natural waterway or a rail line; there's no requirement for the perimeter road to be driveable in a loop. Being able to "trace around the block" is nice for visualization and modifying boundaries -- but it's very complex and breaks in many cases. Are there simpler ways to let people draw and adjust the boundaries they want?

dabreegster commented 2 years ago

Just recording an idea -- for many use cases, there's no need for a partitioning of the entire study area into disjoint neighbourhoods. People just want to focus on a particular study area, like https://consultations.brighton-hove.gov.uk/parking/hanover-and-tarner/supporting_documents/7574%20Hanover%20%20Tarner%20Liveable%20Neighbourhood%20Project%20consultation%20Map%20FINAL%20just%20the%20map%20side.pdf. I got this one working using the boundary tool, but it was awkward to modify the default inferred thing. It'd be easier to start with a blank slate and just let people add all the blocks they want.

dabreegster commented 2 years ago

Another request that's come through -- people want to study multiple adjacent LTNs at once, without making the boundary cover all of them. (That would treat major roads as interior incorrectly.) See https://newhamwalthamforestltn.commonplace.is/proposals/an-overview-of-the-scheme.

I really think it's worthwhile revisiting the assumption that 1) the entire map needs to be divided into neighbourhoods 2) those neighbourhoods can't overlap with each other (if the user draws things this way, we can warn them or nudge them away from it, but nothing at the analysis layer really needs to enforce this!)

XaranDeBruregor commented 1 year ago

Hi ! I'm still following the development. My last test was with v0_3_35. I still bump on tunnel /bridge issue. But New area snapping idea looks promising.

Good work !

dabreegster commented 1 year ago

Screenshot from 2022-12-13 20-47-05 Can we detect and fix holes like the numbered cases? Individually they're bordered by something big and other individual holes.

XaranDeBruregor commented 1 year ago

Hi I tested 0.3.41

I saw the new highlighting with pink blocks. image

I still doesn't solve bridge / tunnel issues, but it permit a better understanding of the block process. 👍

dabreegster commented 1 year ago

Thanks for testing! I'm hoping in the next step, the pink blocks will get added automatically, since often this is what the user is trying to do, and it'll mitigate problems with holes. The bridge/tunnel mess is... still a mess, though.