Showing posts with label Functional Attribute. Show all posts
Showing posts with label Functional Attribute. Show all posts

Monday, September 15, 2008

Creating a Feature Class of Pairs of Intersecting streets from a street centerline network

Step 1: We start with a set of features of Feature Class STREET_SEGMENTS (total 3793 features)

  • Each street segment consists of one continuous line feature and has the street segment name and a polarity (a way of showing that one end is the start and the other end the end of the line).
  • Different segments could have the same segment name
    * The segment name is actually the street name and has the following components
    a. Direction (N, S, W, E or Null)
    b. Street_Name
    c. Street_Type
  • Use Functional Attribute to generate a single string out of the three components. One such Functional Attribute would be to CONCATENATE the three fields together with a space and treated the Null direction as the empty string ‘’.

Step 2: Apply Analytic Merge to STREET_SEGMENTS to merge by attribute Segment Name to get STREETS. This will ensure that each Street Feature has a unique name (843 Features)

Step 3: Output Feature Class of the results of the STREETS query to a Geomedia Warehouse calling it MILPITAS_STREETS. While we could/should work with the query STREETS, at some point we will need to have an ID for referring to the streets, and writing out the Feature assigns an ID field.

Step 4: Apply Spatial Intersection of MILPITAS_STREETS that touch MILPITAS_STREETS to get intersections of all the Streets. (3565 features). The result will be a set of point and line features.

Step 5: Apply Attribute Query to the result from Step 4 with the Filter being ID – ID1 <> 0. This will remove features which consist of streets that are spatially equal to themselves. Details on why ID <>ID1 as a filter does not work is given in Identifying duplicate Spatial Features in GeoMedia (There are 2722 features which is 3565-843 as expected)

Step 5 is a query that produces a feature class where the every intersection appears at least twice, in different orders of the street names creating the intersection. In the case of junctions where 3 streets meet, there will be 6 features with the same intersection point, and in the case of 4 streets, there will be 12 features with the same intersection point. A illustrative example is the intersection of N and S Main Street and E and W Calaveras Blvd.

Discussion:

Step 5 produces a feature class that may then be modified for other purposes.

Suggested Modification 1: Eliminate duplicate combinations of cross streets so that each intersecting pair of streets appears once. One way of doing this may be to apply an Attribute Query to the Step 5 results with ID - ID1 > 0

Suggested Modification 2: By applying an Analytical Merge of the results of 5, and counting how many intersection point create each result, it may be possible to rename the results where the count is greater than 2. For instance, the case of N and S Main St intersecting E and W Calaveras Blvd may be considered Calaveras Blvd crossing Main St.

Application and Business Requirements:

The choice of modifications is in the realm of business requirements that determine how the data is to be used, and how cross streets should be defined. One application is to describe traffic accidents, and in that case if the order in which the street names are stated is not important, Modification 1 may be adequate for the purpose.

A second application is to create a street index of all streets cross each street. In this case, the data from Step 5 may be exported to an EXCEL spreadsheet and then manipulated.

Saturday, August 23, 2008

Identifying StopValves that control a Pipe Segment

The Problem: Given a network of line and point features representing pipes and valves respectively, how to determine the stopvalves associated with a given pipe segment?

Business Purpose: If there is a break in a pipe, which valves must be shut off in order to isolate the break, and therefore prevent excess water loss.


Some definitions:
  1. A pipe section is a series of pipes joined end to end in a straight or continuous smooth line.
  2. Each pipe section has a unique PipeID associated with it.
  3. Each valve has a unique ValveId associated with it.
  4. Each valve should have 1 or 2 pipe sections attached to it.
  5. A valve controls amount of flow, not direction of flow: the direction of flow is determined by pressure values at different parts of the network. Consequently, water may flow in opposite directions through a valve, an in a pipe section at different times.
  6. A pipe segment is a set of pipe sections joined to one another so that the sections are topologically connected, and isolated from other pipe segments. It follows that each pipe section can belong to one and only one pipe segment.
  7. A pipe segment will have 2 or more ends to it. There are no pipe segments with 0 or 1 end (Actually a pipe segment with 0 end may exist if it is a ring or a closed polygon without any valves in it).
  8. Within a pipe section, individual pipes may meet end to end only. A T-junction would therefore be a place where 3 pipe sections join together in the pipe segment.
    A pipe junction could have more than 3 pipe sections coming together.
    A series of pipe sections may meet one another at angular junctions, so that any of the sections can be isolated by turning off 2 valves. These pipe sections make up a pipe segment.


