Hexagon Geospatial
MENU

GeoMedia

Search for an answer, post a question, or answer other users' questions in our GeoMedia support discussions. This discussion board is a great way to collaborate with industry peers around the world. It is intended for discussion and support of the GeoMedia Desktop and Add-on applications.
Showing results for 
Search instead for 
Do you mean 
Reply
Occasional Contributor
Posts: 12
Registered: ‎03-22-2016
Accepted Solution

Getting data from multiple lines onto a single point

I have calculated intersections of our street geometry.  The solution desired would put any street name that touches the interection onto the point.  The problem I'm having is when there are more than two (2) streets on the intersection.  I've found no aggregation function that would get all of the streets.  While I can find the intersections with more than two streets easily, I don't want to populate values on the points manually.

Highlighted
Staff
Posts: 160
Registered: ‎02-02-2016

Re: Getting data from multiple lines onto a single point

Hi Frebs,

Aggregation is probably the right way to go; it can be used to summarize from multiple detail items (streets) to a single summary point (intersection points).  The command allows you to summarize the detail information as a single output (first, last, min, max, avg, etc..)  One type of summary however can be a concatenated string which a single (summarized) value separated string.

 

Summary features:  [point fclass / query]

Detail features:  [streets]

Spatial tab:

Spatial operator:  Touch

Output tab:

Resolution operator:  All

 

Build expression using CONCATENATE function.

 

Syntax:  CONCATENATE(Separator, String, Orderby) 

The orderby is optional.

 

Example: 

The following would create a comma separated list of street names that touch the point.

CONCATENATE(",",Detail.Street_Name)

 

Lagniappe

If you have Transportation Manager, the Intersection Markers command can be used to generate points at intersections and list the linear network key fields and their beginning and ending measures (among other things).  The command would create multiple stacked points where multiple routes (street names) cross with added attributes.  If a single point representation was desired the stacked points could be input into Analytical Merge command where you could again use a many to 1 style expression like CONCATENATE to summarize the multiple values (street names) to a single value (value separated string).

 

Occasional Contributor
Posts: 12
Registered: ‎03-22-2016

Re: Getting data from multiple lines onto a single point

Pat, this worked perfectly, after I merged the streets to eliminate duplicate values being returned.  However, since I need each result in it's own column, I'm trying to find a FA that replicates the Excel Text to Column function.  Since I can have up to four streets in an intersection, I can't just simply do a LEFT and RIGHT extraction.  And the strings are of course variable length, so I can't just FIND the commas at a given position.  I'm sure there is a way, I just can't find it.

Occasional Contributor
Posts: 12
Registered: ‎03-22-2016

Re: Getting data from multiple lines onto a single point

Pat, I got it.  Did several steps, wound up with the results I neeed.

Step 1:  LEFT(Input.LIST_OF_STREET_IDS, FIND(',', Input.LIST_OF_STREET_IDS)-1).  This gives me the first value in the list.

Step 2:  RIGHT(Input.LIST_OF_STREET_IDS, LEN(Input.LIST_OF_STREET_IDS)-FIND(',', Input.LIST_OF_STREET_IDS)).  This intermediate step removes the first value and the comma after it.

Step 2A:  IF(FIND(',', Output.Step2)=0, Output.Step2, LEFT(Output.Step2, FIND(',', Output.Step2)-1)).  This gives me the second value in the list.  It's an intersection, so there are always at least two results.

Step 3:  IF(FIND(',', Output.Step2)=0, NULL(Text), RIGHT(Output.Step2, LEN(Output.Step2)-FIND(',', Output.Step2))).  This intermediate step removes the second value and the comma after it.

Step 4:  IF(FIND(',', Output.Step3)=0, Output.Step3, LEFT(Output.Step3, FIND(',', Output.Step3)-1)).  This gives the third value, or a Null if there is not one.

Step 5:  IF(FIND(',', Output.Step3)=0, NULL(Text), RIGHT(Output.Step3, LEN(Output.Step3)-FIND(',', Output.Step3))).  The final step gives me the fourth value when it occurs, or a Null if not.

Do you need immediate support?
If you encounter a critical issue and need immediate assistance please submit a Service Request through our Support Portal.