用于定义地理围栏并查看点是否在其内部/外部的算法

时间:2012-06-01 18:41:07

标签: algorithm math geo point-in-polygon geofencing

我正在寻找一种算法,我可以创建地理围栏并检查设备是否正在进入/离开围栏。我已经看过多边形算法(光线投射和绕组数),但是有没有算法可以应用于圆形和任何不规则形状?重要的制约因素是时间效率。

谢谢。

5 个答案:

答案 0 :(得分:4)

以下是易于理解的c代码算法:

http://alienryderflex.com/polygon/

答案 1 :(得分:3)

好的圆圈很容易(至少如果你假设一个局部平坦的表面) - 只是距离一个点的绝对距离。

如果你需要速度,通常的方法是级联,首先检查一个圆,或者围绕点检查一个正方形,然后是凸多边形,然后在必要时检查更详细的多边形。

如何定义不规则形状 - 如果它不是多边形?

ps见How to test if a point is inside of a convex polygon in 2D integer coordinates?

答案 2 :(得分:1)

Winding Number Method

  

但最重要的是,出于几何正确性和效率原因,绕组数算法应始终是首选,以确定多边形中包含点。

答案 3 :(得分:1)

我找到了适用于python的解决方案。据我所知,这有效。

import numpy as np
import h5py

with open('test.h5', 'rb') as stream:
    with h5py.File(stream, 'r') as f:
        ds = f['data']
        assert ds.fletcher32, ('Dataset does not have Fletcher-32 checksums')
        checksums = np.zeros((ds.id.get_num_chunks(),), dtype=np.uint32)
        for i in range(checksums.size):
            chunk_info = ds.id.get_chunk_info(i)
            offset = chunk_info.byte_offset + chunk_info.size - 4
            stream.seek(offset, 0)
            checksums[i] = np.frombuffer(stream.read(4), dtype=np.uint32)[0]

谢谢!

答案 4 :(得分:0)

看看四叉树,空间索引,四叉树和r树。