#!/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)