[postgis-users] How to create block polygons from street network?

Stephen Woodbridge woodbri at swoodbridge.com
Thu Apr 23 14:52:19 PDT 2009


Dave,

Yes, I think you are correct. It does not sound like you are creating 
the polygons from the street network.

-Steve

Van Bakergem, William wrote:
> Stephen,
> 
> We may be talking apples and oranges.  Our project treats each city
> block as a separate object floating in a sea of public right of ways.
> We generate the streets with a default width (18.3 meters) and then
> revise for streets with other widths.  The tool is designed for
> historic districts of about 500 city blocks.  So, we do not have any
> topological issues with left/right.  Everything is counterclockwise
> beginning in the most south west corner.  There are no branches, only
> single isolated polygons.  We always know what's inside and what
> outside.
> 
> Streets are generated on the fly when we need them - just the space
> between the blocks with sidewalk and curb typologies. Street
> attributes are managed via a street segments table whose geometry is
> the center line.  Is really simple, but works for a virtual 3d model
> generator.
> 
> All of this is managed in a spatial temporal manager that keeps track
> of when objects appear and disappear in the urban landscape over the
> 200 year time interval.
> 
> A timeline slide bar in the Xj3D viewer allows the user to see
> changes in real time.  Think H.G. Wells Time Machine.
> 
> It's all open source.
> 
> Dave
> 
> 
> -----Original Message----- From:
> postgis-users-bounces at postgis.refractions.net on behalf of Stephen
> Woodbridge Sent: Thu 4/23/2009 3:35 PM To: PostGIS Users Discussion 
> Subject: Re: [postgis-users] How to create block polygons from street
> network?
> 
> Hi Dave,
> 
> I have a client that is interested in getting polygon blocks from a
> road network. I'm not sure what for but it seemed like something that
> should not be that hard to do given noded street data. I have used
> pgRouting so I know I can build a good adjacency graph of the data.
> The problem with an adjacency graph is that it does not tell you
> which node is right/left most so you have to do some analysis of the
> geometry unless there is some nifty graph analysis the finds all
> polygons in a graph.
> 
> How does your tool work? Are you will to share it? I was thinking
> that such tools might be a useful add-on to postgis.
> 
> -Steve
> 
> Van Bakergem, William wrote:
>> Stephan,
>> 
>> I have a tool for generating city blocks from street center lines.
>>  1. Given centerlines, street widths and street names (from Google
>> Maps), calculate intersections, blocks and block sides; 2. All
>> geometries are inserted into PostGIS tables; 3. From these table I
>> can generate a virtual city based on building typologies and
>> development histories for any year over a 200 year time interval.
>>  4. Display in Xj3d or Google Earth (COLLADA).
>> 
>> I would like to hear more about your project.
>> 
>> Dave van Bakergem
>> 
>> 
>> 
>> -----Original Message----- From:
>> postgis-users-bounces at postgis.refractions.net on behalf of Stephen
>> Woodbridge Sent: Thu 4/23/2009 2:29 PM To: PostGIS Users Discussion
>>  Subject: [postgis-users] How to create block polygons from street
>> network?
>> 
>> Hi all,
>> 
>> Here is an interesting problem that I could use some suggestions
>> and/or sample code for. I have a street network where all the
>> street segments are noded at intersections. What I need to extract
>> is all the blocks in the coverage. A "block" is the smallest
>> polygon bounded by segments that does not have any segment crossing
>> it. It could have a cul-de-sac protruding into its interior as long
>> as it does not divide the polygon in two.
>> 
>> I could create a node adjacency list, but I'm not sure if that
>> helps me.
>> 
>> I'm thinking that each edge needs to be tagged with a right and
>> left polygon id, then you can create polygons by grouping on the
>> id.
>> 
>> while (current = get_edge_without_rl_pid) { if
>> current.right_side_edge has no pid { get new_pid as this_pid get
>> other edges from end find right most edge if edge has id then { 
>> update all new_pid to id mark new_pid as unused this_pid = id } 
>> else mark both edges as this_pid } if current.left_side_edge has no
>> pid { get new_pid as this_pid get other edges from end find left
>> most edge if edge has id then { update all new_pid to id mark
>> new_pid as unused this_pid = id } else mark both edges as this_pid 
>> } }
>> 
>> Does this seem like it would work? Anyone interested in turning
>> this into plpgsql?
>> 
>> It might be better to recursively pick an edge and recursively walk
>>  connected right most edges back onto itself marking the edges as
>> you go. At some point you may still have edges not included in any
>> of the above that can only be marked by walking the left most
>> edges.
>> 
>> Thoughts?
>> 
>> -Steve W _______________________________________________ 
>> postgis-users mailing list postgis-users at postgis.refractions.net 
>> http://postgis.refractions.net/mailman/listinfo/postgis-users
>> 
>> 
>> 
>> ------------------------------------------------------------------------
>> 
>> 
>> _______________________________________________ postgis-users
>> mailing list postgis-users at postgis.refractions.net 
>> http://postgis.refractions.net/mailman/listinfo/postgis-users
> 
> _______________________________________________ postgis-users mailing
> list postgis-users at postgis.refractions.net 
> http://postgis.refractions.net/mailman/listinfo/postgis-users
> 
> 
> 
> ------------------------------------------------------------------------
> 
> 
> _______________________________________________ postgis-users mailing
> list postgis-users at postgis.refractions.net 
> http://postgis.refractions.net/mailman/listinfo/postgis-users




More information about the postgis-users mailing list