Some trees may map beyond the edge of a quadrat. This document shows how to deal with those trees: How to know their status and how to locate them.
library(dplyr)
library(fgeo)
The dataset we’ll use is one quadrat from a ViewFullTable from Sinharaja. I chose this quadrat because it has a particularly high number of trees that map beyond the quadrat edge.
vft_data
# Showing only one map (page 3)
map_tag(vft_data)[[3]]

Notice above that some trees spillover beyond the quadrat edge (QX
or QY
greater than 20m). map_tag()
will print a small caption giving the coordinates of the trees that spillover (if the caption is too long it will be truncated).
The problem with the map above is that it lacks information about the status of the trees that spillover because the status is encoded by the point symbol. To solve that problem we can add a suffix to the tree tag. To keep the maps as clean as possible, we can suffix only the few tags of the trees that are dead AND beyond the quadrat edge.
1. Suffix dead trees beyond quadrat edge
suffixed <- suffix_edge_tag(
x = vft_data, # What data?
.match = "dead", # Trees of what status?
suffix = ".d", # What suffix to add?
x_q = 20 # What is the limit beyond which we want to add a suffix?
)
#> One or more trees spillover.
suffixed
And now we map again.
map_tag(suffixed)[[3]]

Notice Tag = 073246.d
at QX = 20.20
and QY = 13.25
.
2. Extend the quadrat edge
Another way to help solve this problem is to move the quadrat edge a little beyond its limit.
map_tag(suffixed, move_edge = 1)[[3]]