The Problem described in abstract terms: For a given pipe segment, provide a list of ValveIDs at the ends of the segment.

Possible exception conditions:
A valve may not have any pipe segments associated with it. This would be a standalone valve which does not control any pipes.
A valve may show only one pipe segment associated with it. This means that the valve controls consumption of water flowing through it, or that the other segment possibly associated with it is not of current interest in the network.
The end of a pipe segment may not have a valve; this could mean that we are not interested in what happens at the end of that pipe segment.

One Solution algorithm in Geomedia:

Given: Line Feature PIPES and Point Feature VALVES
  1. Apply [ANALYTIC MERGE] to PIPES merging ALL geometries to create a feature query qry_merge_PIPES (Why? See Note 1)
  2. Apply [BUFFER ZONE] with small radius (1 mm or 1 cm) around VALVE to create feature query qry_VALVES_Buffered (Why? See Note 2)
  3. Apply [SPATIAL DIFFERENCE] with input qry_merge_PIPES subtracting qry_VALVES_Buffered to create a query qry_PSEGMENTS which is still a single feature consisting of joined and unjoined pipe (See Note 3)
  4. Add [FUNCTIONAL ATTRIBUTE] [Geometry] using the [GEOMETRIES] function to qry_PSEGMENTS.Difference_Geometry to create a query qry_PIPE_SECTIONS (See Note 4)
  5. Apply [ANALYTICAL MERGE] to qry_PIPE_SECTION by Merge Criteria [TOUCHING] to create a feature qry_PIPE_SEGMENTS. (See Note 5)
  6. Apply [AGGREGATION] with the summary feature in qry_PIPE_SEGMENTS from the detail features qry_VALVE_Buffered with spatiallty aggregation where the summary features [TOUCH] the detail features. Create an Output [FUNCTIONAL ATTRIBUTE] called [STOP_VALVES] which uses the function [CONCATENATE] function on the Detail.VALVE_IDs, separating them using a suitable separator such as a comma or a semi-colon. The resulting qry will be called PIPE_SEGMENTS. (See Note 6)
  7. Display PIPE_SEGMENTS. When the attributes of a particular PIPE_SEGMENT are displayed, the only attribute shown will be the list of STOPVALVES. (See Note 7)
Technical difficulties:

Note 1 This merges all the pipe segments together to get one or more unconnected pipe networks.
Note 2 This makes the valves to small circular areas and why we do so will become clearer at the end of the next step.
Note 3 In theory it should be possible to subtract the VALVES directly from PIPE_NETWORK so that there is a break where the valve is located. In practice, GeoMedia will not allow [SPATIAL DIFFERENCE] between line and points, only between lines and lines or lines and areas.
Note 4 What we want here is to separate each pipe segment. However, Geomedia will do this, and in addition, will also break apart pipe segments where pipe sections meet at an angle, and at T-junctions.
Note 5 By comparing the number of pipe segments together with the original pipe segments, we can get an idea of any inconsistent network.
Note 6 This is a means of associating the valve buffers with the pipe segments they each helped to create. The CONCATENATE function works because the VALVE_IDs were text rather than Numbers.
Note 7 To generate Valve Segment IDs, we need to output the query to a feature.



Data Quality issues:

  1. 1 valve with no ID
  2. some valves do not touch pipes - suggests (a) valve does not exist in reality (b) linework error 3) some pipe sections appear in multiple segments - this means that some of the original pipe linework had valves sitting on a continuous pipe.
    Since original data came from CAD system, it is necessary to correct the data at the CAD level, rather than update at the Geomedia level.