微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

增加折线长度 r sf

如何解决增加折线长度 r sf

我想找到一种方法,将多段线从起点增加 1000 英尺,从终点增加 1000 英尺。任何帮助是极大的赞赏!下面是一个示例。

structure(
    list(
        TECHNICAL_ = NA_character_,geometry = structure(
            list(
                structure(
                    c(812697.360851467,813792.18162311,430678.939150205,425750.102767913),.Dim = c(2L,2L),class = c("XY","LInesTRING","sfg")
                )
            ),n_empty = 0L,crs = structure(
                list(
                    input = "+init=epsg:2257",wkt = "PROJCRS[\"NAD83 / New Mexico East (ftUS)\",\n    BASEGEOGCRS[\"NAD83\",\n        DATUM[\"north American Datum 1983\",\n            ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n                LENGTHUNIT[\"metre\",1]]],\n        PRIMEM[\"Greenwich\",\n            ANGLEUNIT[\"degree\",0.0174532925199433]],\n        ID[\"epsg\",4269]],\n    CONVERSION[\"SPCS83 New Mexico East zone (US Survey feet)\",\n        METHOD[\"Transverse Mercator\",\n            ID[\"epsg\",9807]],\n        ParaMETER[\"Latitude of natural origin\",31,0.0174532925199433],8801]],\n        ParaMETER[\"Longitude of natural origin\",-104.333333333333,8802]],\n        ParaMETER[\"Scale factor at natural origin\",0.999909091,\n            SCALEUNIT[\"unity\",1],8805]],\n        ParaMETER[\"False easting\",541337.5,\n            LENGTHUNIT[\"US survey foot\",0.304800609601219],8806]],\n        ParaMETER[\"False northing\",8807]],15339]],\n    CS[Cartesian,2],\n        AXIS[\"(E)\",east,\n            ORDER[1],0.304800609601219,\n                ID[\"epsg\",9003]]],\n        AXIS[\"(N)\",north,\n            ORDER[2],\n    USAGE[\n        ScopE[\"unkNown\"],\n        AREA[\"USA - New Mexico - SPCS - E\"],\n        BBox[32,-105.72,37,-102.99]]]"
                ),class = "crs"
            ),class = c("sfc_LInesTRING","sfc"),precision = 0,bBox = structure(
                c(xmin = 812697.360851467,ymin = 425750.102767913,xmax = 813792.18162311,ymax = 430678.939150205),class = "bBox"
            )
        )
    ),row.names = 1L,sf_column = "geometry",agr = structure(c(TECHNICAL_ = NA_integer_),.Label = c("constant","aggregate","identity"),class = "factor"),class = c("sf","tbl_df","tbl","data.frame")
)

解决方法

我找到了解决方案。首先,使用 st_length() 计算原始线的长度并附加类似于以下数据表的原始坐标。构建表格后,以下公式将起作用。

df<-structure(list(x= "abcd",surf_long = 569270.67464245,surf_lat = 645729.112942885,bh_long = 569667.630944828,bh_lat = 645187.374426766,length = 671.606228265491),row.names = c(NA,-1L),groups = structure(list(x= "abcd",.rows = structure(list(
    1L),ptype = integer(0),class = c("vctrs_list_of","vctrs_vctr","list"))),row.names = 1L,class = c("tbl_df","tbl","data.frame"
),.drop = TRUE),class = c("grouped_df","tbl_df","data.frame"
))

现在我们可以按比例增加线长X距离。

df<- df%>%mutate(surf_lat_ext=surf_lat-(bh_lat-surf_lat)*1250/length,surf_long_ext=surf_long-(bh_long-surf_long)*1250/length,bh_lat_ext=bh_lat+(bh_lat-surf_lat)*1250/length,bh_long_ext=bh_long+(bh_long-surf_long)*1250/length)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。