霸气侧漏 发表于 2015-6-28 14:34:15

请推荐好的距离检测算法

本帖最后由 霸气侧漏 于 2015-6-28 15:38 编辑

最近在研究GPS想弄个GPS报站,弄了个代码,不大好,求推荐个可以用的距离检测代码

zyw19987 发表于 2015-6-28 16:01:10

报站还需要测距离?

霸气侧漏 发表于 2015-6-28 16:46:55

zyw19987 发表于 2015-6-28 16:01
报站还需要测距离?

肯定要检测是否到站,对吧

zyw19987 发表于 2015-6-28 17:20:42

呵呵,思路错了。

霸气侧漏 发表于 2015-6-28 17:37:58

zyw19987 发表于 2015-6-28 17:20
呵呵,思路错了。

哥们有好的思路,说下被

zyw19987 发表于 2015-6-28 17:43:17

本帖最后由 zyw19987 于 2015-6-28 18:08 编辑

霸气侧漏 发表于 2015-6-28 17:37
哥们有好的思路,说下被

以目标点经纬坐标为圆点画圆。
长期对目标点坐标进行修正


简单点就画个正方形吧。
这样不需要测距了吧。

霸气侧漏 发表于 2015-6-28 19:22:51

zyw19987 发表于 2015-6-28 17:43
以目标点经纬坐标为圆点画圆。
长期对目标点坐标进行修正



那怎么知道在圆圈内?不还是要靠距离检测。画圆还有其他的办法没

brahen 发表于 2015-6-28 21:11:53

霸气侧漏 发表于 2015-6-28 19:22
那怎么知道在圆圈内?不还是要靠距离检测。画圆还有其他的办法没

哥们别逗,在圆内都算不出来?
直接算距离就行,精确度不需要太高。

霸气侧漏 发表于 2015-6-28 21:49:09

brahen 发表于 2015-6-28 21:11
哥们别逗,在圆内都算不出来?
直接算距离就行,精确度不需要太高。

你的签名很有个性

zyw19987 发表于 2015-6-28 23:02:29

霸气侧漏 发表于 2015-6-28 19:22
那怎么知道在圆圈内?不还是要靠距离检测。画圆还有其他的办法没

化简为比较xy坐标了啊,不用算长度了啊

霸气侧漏 发表于 2015-6-28 23:43:30

zyw19987 发表于 2015-6-28 23:02
化简为比较xy坐标了啊,不用算长度了啊

因为gps有漂移,不是说经纬度一模一样,是在一个区间内

zyw19987 发表于 2015-6-29 00:52:12

霸气侧漏 发表于 2015-6-28 23:43
因为gps有漂移,不是说经纬度一模一样,是在一个区间内


你画成XY坐标
xy坐标都满足误差范围就可以啦

到目标点是长期修正的

霸气侧漏 发表于 2015-6-29 07:03:45

本帖最后由 霸气侧漏 于 2015-6-29 07:18 编辑

zyw19987 发表于 2015-6-29 00:52

你画成XY坐标
xy坐标都满足误差范围就可以啦


哥们,你的意思是,(x,y),(x1,y1)2点
if(    (x-x1)<0.2&&(y-y10<0.2))成立就说明进站,是这样的意思么???

霸气侧漏 发表于 2015-6-29 07:05:47

本帖最后由 霸气侧漏 于 2015-6-29 07:18 编辑

哥们,你的意思是,(x,y),(x1,y1)2点
if(    (x-x1)<0.2&&(y-y10<0.2))成立就说明进站,是这样的意思么???

zyw19987 发表于 2015-6-29 07:44:10

