计算路线匹配python

#!/usr/bin/env python
# -*- coding: utf-8 -*-

#@author shaoshuai

import sys
import os
import traceback
import logging
import re
from osgeo import ogr
import common_logging

logger = logging.getLogger()

class CommonLine(object):
    """
    CommonLine 用来记录线路的轨迹,可以扩充轨迹宽度变成面,查看点是否在面里
    """
    def __init__(self, buffer_size = 1):
        """ 初始化, mutil_line:记录线路  mutil_buffer_line:记录扩充后的面"""
        self.mutil_line = ogr.Geometry(ogr.wkbMultiLineString)
        self.mutil_buffer_line = self.mutil_line.Buffer(buffer_size)
        self.buffer_size = buffer_size


    def add_line(self, cm_start, cm_end):
        """添加线路,更新数据"""
        line = ogr.Geometry(ogr.wkbLineString)
        line.AddPoint(cm_start[0], cm_start[1])
        line.AddPoint(cm_end[0], cm_end[1])
        self.mutil_line.AddGeometry(line)
        self.mutil_buffer_line = self.mutil_line.Buffer(self.buffer_size)


    def set_buffer_size(self, buffer_size):
        """扩展面大小,注意是2倍的扩展"""
        self.mutil_buffer_line = self.mutil_line.Buffer(buffer_size)
        self.buffer_size = buffer_size


    def get_buffer_size(self):
        return self.buffer_size;


    def line_contains_point(self, cm_point):
        point = ogr.Geometry(ogr.wkbPoint)
        point.AddPoint(cm_point[0], cm_point[1])
        return self.mutil_line.Contains(point)
        

    def buffer_contians_point(self, cm_point):
        """判断点是否在面中"""
        point = ogr.Geometry(ogr.wkbPoint)
        point.AddPoint(cm_point[0], cm_point[1])
        return self.mutil_buffer_line.Contains(point)


    def get_area(self):
        return self.mutil_buffer_line.GetArea()


if __name__ == '__main__':
    list_point = [(1, 1), (2, 2), (3, 3)]
    common_line = CommonLine()
    for i in range(len(list_point) - 1):
        common_line.add_line(list_point[i], list_point[i + 1])
   
    print common_line.get_area()
    list_test_point = [(1, 1), (3, 3), (0, 0), (4, 4), (0.5, 0.5), (2, 1)]
    list_test_res = ["true", "true", "false", "false", "true", "true"]

    for (point, hope_res) in zip(list_test_point, list_test_res):
        res = common_line.buffer_contians_point(point)
        print "res:%s, hope:%s" % (res, hope_res)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值