Now we can see the position of the tree 073246, and therefore we can see the symbol “x” indicating that it is dead.
Suffix all dead trees
If you want to suffix all dead trees, simply choose x_q = 0
.
suffix_all_dead <- suffix_edge_tag(
x = vft_data, # What data?
.match = "dead", # Trees of what status?
suffix = ".d", # What suffix to add?
x_q = 0 # What is the limit beyond which we want to add a suffix?
)
#> One or more trees spillover.
Now notice that – regardless of their position –all dead trees have the suffix “.d”.
filter(suffix_all_dead, Status == "dead")
LS0tDQp0aXRsZTogIkxvY2F0aW5nIHRyZWVzIGJleW9uZCB0aGUgcXVhZHJhdCBlZGdlIg0Kb3V0cHV0OiANCiAgcm1hcmtkb3duOjpodG1sX25vdGVib29rOg0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19kZXB0aDogNg0KICAgIHRoZW1lOiB1bml0ZWQNCi0tLQ0KDQpTb21lIHRyZWVzIG1heSBtYXAgYmV5b25kIHRoZSBlZGdlIG9mIGEgcXVhZHJhdC4gVGhpcyBkb2N1bWVudCBzaG93cyBob3cgdG8gZGVhbCB3aXRoIHRob3NlIHRyZWVzOiBIb3cgdG8ga25vdyB0aGVpciBzdGF0dXMgYW5kIGhvdyB0byBsb2NhdGUgdGhlbS4NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQpzZXQuc2VlZCgxMDE0KQ0Kb3B0aW9ucyhkaWdpdHMgPSAzKQ0KDQprbml0cjo6b3B0c19jaHVuayRzZXQoDQogIGVjaG8gPSBUUlVFLA0KICBjb21tZW50ID0gIiM+IiwNCiAgY29sbGFwc2UgPSBUUlVFLA0KICBjYWNoZSA9IFRSVUUsDQogIGZpZy5hbGlnbiA9ICJjZW50ZXIiLA0KICBmaWcuc2hvdyA9ICJob2xkIiwNCiAgb3V0LndpZHRoID0gIjk4JSIsIA0KICBmaWcud2lkdGggPSAxNCwgDQogIGZpZy5hc3AgPSAwLjc1DQopDQpgYGANCg0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShmZ2VvKQ0KYGBgDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0KcmF3IDwtIHNpbmhhcmFqYTo6c2luaF92ZnQNCg0KcXVhZF9zcGlsbG92ZXIgPC0gcmF3ICU+JSANCiAgZmlsdGVyKFN0YXR1cyA9PSAiZGVhZCIpICU+JSANCiAgc2VsZWN0KG1hdGNoZXMoInF4fHF5IiksIGV2ZXJ5dGhpbmcoKSkgJT4lIA0KICBmaWx0ZXIoYW55KFFYID4gMjAsIFFZID4gMjApKSAlPiUgDQogIGdyb3VwX2J5KFF1YWRyYXRJRCkgJT4lIA0KICBjb3VudChUYWcsIHNvcnQgPSBUUlVFKSAlPiUgDQogIHRvcChuLCAtMSkgJT4lIA0KICBwdWxsKFF1YWRyYXRJRCkNCmBgYA0KDQpgYGB7ciwgaW5jbHVkZT1GQUxTRX0NCnZmdF90b3Axc3BpbGxvdmVyIDwtIGZpbHRlcihyYXcsIFF1YWRyYXRJRCA9PSBxdWFkX3NwaWxsb3ZlcikNCnh5IDwtIG11dGF0ZSh2ZnRfdG9wMXNwaWxsb3ZlciwgeCA9IFFYLCB5ID0gUVkpDQp2ZnQgPC0geHkgJT4lIA0KICBzZWxlY3QoUVgsIFFZLCBTdGF0dXMsIFRhZywgZXZlcnl0aGluZygpKSAlPiUNCiAgYXJyYW5nZShkZXNjKHgpLCBkZXNjKHkpKQ0KDQp2ZnQxIDwtICAgZHBseXI6OmZpbHRlcih2ZnQsIFBsb3RJRCA9PSAxKQ0KdmZ0X2RhdGEgPC0gdG9wKHZmdDEsIENlbnN1c0lELCAtMSkNCg0KIyBMZXQncyBjb25maXJtIHRoYXQgdGhlIGRhdGEgd2UgYHdhbnRgIGhhcyBvbmx5IHRoZSBsYXN0IGNlbnN1cy4NCnVuaXF1ZSh2ZnRfZGF0YSRDZW5zdXNJRCkNCiMgR3JlYXQhIFRoaXMgaXMgd2hhdCB0aGUgZGF0YSB3ZSBgd2FudGAgbG9va3MgbGlrZS4NCmBgYA0KDQpUaGUgZGF0YXNldCB3ZSdsbCB1c2UgaXMgb25lIHF1YWRyYXQgZnJvbSBhIFZpZXdGdWxsVGFibGUgZnJvbSBTaW5oYXJhamEuIEkgY2hvc2UgdGhpcyBxdWFkcmF0IGJlY2F1c2UgaXQgaGFzIGEgcGFydGljdWxhcmx5IGhpZ2ggbnVtYmVyIG9mIHRyZWVzIHRoYXQgbWFwIGJleW9uZCB0aGUgcXVhZHJhdCBlZGdlLg0KDQpgYGB7cn0NCnZmdF9kYXRhDQpgYGANCg0KYGBge3J9DQojIFNob3dpbmcgb25seSBvbmUgbWFwIChwYWdlIDMpDQptYXBfdGFnKHZmdF9kYXRhKVtbM11dDQpgYGANCg0KTm90aWNlIGFib3ZlIHRoYXQgc29tZSB0cmVlcyBzcGlsbG92ZXIgYmV5b25kIHRoZSBxdWFkcmF0IGVkZ2UgKGBRWGAgb3IgYFFZYCBncmVhdGVyIHRoYW4gMjBtKS4gYG1hcF90YWcoKWAgd2lsbCBwcmludCBhIHNtYWxsIGNhcHRpb24gZ2l2aW5nIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdHJlZXMgdGhhdCBzcGlsbG92ZXIgKGlmIHRoZSBjYXB0aW9uIGlzIHRvbyBsb25nIGl0IHdpbGwgYmUgdHJ1bmNhdGVkKS4NCg0KVGhlIHByb2JsZW0gd2l0aCB0aGUgbWFwIGFib3ZlIGlzIHRoYXQgaXQgbGFja3MgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXR1cyBvZiB0aGUgdHJlZXMgdGhhdCBzcGlsbG92ZXIgYmVjYXVzZSB0aGUgc3RhdHVzIGlzIGVuY29kZWQgYnkgdGhlIHBvaW50IHN5bWJvbC4gVG8gc29sdmUgdGhhdCBwcm9ibGVtIHdlIGNhbiBhZGQgYSBzdWZmaXggdG8gdGhlIHRyZWUgdGFnLiBUbyBrZWVwIHRoZSBtYXBzIGFzIGNsZWFuIGFzIHBvc3NpYmxlLCB3ZSBjYW4gc3VmZml4IG9ubHkgdGhlIGZldyB0YWdzIG9mIHRoZSB0cmVlcyB0aGF0IGFyZSBkZWFkIEFORCBiZXlvbmQgdGhlIHF1YWRyYXQgZWRnZS4NCg0KX18xLiBTdWZmaXggZGVhZCB0cmVlcyBiZXlvbmQgcXVhZHJhdCBlZGdlX18NCg0KYGBge3J9DQpzdWZmaXhlZCA8LSBzdWZmaXhfZWRnZV90YWcoDQogIHggPSB2ZnRfZGF0YSwgICAgICAgICAgICAjIFdoYXQgZGF0YT8NCiAgLm1hdGNoID0gImRlYWQiLCAgICAgIyBUcmVlcyBvZiB3aGF0IHN0YXR1cz8NCiAgc3VmZml4ID0gIi5kIiwgICAgICAgIyBXaGF0IHN1ZmZpeCB0byBhZGQ/DQogIHhfcSA9IDIwICAgICAgICAgICAgICMgV2hhdCBpcyB0aGUgbGltaXQgYmV5b25kIHdoaWNoIHdlIHdhbnQgdG8gYWRkIGEgc3VmZml4Pw0KKQ0Kc3VmZml4ZWQNCmBgYA0KDQpBbmQgbm93IHdlIG1hcCBhZ2Fpbi4NCg0KYGBge3J9DQptYXBfdGFnKHN1ZmZpeGVkKVtbM11dDQpgYGANCg0KTm90aWNlIGBUYWcgPSAwNzMyNDYuZGAgYXQgYFFYID0gMjAuMjBgIGFuZCBgUVkgPSAxMy4yNWAuDQoNCl9fMi4gRXh0ZW5kIHRoZSBxdWFkcmF0IGVkZ2VfXw0KDQpBbm90aGVyIHdheSB0byBoZWxwIHNvbHZlIHRoaXMgcHJvYmxlbSBpcyB0byBtb3ZlIHRoZSBxdWFkcmF0IGVkZ2UgYSBsaXR0bGUgYmV5b25kIGl0cyBsaW1pdC4NCg0KYGBge3J9DQptYXBfdGFnKHN1ZmZpeGVkLCBtb3ZlX2VkZ2UgPSAxKVtbM11dDQpgYGANCg0KTm93IHdlIGNhbiBzZWUgdGhlIHBvc2l0aW9uIG9mIHRoZSB0cmVlIDA3MzI0NiwgYW5kIHRoZXJlZm9yZSB3ZSBjYW4gc2VlIHRoZSBzeW1ib2wgIngiIGluZGljYXRpbmcgdGhhdCBpdCBpcyBkZWFkLg0KDQpfX1N1ZmZpeCBhbGwgZGVhZCB0cmVlc19fDQoNCklmIHlvdSB3YW50IHRvIHN1ZmZpeCBhbGwgZGVhZCB0cmVlcywgc2ltcGx5IGNob29zZSBgeF9xID0gMGAuDQoNCmBgYHtyfQ0Kc3VmZml4X2FsbF9kZWFkIDwtIHN1ZmZpeF9lZGdlX3RhZygNCiAgeCA9IHZmdF9kYXRhLCAgICAgICAgICAgICMgV2hhdCBkYXRhPw0KICAubWF0Y2ggPSAiZGVhZCIsICAgIyBUcmVlcyBvZiB3aGF0IHN0YXR1cz8NCiAgc3VmZml4ID0gIi5kIiwgICAgICAgIyBXaGF0IHN1ZmZpeCB0byBhZGQ/DQogIHhfcSA9IDAgICAgICAgICAgICAgICMgV2hhdCBpcyB0aGUgbGltaXQgYmV5b25kIHdoaWNoIHdlIHdhbnQgdG8gYWRkIGEgc3VmZml4Pw0KKQ0KYGBgDQoNCk5vdyBub3RpY2UgdGhhdCAtLSByZWdhcmRsZXNzIG9mIHRoZWlyIHBvc2l0aW9uIC0tYWxsIGRlYWQgdHJlZXMgaGF2ZSB0aGUgc3VmZml4ICIuZCIuDQoNCmBgYHtyfQ0KZmlsdGVyKHN1ZmZpeF9hbGxfZGVhZCwgU3RhdHVzID09ICJkZWFkIikNCmBgYA0KDQoNCg0K