Пример #1
0
int doTestAndDie() {
	long x,y;
	float lat, lon,lat2,lon2;
	int lat_sign, lat_deg, lat_min;
	int lon_sign, lon_deg, lon_min;

	lat = 42.22;
	lon = -8.65;

	y = lat2y(lat);
	x = lon2x(lon);

	lat_sign=lat<0?1:0;
	lat_deg = lat_sign?-lat:lat;
	lat_min = GPS_ENCODE_LOCMIN(lat);


	lon_sign=lon<0?1:0;
	lon_deg = lon_sign?-lon:-lon;
	lon_min = GPS_ENCODE_LOCMIN(lon);

	lat2 = GPS_DECODE_LOC(lat_sign, lat_deg, lat_min);
	lon2 = GPS_DECODE_LOC(lon_sign, lon_deg, lon_min);

	printf("Test:\n\t Lat: %f\tLon:%f\n"
		  "\t Lat: %d %d %d \n"
		  "\t Lon: %d \%d \%d \n"
		  "\t Lat2: %f\tLon2: %f\n",
		  lat,lon,lat_sign,lat_deg,lat_min,
		  lon_sign, lon_deg, lon_min,lat2,lon2);


	exit(0);

}
Пример #2
0
static VALUE tile_for_point(VALUE self, VALUE lat, VALUE lon)
{
   unsigned int x = lon2x(NUM2DBL(lon));
   unsigned int y = lat2y(NUM2DBL(lat));

   return UINT2NUM(xy2tile(x, y));
}
Пример #3
0
Datum
tile_for_point(PG_FUNCTION_ARGS)
{
  double lat = PG_GETARG_INT32(0) / 10000000.0;
  double lon = PG_GETARG_INT32(1) / 10000000.0;

  PG_RETURN_INT64(xy2tile(lon2x(lon), lat2y(lat)));
}
Пример #4
0
static VALUE iterate_tiles_for_area(VALUE self, VALUE bbox)
{
   unsigned int minx = lon2x(NUM2DBL(rb_iv_get(bbox, "@min_lon")));
   unsigned int maxx = lon2x(NUM2DBL(rb_iv_get(bbox, "@max_lon")));
   unsigned int miny = lat2y(NUM2DBL(rb_iv_get(bbox, "@min_lat")));
   unsigned int maxy = lat2y(NUM2DBL(rb_iv_get(bbox, "@max_lat")));
   tilelist_t   tl = tilelist_for_area(minx, miny, maxx, maxy);

   if (tl.tilec > 0)
   {
      unsigned int first;
      unsigned int last;
      unsigned int t;
      VALUE        a = rb_ary_new();

      qsort(tl.tilev, tl.tilec, sizeof(unsigned int), tile_compare);

      first = last = tl.tilev[0];

      for (t = 1; t < tl.tilec; t++)
      {
         unsigned int tile = tl.tilev[t];

         if (tile == last + 1)
         {
            last = tile;
         }
         else
         {
            rb_ary_store(a, 0, UINT2NUM(first));
            rb_ary_store(a, 1, UINT2NUM(last));
            rb_yield(a);

            first = last = tile;
         }
      }

      rb_ary_store(a, 0, UINT2NUM(first));
      rb_ary_store(a, 1, UINT2NUM(last));
      rb_yield(a);
   }

   free(tl.tilev);

   return Qnil;
}
Пример #5
0
static VALUE tiles_for_area(VALUE self, VALUE bbox)
{
   unsigned int minx = lon2x(NUM2DBL(rb_iv_get(bbox, "@min_lon")));
   unsigned int maxx = lon2x(NUM2DBL(rb_iv_get(bbox, "@max_lon")));
   unsigned int miny = lat2y(NUM2DBL(rb_iv_get(bbox, "@min_lat")));
   unsigned int maxy = lat2y(NUM2DBL(rb_iv_get(bbox, "@max_lat")));
   tilelist_t   tl = tilelist_for_area(minx, miny, maxx, maxy);
   VALUE        tiles = rb_ary_new();
   unsigned int t;

   for (t = 0; t < tl.tilec; t++)
   {
      rb_ary_push(tiles, UINT2NUM(tl.tilev[tl.tilec]));
   }

   free(tl.tilev);

   return tiles;
}
Пример #6
0
int runSimulator(char *ip, int port) {

	int bear;
	int knots;
	int mps=0;
	int myTime =0;
	int lapse=defaultLapse;
	long x, y, d;
	float lat, lon;
	frm_cmd_gps_t gps;
	char buff[TRANS_MAX_BUFF_SIZE];
	size_t transLen;
	int seq =0;
	int sckt;
	struct sockaddr_in server;

	// INIT SOCKET
	printf("Incializando...\n");
	memset(&server,0,sizeof(server));

	sckt= socket(AF_INET,SOCK_DGRAM,0);

	if (sckt<0) {
			die("Error en la creacion del socket");
	}

	server.sin_family = AF_INET;

	server.sin_addr.s_addr = inet_addr(ip);
	server.sin_port = htons(port);



	y = lat2y(42.22);
	x = lon2x(-8.65);
	printf("Empezando simulacion...(lapso=%ds)\n\n",lapse);

	while (true) {

		if (myTime<=0) {
			myTime = rnd1(30);
			bear = rnd0(359);
			mps  = rnd1(MAX_MPS);
		}

		d = mps * lapse;

		// Ojo origen de rumbo PI
		y += round( d * cos(bear * DEG_RAD));
		x += round( d * sin(bear * DEG_RAD));

		lat = y2lat(y);
		lon = x2lon(x);
		knots = mps * MPS_TO_KNOTS;

//		gps.cmd = 0x11;
//		gps.len =0;
//		gps.seq_l= seq++;
//		gps.seq_s=0;
//		gps.bearing = GPS_ENCODE_BEARING(bear);
//		gps.knots = knots;
//		gps.lat_sign = lat<0?1:0;
//		gps.lat_deg = gps.lat_sign?-lat:lat;
//		gps.lat_min =htons(GPS_ENCODE_LOCMIN(lat));
//		gps.lon_sign = lon<0?1:0;
//		gps.lon_deg = gps.lon_sign?-lon:lon;
//		gps.lon_min = htons(GPS_ENCODE_LOCMIN(lon));
//
//		gps.fix = 1;
//		gps.hdop = rnd1(20);
//		gps.time.epoch = htonl(time(NULL));

		int offset=0;
		transLen = sizeof(buff);

		frame_encode_gps(seq++,bear,knots,lat,lon,1,rnd1(20),0,buff,&transLen);

		offset +=transLen;

		if (addCnxFrame) {

			transLen = sizeof(buff) - offset;
			frame_encode_cnx("1234567890",0,1,0,buff+offset,&transLen);
			offset +=transLen;

		}

		transLen = sizeof(buff);

		if ( frame_encode_transport(1,NULL,offset,buff,&transLen) ) {

//			if (frame_test_transport(buff,transLen)) {
//				printf("Trama de transporte verificada\n");
//			}

			printf("Enviando: %d lat=%f lon=%f bear=%d knots=%d time=%d\n",seq,
					lat,lon,bear,knots,ntohl(gps.time.epoch));

			sendto(sckt,buff,transLen,0,(struct sockaddr *)&server,sizeof(server));

		}

		myTime -=lapse;
		sleep(lapse);
	}

	close(sckt);
	return 0;

}