霸气侧漏 发表于 2015-6-29 07:05
哥们,你的意思是,(x,y),(x1,y1)2点
if(    (x-x1)

意思是这样的,处理好特殊情况。
你觉得不行?

霸气侧漏 发表于 2015-6-29 07:55:29

zyw19987 发表于 2015-6-29 07:44
意思是这样的,处理好特殊情况。
你觉得不行?

思路不错,只是这个经纬度差值,去算距离不大好算

zyw19987 发表于 2015-6-29 12:47:54

霸气侧漏 发表于 2015-6-29 07:55
思路不错,只是这个经纬度差值,去算距离不大好算

论坛好像有高人开源过,而且还考虑了球面距离问题。你找找

霸气侧漏 发表于 2015-6-29 23:47:36

zyw19987 发表于 2015-6-29 12:47
论坛好像有高人开源过,而且还考虑了球面距离问题。你找找

没找到,有个
/**
******************************************************************************
* @file    GPS_App.c
* @authorDevLabs
* @version V0.1
* @date
* @brief
******************************************************************************
* @attention
*
* <br />Copyright 2013
* <br />http://www.DevLabs.cn
*
* <h2><center>&copy; COPYRIGHT 2013 DevLabs</center></h2>
******************************************************************************
*/


/* Includes ------------------------------------------------------------------*/
#include "GPS_App.h"

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/

//! @name WGS84椭球
//! @{
//! a = 6378137.0000000000;
//! b = 6356752.3142;
//! c = 6399593.6258;
//! _a = 1.0 / 298.257223563;
//! e2 = 0.0066943799013;
//! e2 = (a * a - b * b) / (a * a);
//! e_2 = 0.00673949674227;
//! e_2 = (a * a - b * b) / (b * b);
#define v0 (6.36744914585577e+006)
#define v1 (6.39959362580000e+006)
#define v2 (-2.15650202422767e+004)
#define v3 (1.09003037983916e+002)
#define v4 (-6.12188017458933e-001)
#define v5 (-3.21444799442298e+004)
#define v6 (1.35366946123277e+002)
#define v7 (-7.09481085293974e-001)
#define v8 (4.06137292124076e-003)
#define v9 (-4.16666666666667e-002)
#define v10 (2.50000000000000e-001)
#define v11 (2.52731128372009e-003)
#define v12 (7.57013608867423e-006)
#define v13 (1.38888888888889e-003)
#define v14 (-8.33333333333333e-002)
#define v15 (1.66666666666667e-001)
#define v16 (-1.66666666666667e-001)
#define v17 (3.33333333333333e-001)
#define v18 (1.12324945943115e-003)
#define v19 (8.33333333333333e-003)
#define v20 (-1.66666666666667e-001)
#define v21 (1.96742576567650e-001)
#define v22 (4.04369805395214e-003)
#define PI (3.1415926535898)
//! @}

/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
static BOOL init = FALSE;
static float distance = 0.0;

/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

/**
* @brief大地坐标->高斯平面坐标
*
* @paramB 纬度(单位度)
* @paramL 经度(单位度)
* @paramx x坐标(单位米)
* @paramy y坐标(单位米)
*/
void WGS84_to_cartesian(float B, float L, float *x, float *y)
{
    float l, l2, _N, w0, w1, w2, w3, w4, cosb, cosb2;

    l = L - ((int)L / 6 * 6 + 3); // 求经差

    B = B * PI / 180.0; // 转弧度
    l = l * PI / 180.0; // 转弧度
    l2 = l * l;

    cosb = cos(B);
    cosb2 = cosb * cosb;

    _N = v1 + (v2 + (v3 + v4 * cosb2) * cosb2) * cosb2;
    w0 = v5 + (v6 + (v7 + v8 * cosb2) * cosb2) * cosb2;
    w1 = v9 + (v10 + (v11 + v12 * cosb2) * cosb2) * cosb2;
    w2 = v13 + (v14 + v15 * cosb2) * cosb2;
    w3 = v16 + (v17 + v18 * cosb2) * cosb2;
    w4 = v19 + (v20 + (v21 + v22 * cosb2) * cosb2) * cosb2;

    *y = v0 * B + (w0 + (0.5 + (w1 + w2 * l2) * l2) * l2 * _N) * cosb * sin(B);
    *x = (1.0 + (w3 + w4 * l2) * l2) * l * _N * cosb;

    *x += 500000.0;
}

//! 清零记录的距离值(从当前点开始重新计算)
void dis_reset(void)
{
    distance = 0;
    init = FALSE;

    return;
}


//! 距离计算
void dis_calc_process(void)
{
    static float x0, y0;                // 前一次坐标值
    float len = 0.0;
    float x1, y1;                     // 当前坐标值
    float lat, lon;                     // 纬度,经度

    // 如果GPS未定位
    if (!GPS_get_state())
    {
      return;
    }

    // TODO
    // 即使定位偶尔也会出现经纬度为0的情况
    // if (..)
    // {
    // }
    lat = GPS_get_latitude();
    lon = GPS_get_longitude();
    // 坐标转换
    WGS84_to_cartesian(lat, lon, &x1, &y1);

    if (init)
    {
      len = (sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0)));
    }
    else
    {
      init = TRUE;
    }

    x0 = x1;
    y0 = y1;

    distance += len;

    return;
}



/**
* @brief获取从指定点开始的距离
*
* @return distance
*/
INT32U dis_get(void)
{
    return (INT32U)distance;
}




/******************* (C) COPYRIGHT 2013 DevLabs **********END OF FILE**********/

bonn_y 发表于 2015-6-30 09:39:29

电子围栏

霸气侧漏 发表于 2015-6-30 10:01:37

bonn_y 发表于 2015-6-30 09:39
电子围栏

什么意思???

sml009 发表于 2015-11-19 18:10:46

mark         
页: [1]
查看完整版本: 请推荐好的距离检测算法