# Projecting polygons into polyline

I have a polygon layer and a polyline layer. I want to project the polygons onto the polyline like I show in the following images.

The first image shows the features I have.

The second image shows the projection lines (red dashed lines) as I think the concept might work.

The third image shows the resulted segments of the polyline as I expect them to be.

I don't know if this can help, the cells are from a raster grid layer and the polylines represent a road.

It is like the shadow of the polygons cast on the polyline using perpendicular lines to the polyline from the vertices of the polygon. However, the perpendicular is just a concept. I don’t know how it could better work.

I can use: QGIS version 3.10.1-A Coruña Or ArcGIS 10.4.1 for Desktop

• Thank you Taras, very nice process and illustrations I can follow Commented May 12, 2020 at 16:09
• See also this solution about how to project polygons to lines: gis.stackexchange.com/a/384194/88814 Commented Aug 26, 2021 at 7:12

## QGIS Solution

Let's assume there are two layers 'squares' (green) and 'lines' (blue) with its corresponding attribute tables accordingly, see image below.

Step 1. Proceed with the "Extract vertices" (Apply additionally the "Delete duplicate geometries" or the "Remove duplicate vertices" if needed)

Step 2. By means of a "Virtual Layer" through `Layer > Add Layer > Add/Edit Virtual Layer...` use a query query with `ST_ClosestPoint()`

``````SELECT v.id, sv.Name, ST_ClosestPoint(l.geometry, v.geometry) AS geom
FROM "vertices" AS v, lines AS l
``````

Step 3. Proceed with "Points to path". Do not forget about the 'Order field'

Step 4. Proceed with the "Buffer". Do not forget about 'End cap style' and 'Join Style'

Step 5. Proceed with the "Difference" or as was mentioned in comments apply the "Intersection".

References:

• Hi Taras, in the Step 3, when you mention 'Points to path', you mean 'Points to Line'? Commented May 26, 2020 at 9:19
• Hi @Taras, the steps 2 and 3 I cannot execute them. Since they are an individual process, and it is a kind different between different software, I posted a separate question which you have already commented. I addressed a different question for each software which are Commented Jun 7, 2020 at 20:32
• I addressed a separate question for each software which are [Creating polyline segments by points in maximum distance to each other along another polyline using QGIS] <gis.stackexchange.com/questions/363087/…>, and [Creating polyline segments by points in maximum distance to each other along another polyline using ArcGIS Desktop] <gis.stackexchange.com/questions/363083/…> where I provide also the answers. Commented Jun 7, 2020 at 20:40
• At the final Step 5 I actually need ‘Intersect’, not Difference’. Commented Jun 7, 2020 at 20:41

## ArcGIS Solution using ArcPy

You can:

• Generate Near Table to find coordinates to nearest line from each polygon
• Move each polygon to that coordinate with da.UpdateCursor
• Clip the line using polygons as clip features
``````import arcpy

arcpy.env.workspace = r'C:\GIS\Somedatabase.gdb' #Change
lines = 'polyline' #Change
polygons = 'squares' #Change. WILL BE ALTERED SO BACKUP YOUR DATA BEFORE BEFORE EXECUTING CODE
output_lines = 'newlines123' #Change

arcpy.GenerateNearTable_analysis(in_features=polygons, near_features=lines, out_table='neartable', location=True, closest=True) #Find nearest line coordinates
d = {oid:[x,y] for oid,x,y in arcpy.da.SearchCursor('neartable',['IN_FID','NEAR_X','NEAR_Y'])} #Store in dictionary of OID:coordinates

with arcpy.da.UpdateCursor(polygons,['OID@','SHAPE@X','SHAPE@Y']) as cursor: #Move each polygon
for row in cursor:
row[1], row[2] = d[row[0]]
cursor.updateRow(row)

arcpy.Clip_analysis(in_features=lines, clip_features=polygons, out_feature_class=output_lines)
``````

• BERA, I am not familiar with arcpy and coding in general. But, I applied the process by getting the cells centroids, snap them to polylines using Near Tool, creating circular buffer around the points and then Feature Envelope To Polygone to get the cells with their centroids on the nearest road. However, it is not suitable for me because the roads have high curvature and there are cells that intersect with different segments of the same road. Otherwise the process is very good and proper. Commented May 27, 2020 at 9:50