zoukankan      html  css  js  c++  java
  • 两点截取线【shapely】【clipline】

    from shapely.geometry import Point, LineString
    from shapely.ops import snap, split, nearest_points
    def clipLine(ls, p1, p2):
        p1 = nearest_points(ls, p1)[0]
        geom = snap(ls, p1, 1)
        parts = split(geom, p1)
        if len(parts) == 1:
            fp = parts[0]
        else:
            fp = parts[0] if parts[0].distance(p2) < parts[1].distance(p2) else parts[1]
    
        p2 = nearest_points(fp, p2)[0]
        geom = snap(fp, p2, 0.1)
        parts = split(geom, p2)
    
        if len(parts) == 1:
            res = parts[0]
        else:
            res = parts[0] if parts[0].distance(p1) < parts[1].distance(p1) else parts[1]
        return res
    
    
    if __name__ == '__main__':
    
        ls = LineString([(0, 0), (5, 5)])
        p1 = Point((1, 1))
        p2 = Point([3, 3])
        res = clipLine(ls, p1, p2)
        print(res.wkt) # LINESTRING (1 1, 3 3)
  • 相关阅读:
    [HDU 2089]不要62
    [WC 2011]Xor
    [BJOI 2011]元素
    [NOIp 2014]解方程
    [UVa 1326]Jurassic Remains
    [BZOJ 2152]聪聪可可
    [IOI 2011]Race
    [测试题]打地鼠
    [POJ 2828]Buy Tickets
    [测试题]gene
  • 原文地址:https://www.cnblogs.com/ddzhen/p/15221621.html
Copyright © 2011-2022 走看看