Projecting polygons into polyline
Solution for QGIS
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 'Extract vertices'
(Apply additionally 'Delete duplicate geometries'
or '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 "Order field"
Step 4. Proceed with 'Buffer'
. Do not forget about 'End cap style' and 'Join Style'.
Step 5. Proceed with 'Difference'
or as was mentioned in comments apply 'Intersection'
.
References:
- Where/How can I enter the code for a Virtual Layer?
Solution for ArcGIS 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)