Skip to content

Instantly share code, notes, and snippets.

@pigreco
Created August 17, 2021 20:50
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save pigreco/add15756a2373f43486b1e81f84cbda6 to your computer and use it in GitHub Desktop.
Save pigreco/add15756a2373f43486b1e81f84cbda6 to your computer and use it in GitHub Desktop.
with_variable('andy',
array_foreach( array_foreach(
generate_series(1,num_geometries(segments_to_lines($geometry))),
centroid(geometry_n(segments_to_lines($geometry),@element))),
distance(@element, overlay_nearest('roads',$geometry)[0])),
/*shortest line*/
shortest_line(
array_foreach(
generate_series(1, num_geometries( segments_to_lines($geometry))),
centroid(geometry_n(segments_to_lines($geometry),@element)))
[array_find( @andy,array_min(@andy))],
overlay_nearest('roads',$geometry)[0])
)
@pigreco
Copy link
Author

pigreco commented Aug 24, 2021

@pigreco
Copy link
Author

pigreco commented Aug 24, 2021

Another solution is the following:

  1. I extract the centroids of the building edges:
collect_geometries (array_foreach (
generate_series (1, num_geometries (segments_to_lines ($geometry)))),
centroid (geometry_n (segments_to_lines ($geometry), @ element))))
  1. I draw shorter line between centroids and street:
shortest_line ($geometry, overlay_nearest ('roads', $geometry) [0])

verify:

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment