⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 position.c

📁 通过车载终端采集GPS数据
💻 C
字号:
#include <math.h>
#include "string.h"
#include "global.h"
#include "gps.h"
#include "position.h"
#include "commoninterface.h"
#include <stdio.h>
#include "16c554.h"

typedef unsigned char uchar;
typedef unsigned int  uint;
typedef unsigned long ulong;

#define K1 18                               /*赤道周长按4万公里计算,纬度1个基本单位(1分/1万)对应的弧长,即系数,单位为厘米*/
#define K2 16                               /*地球的平均赤道半径按6738公里算,南京地区经度1个基本单位(1分/1万)对应弧长16.6厘米,
                                            半径按6366公里(周长4万公里)计算,南京地区对应弧长15.7厘米*/

#define MANUAL                  0           /*手动报站*/
#define IN_LINE                 255         /*在线路上*/
#define DECLIVITY               130         /*下坡*/
#define SWERVE                  131         /*转弯*/
#define REFERENCE_POINT         132         /*"参考点"属性*/
#define CHANGE_DIRECTION        133         /*改变方向返回值*/  
 
#define INVALID_TIMES           60          /*GPS无效次数*/
#define BEYOND_DISTANCE         200         /*当前位置到相邻两站距离之和大于两站之间距离120米,认为进入unlock状态*/
#define UNLOCK_TO_LOCK_DIS      100         /*满足失锁状态到锁定转换的距离*///这两个值需要重新设置!!!!

#define LOCK                    1           /*设置转换开关*/
#define UNLOCK                  0           /*设置转换开关*/


struct VOICE_INFO_STRUCT voiceInfo;


static uchar k;                             /*第k个站点*/

POSITIONINFO positionInfo[204];
long length2point[204];
char positionMode[128];
unsigned char firstStation, lastStation;

char inFlag[64],outFlag[64];
extern xdata BUS_INFO busInfo;//线路当前信息



ulong get_two_station_distance(uchar m, uchar n);





/*****************线路位置数据点*************************/
#define MAX_STATIONID_SIZE 4//站台ID的空间
typedef struct _position_entry
{
    long longitude;
    long latitude;
}POSITION_ENTRY;

typedef struct _station_entry
{
    POSITION_ENTRY position;
    unsigned char attribute;//属性
    unsigned char speed;//速度
    char id[MAX_STATIONID_SIZE];//站台ID号
}STATION_ENTRY;

unsigned char get_cur_position(void)
{
    return k;
}

void position_set(unsigned char value)
{

    k = value;
    voiceInfo.curState = value;

    voiceInfo.arriveFlag = 0;
    voiceInfo.pointChange = 1;
}


void clear_sound_flag(void)
{
    voiceInfo.arriveFlag = 0;

    memset(inFlag, 0, sizeof(inFlag));
    memset(outFlag, 0, sizeof(outFlag));
    //inFlag[firstStation-1] = 1;
    outFlag[lastStation-1] = 1;
}

uchar position_sound_record(uchar value)
{
    uchar tmp;

    if( (value < 0x40) && (value!=0) )
    {
        tmp = value - 1;
        if( inFlag[tmp] )
            return IN_LINE;
        else
        {
            inFlag[tmp] = 1;
            busInfo.stationState = 1;
            return value;
        }
    }
    else if( value < 0x80 )
    {
        tmp = value - 0x40 - 1;
        if( (outFlag[tmp]) || (tmp>0x7F) )
            return IN_LINE;
        else
        {
            outFlag[tmp] = 1;
            busInfo.stationState = 2;
            return value;
        }

    }
}


//设置当前模式下上下行的终点站
static void set_cur_laststation(char* pBuf)
{
    *pBuf = busInfo.lastStation[busInfo.direction];
    if (BUS_BACKWARD == busInfo.direction)
        *pBuf -= 0x40;
/*    unsigned char i;
    

    if(busInfo.direction==0)
    {
        for (i=63; i>=0; i--)
        {
            if (1 == positionMode[i])
            {
                return(i+1);
            }
        }
    }
    else
    {
        for (i=127; i>=64; i--)
        {
            if (1 == positionMode[i])
            {
                return(i+1-0x40);
            }
        }
    }*/
}

//设置当前模式下上下行的起点站
static void set_cur_firststation(char* pBuf)
{
   
    *pBuf = busInfo.firstStation[busInfo.direction];
    if (BUS_BACKWARD == busInfo.direction)
        *pBuf -= 0x40;
/*    unsigned char  i;
    if(busInfo.direction==0)
    {
        for (i=0; i<=63; i++)
        {
            if (1 == positionMode[i])
            {
                return(i+1);
            }
        }
    }
    else
    {
        for (i=64; i<=127; i++)
        {
            if (1 == positionMode[i])
            {
                return(i+1-0x40);
            }
        }
    }*/



}

void position_setstation()
{
    set_cur_laststation(&lastStation);
    set_cur_firststation(&firstStation);
}

/************************************************************************
*
*状态:UNLOCK状态下
*输入:当前秒的位置、第j个站点
*输出:当前秒的位置到第j个站点位置的距离
*函数功能:求当前秒的位置到第j个站点位置的距离

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -