[pdal] Merging buffered tiles

Howard Butler howard at hobu.co
Thu May 3 08:26:12 PDT 2018


Eric,


This is such an awesome pipeline (except for parenthesis in your
filenames -- ewww :).

The SRS complaint is something we should investigate. I suppose it is
because something isn't transiting through GDAL as "equal" due to the
way it works.

Howard


On 5/3/18 10:05 AM, Eric Robeck wrote:
> Howard / Mike,
>
> Thanks for your feedback. Based on your recommendation, I built a pipeline
> that reads all 24 input tiles, crops each to non-overlapping bounding
> boxes, merges, and reprojects the results prior to writing the composite
> LAZ file.
>
> The pipeline works and the output file looks great. I can't find any
> obvious errors or omissions. However, PDAL returns the following error
> message when writing the file, repeated 24 times (one per input file):
>
> *(pdal pipeline Error) writers.las: Attempting to write
> 'C:/data/forest_park/mcc/mcc_merge_UTM (s-1_5, t-0_3).laz' with multiple
> point spatial references.*
>
> Should I be worried about this error? Is there any way to structure my JSON
> pipeline to prevent it from occurring? The full pipeline is copied below.
>
> Thanks,
> Eric
>
> {
>   "pipeline":
>   [
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_1 (s-1_5,
> t-0_3).las",
>         "tag":"tile_1"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_2 (s-1_5,
> t-0_3).las",
>         "tag":"tile_2"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_3 (s-1_5,
> t-0_3).las",
>         "tag":"tile_3"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_4 (s-1_5,
> t-0_3).las",
>         "tag":"tile_4"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_5 (s-1_5,
> t-0_3).las",
>         "tag":"tile_5"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_6 (s-1_5,
> t-0_3).las",
>         "tag":"tile_6"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_7 (s-1_5,
> t-0_3).las",
>         "tag":"tile_7"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_8 (s-1_5,
> t-0_3).las",
>         "tag":"tile_8"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_9 (s-1_5,
> t-0_3).las",
>         "tag":"tile_9"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_10 (s-1_5,
> t-0_3).las",
>         "tag":"tile_10"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_11 (s-1_5,
> t-0_3).las",
>         "tag":"tile_11"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_12 (s-1_5,
> t-0_3).las",
>         "tag":"tile_12"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_13 (s-1_5,
> t-0_3).las",
>         "tag":"tile_13"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_14 (s-1_5,
> t-0_3).las",
>         "tag":"tile_14"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_15 (s-1_5,
> t-0_3).las",
>         "tag":"tile_15"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_16 (s-1_5,
> t-0_3).las",
>         "tag":"tile_16"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_17 (s-1_5,
> t-0_3).las",
>         "tag":"tile_17"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_18 (s-1_5,
> t-0_3).las",
>         "tag":"tile_18"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_19 (s-1_5,
> t-0_3).las",
>         "tag":"tile_19"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_20 (s-1_5,
> t-0_3).las",
>         "tag":"tile_20"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_21 (s-1_5,
> t-0_3).las",
>         "tag":"tile_21"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_22 (s-1_5,
> t-0_3).las",
>         "tag":"tile_22"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_23 (s-1_5,
> t-0_3).las",
>         "tag":"tile_23"
>     },
>     {
>         "type":"readers.las",
>         "filename":"C:/data/forest_park/mcc/forest_park_sp_tile_24 (s-1_5,
> t-0_3).las",
>         "tag":"tile_24"
>     },
>     {
>         "inputs":"tile_1",
>       "type":"filters.crop",
>       "bounds":"([737943,738600],[4280246,4281046])",
>       "tag":"crop_1"
>     },
>     {
>         "inputs":"tile_2",
>       "type":"filters.crop",
>       "bounds":"([737143,737943],[4280246,4281046])",
>       "tag":"crop_2"
>     },
>     {
>         "inputs":"tile_3",
>       "type":"filters.crop",
>       "bounds":"([737943,738600],[4279446,4280246])",
>       "tag":"crop_3"
>     },
>     {
>         "inputs":"tile_4",
>       "type":"filters.crop",
>       "bounds":"([737143,737943],[4279446,4280246])",
>       "tag":"crop_4"
>     },
>     {
>         "inputs":"tile_5",
>       "type":"filters.crop",
>       "bounds":"([737943,738600],[4279000,4279446])",
>       "tag":"crop_5"
>     },
>     {
>         "inputs":"tile_6",
>       "type":"filters.crop",
>       "bounds":"([737143,737943],[4279000,4279446])",
>       "tag":"crop_6"
>     },
>     {
>         "inputs":"tile_7",
>       "type":"filters.crop",
>       "bounds":"([737943,738600],[4281046,4281300])",
>       "tag":"crop_7"
>     },
>     {
>         "inputs":"tile_8",
>       "type":"filters.crop",
>       "bounds":"([737143,737943],[4281046,4281300])",
>       "tag":"crop_8"
>     },
>     {
>         "inputs":"tile_9",
>       "type":"filters.crop",
>       "bounds":"([734385,734743],[4279446,4280246])",
>       "tag":"crop_9"
>     },
>     {
>         "inputs":"tile_10",
>       "type":"filters.crop",
>       "bounds":"([734385,734743],[4280246,4281046])",
>       "tag":"crop_10"
>     },
>     {
>         "inputs":"tile_11",
>       "type":"filters.crop",
>       "bounds":"([734743,735543],[4279446,4280246])",
>       "tag":"crop_11"
>     },
>     {
>         "inputs":"tile_12",
>       "type":"filters.crop",
>       "bounds":"([734743,735543],[4280246,4281046])",
>       "tag":"crop_12"
>     },
>     {
>         "inputs":"tile_13",
>       "type":"filters.crop",
>       "bounds":"([735543,736343],[4279446,4280246])",
>       "tag":"crop_13"
>     },
>     {
>         "inputs":"tile_14",
>       "type":"filters.crop",
>       "bounds":"([735543,736343],[4280246,4281046])",
>       "tag":"crop_14"
>     },
>     {
>         "inputs":"tile_15",
>       "type":"filters.crop",
>       "bounds":"([734385,734743],[4279000,4279446])",
>       "tag":"crop_15"
>     },
>     {
>         "inputs":"tile_16",
>       "type":"filters.crop",
>       "bounds":"([734743,735543],[4279000,4279446])",
>       "tag":"crop_16"
>     },
>     {
>         "inputs":"tile_17",
>       "type":"filters.crop",
>       "bounds":"([735543,736343],[4279000,4279446])",
>       "tag":"crop_17"
>     },
>     {
>         "inputs":"tile_18",
>       "type":"filters.crop",
>       "bounds":"([734385,734743],[4281046,4281300])",
>       "tag":"crop_18"
>     },
>     {
>         "inputs":"tile_19",
>       "type":"filters.crop",
>       "bounds":"([734743,735543],[4281046,4281300])",
>       "tag":"crop_19"
>     },
>     {
>         "inputs":"tile_20",
>       "type":"filters.crop",
>       "bounds":"([735543,736343],[4281046,4281300])",
>       "tag":"crop_20"
>     },
>     {
>         "inputs":"tile_21",
>       "type":"filters.crop",
>       "bounds":"([736343,737143],[4279446,4280246])",
>       "tag":"crop_21"
>     },
>     {
>         "inputs":"tile_22",
>       "type":"filters.crop",
>       "bounds":"([736343,737143],[4280246,4281046])",
>       "tag":"crop_22"
>     },
>     {
>         "inputs":"tile_23",
>       "type":"filters.crop",
>       "bounds":"([736343,737143],[4279000,4279446])",
>       "tag":"crop_23"
>     },
>     {
>         "inputs":"tile_24",
>       "type":"filters.crop",
>       "bounds":"([736343,737143],[4281046,4281300])",
>       "tag":"crop_24"
>     },
>     {
>
> "inputs":["crop_1","crop_2","crop_3","crop_4","crop_5","crop_6","crop_7","crop_8","crop_9","crop_10","crop_11","crop_12","crop_13","crop_14","crop_15","crop_16","crop_17","crop_18","crop_19","crop_20","crop_21","crop_22","crop_23","crop_24"],
>       "type":"filters.merge",
>       "tag":"merge_tiles"
>     },
>     {
>         "inputs":"merge_tiles",
>       "type":"filters.reprojection",
>       "tag":"reproject_tiles",
>       "in_srs":"EPSG:26915",
>       "out_srs":"EPSG:32615"
>     },
>     {
>         "inputs":"reproject_tiles",
>       "type":"writers.las",
>       "filename":"C:/data/forest_park/mcc/mcc_merge_UTM (s-1_5, t-0_3).laz"
>     }
>   ]
> }
>
>
>
> On Sun, Apr 29, 2018 at 10:19 AM Howard Butler <howard at hobu.co> wrote:
>
>>
>> On 4/28/18 5:03 PM, Eric Robeck wrote:
>>> Is there a way within PDAL to merged buffered tiles with a constant
>> buffer
>>> width, while filtering out only the buffers from each tile?
>>>
>>> For context, I am using an external software to modify a large point
>> cloud.
>>> Due to memory constraints, I first tiled the data using the "splitters"
>>> filter, but included a 10 m buffer to minimize edge effects. Now that the
>>> data are processed, I want to merge them back into a single file.
>> You could use filters.assign to set a "buffer" value for the points that
>> are in your buffer ring (or the ones that aren't), and then use
>> filters.range to cull out points that have the "!buffer" classification
>> before you go back to merge them altogether. It would be laborious, but
>> you could get the job done.
>>
>> Additionally, Connor Manning of Hobu demonstrated a workflow at FOSS4G
>> 2017 [1] that is very similar to what you're doing except it is based on
>> Greyhound and Entwine for the data management (and PDAL for the
>> processing). The goal is to be able to put back information into an
>> Entwine tree and not be constrained by a fixed tiling scheme while
>> processing. It's all very much a prototype at the moment, but dynamic
>> workflows based on adaptive tiling schemes is something we are actively
>> working on.
>>
>> Howard
>>
>>
>> [1] https://vimeo.com/245073446
>>
>>


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 528 bytes
Desc: OpenPGP digital signature
URL: <http://lists.osgeo.org/pipermail/pdal/attachments/20180503/d22a5205/attachment.sig>


More information about the pdal mailing list