GPS 연구 15
10384 단어 천공도android1.6GPS
개요
GPS를 이해하고 싶었습니다.
android1.6에서 천공도를 써 보았다.
사진
샘플 코드
package com.ohisamllc.ohiapp33;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.location.GpsSatellite;
import android.location.GpsStatus;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.location.GpsStatus.Listener;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TableLayout;
public class ohiapp33 extends Activity implements LocationListener, Listener
{
static final int NUM_SATS = 32;
public static final class GpsInfo
{
GpsInfo(int prn)
{
this.prn = prn;
this.name = "" + prn;
}
final int prn;
final String name;
long time = 0;
float azimuth;
float elev;
float snr;
boolean hasAl;
boolean hasEph;
boolean used;
long usedTime = 0;
RectF rect;
float textX;
float textY;
int colour;
}
private static final String TAG = "ohiapp33";
private static final String[] locationProviders = {
LocationManager.NETWORK_PROVIDER,
LocationManager.GPS_PROVIDER
};
private static final int[] COLOUR_PLOT = {
0xff00ffff,
0xff00ff00,
0xffffff00,
0xffff9000,
};
private static final int DATA_CACHE_TIME = 10 * 1000;
private LocationManager locationManager;
private GpsStatus gpsStatus = null;
public GpsInfo[] satCache;
private int numSats;
private final String msgOffline = "";
private rdView rdView;
@Override public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
rdView = new rdView(this);
setContentView(rdView);
satCache = new GpsInfo[NUM_SATS + 1];
for (int i = 1; i <= NUM_SATS; ++i) satCache[i] = new GpsInfo(i);
numSats = 0;
locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
for (String name : locationProviders)
{
LocationProvider prov = locationManager.getProvider(name);
if (prov != null)
{
locationManager.requestLocationUpdates(name, 60000, 0f, this);
if (name.equals(LocationManager.GPS_PROVIDER)) locationManager.addGpsStatusListener(this);
Location prime = locationManager.getLastKnownLocation(name);
if (prime != null) onLocationChanged(prime);
}
}
}
@Override public void onDestroy()
{
locationManager.removeUpdates(this);
locationManager.removeGpsStatusListener(this);
locationManager = null;
super.onDestroy();
}
public void onLocationChanged(Location loc)
{
synchronized (this)
{
if (loc.getProvider().equals(LocationManager.GPS_PROVIDER))
{
rdView.setloc(loc);
}
}
}
public void onProviderEnabled(String provider)
{
synchronized (this)
{
if (provider.equals(LocationManager.GPS_PROVIDER))
{
}
}
}
public void onProviderDisabled(String provider)
{
synchronized (this)
{
if (provider.equals(LocationManager.GPS_PROVIDER))
{
}
}
}
public void onStatusChanged(String provider, int status, Bundle extras)
{
synchronized (this)
{
String msg = null;
if (status == LocationProvider.OUT_OF_SERVICE)
{
msg = msgOffline;
}
if (provider.equals(LocationManager.GPS_PROVIDER))
{
}
}
}
public void onGpsStatusChanged(int event)
{
switch (event)
{
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
gpsStatus = locationManager.getGpsStatus(gpsStatus);
Iterable<GpsSatellite> sats = gpsStatus.getSatellites();
long time = System.currentTimeMillis();
for (GpsSatellite sat : sats)
{
int prn = sat.getPrn();
if (prn < 1 || prn > NUM_SATS) continue;
GpsInfo ginfo = satCache[prn];
ginfo.time = time;
ginfo.azimuth = sat.getAzimuth();
ginfo.elev = sat.getElevation();
ginfo.snr = sat.getSnr();
ginfo.hasAl = sat.hasAlmanac();
ginfo.hasEph = sat.hasEphemeris();
ginfo.used = sat.usedInFix();
}
numSats = 0;
for (int prn = 1; prn <= NUM_SATS; ++prn)
{
GpsInfo ginfo = satCache[prn];
if (time - ginfo.time > DATA_CACHE_TIME)
{
ginfo.time = 0;
ginfo.usedTime = 0;
}
else
{
if (ginfo.used) ginfo.usedTime = time;
else if (time - ginfo.usedTime <= DATA_CACHE_TIME) ginfo.used = true;
else ginfo.usedTime = 0;
int colour = ginfo.used ? 0 : ginfo.hasEph ? 1 : ginfo.hasAl ? 2 : 3;
ginfo.colour = COLOUR_PLOT[colour];
++numSats;
}
}
rdView.setInfo(satCache);
rdView.setflg(1);
rdView.invalidate();
break;
case GpsStatus.GPS_EVENT_STARTED:
case GpsStatus.GPS_EVENT_STOPPED:
case GpsStatus.GPS_EVENT_FIRST_FIX:
break;
}
}
}
class rdView extends View
{
static final int NUM_SATS = 32;
private ohiapp33.GpsInfo[] satCache;
private int flg = 0;
private Location loc;
private Calendar calen = Calendar.getInstance();
public rdView(Context context)
{
super(context);
}
public void setloc(Location loc)
{
this.loc = loc;
}
public void setInfo(ohiapp33.GpsInfo[] satCache)
{
this.satCache = satCache;
}
public void setflg(int flg)
{
this.flg = flg;
}
protected void onDraw(Canvas canvas)
{
Paint paint = new Paint();
paint.setColor(Color.WHITE);
paint.setStrokeWidth(2f);
paint.setStyle(Paint.Style.STROKE);
int centerX = this.getWidth() / 2;
int centerY = this.getHeight() / 2;
float maxRadius = (Math.min(this.getHeight(), this.getWidth()) - 20) / 2;
double[] elevations = new double[] {
0,
Math.PI / 2,
Math.PI / 3,
Math.PI / 6
};
for (double elevation : elevations)
{
double radius = (double) Math.cos(elevation) * maxRadius;
canvas.drawCircle((float) centerX, (float) centerY, (float) radius, paint);
}
canvas.drawLine(centerX - maxRadius, centerY, centerX + maxRadius, centerY, paint);
canvas.drawLine(centerX, centerY - maxRadius, centerX, centerY + maxRadius, paint);
canvas.drawText("N", centerX - 5, centerY - maxRadius, paint);
canvas.drawText("S", centerX - 5, centerY + maxRadius + 10, paint);
canvas.drawText("E", centerX + maxRadius + 5, centerY + 5, paint);
canvas.drawText("W", centerX - maxRadius - 5, centerY + 5, paint);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setTextSize(20);
if (flg == 1)
{
for (int prn = 1; prn <= NUM_SATS; prn++)
{
ohiapp33.GpsInfo ginfo = this.satCache[prn];
if (ginfo.azimuth != 0)
{
double h = (double) Math.cos((ginfo.elev * Math.PI) / 180) * maxRadius;
int satX = (int) (centerX + h * Math.sin((ginfo.azimuth * Math.PI) / 180));
int satY = (int) (centerY - h * Math.cos((ginfo.azimuth * Math.PI) / 180));
paint.setColor(ginfo.colour);
canvas.drawCircle(satX, satY, ginfo.snr / 3, paint);
}
}
for (int prn = 1; prn <= NUM_SATS; prn++)
{
ohiapp33.GpsInfo ginfo = this.satCache[prn];
if (ginfo.azimuth != 0)
{
double h = (double) Math.cos((ginfo.elev * Math.PI) / 180) * maxRadius;
int satX = (int) (centerX + h * Math.sin((ginfo.azimuth * Math.PI) / 180));
int satY = (int) (centerY - h * Math.cos((ginfo.azimuth * Math.PI) / 180));
paint.setColor(Color.RED);
canvas.drawText(ginfo.name, satX + 5, satY + 5, paint);
}
}
if (loc != null)
{
paint.setColor(Color.YELLOW);
String p;
p = "Lat " + new Float(loc.getLatitude()).toString();
canvas.drawText(p, 10, 40, paint);
p = "Lon " + new Float(loc.getLongitude()).toString();
canvas.drawText(p, 170, 40, paint);
p = "Alt " + new Float(loc.getAltitude()).toString() + "m";
canvas.drawText(p, 10, 390, paint);
if (loc.getTime() > 0)
{
calen.setTimeInMillis(loc.getTime());
SimpleDateFormat a = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
canvas.drawText(a.format(calen.getTime()), 10, 420, paint);
}
}
}
}
}
이상.
Reference
이 문제에 관하여(GPS 연구 15), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ohisama@github/items/ee4e9bd50d89319ae22c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
샘플 코드
package com.ohisamllc.ohiapp33;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.location.GpsSatellite;
import android.location.GpsStatus;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.location.GpsStatus.Listener;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TableLayout;
public class ohiapp33 extends Activity implements LocationListener, Listener
{
static final int NUM_SATS = 32;
public static final class GpsInfo
{
GpsInfo(int prn)
{
this.prn = prn;
this.name = "" + prn;
}
final int prn;
final String name;
long time = 0;
float azimuth;
float elev;
float snr;
boolean hasAl;
boolean hasEph;
boolean used;
long usedTime = 0;
RectF rect;
float textX;
float textY;
int colour;
}
private static final String TAG = "ohiapp33";
private static final String[] locationProviders = {
LocationManager.NETWORK_PROVIDER,
LocationManager.GPS_PROVIDER
};
private static final int[] COLOUR_PLOT = {
0xff00ffff,
0xff00ff00,
0xffffff00,
0xffff9000,
};
private static final int DATA_CACHE_TIME = 10 * 1000;
private LocationManager locationManager;
private GpsStatus gpsStatus = null;
public GpsInfo[] satCache;
private int numSats;
private final String msgOffline = "";
private rdView rdView;
@Override public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
rdView = new rdView(this);
setContentView(rdView);
satCache = new GpsInfo[NUM_SATS + 1];
for (int i = 1; i <= NUM_SATS; ++i) satCache[i] = new GpsInfo(i);
numSats = 0;
locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
for (String name : locationProviders)
{
LocationProvider prov = locationManager.getProvider(name);
if (prov != null)
{
locationManager.requestLocationUpdates(name, 60000, 0f, this);
if (name.equals(LocationManager.GPS_PROVIDER)) locationManager.addGpsStatusListener(this);
Location prime = locationManager.getLastKnownLocation(name);
if (prime != null) onLocationChanged(prime);
}
}
}
@Override public void onDestroy()
{
locationManager.removeUpdates(this);
locationManager.removeGpsStatusListener(this);
locationManager = null;
super.onDestroy();
}
public void onLocationChanged(Location loc)
{
synchronized (this)
{
if (loc.getProvider().equals(LocationManager.GPS_PROVIDER))
{
rdView.setloc(loc);
}
}
}
public void onProviderEnabled(String provider)
{
synchronized (this)
{
if (provider.equals(LocationManager.GPS_PROVIDER))
{
}
}
}
public void onProviderDisabled(String provider)
{
synchronized (this)
{
if (provider.equals(LocationManager.GPS_PROVIDER))
{
}
}
}
public void onStatusChanged(String provider, int status, Bundle extras)
{
synchronized (this)
{
String msg = null;
if (status == LocationProvider.OUT_OF_SERVICE)
{
msg = msgOffline;
}
if (provider.equals(LocationManager.GPS_PROVIDER))
{
}
}
}
public void onGpsStatusChanged(int event)
{
switch (event)
{
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
gpsStatus = locationManager.getGpsStatus(gpsStatus);
Iterable<GpsSatellite> sats = gpsStatus.getSatellites();
long time = System.currentTimeMillis();
for (GpsSatellite sat : sats)
{
int prn = sat.getPrn();
if (prn < 1 || prn > NUM_SATS) continue;
GpsInfo ginfo = satCache[prn];
ginfo.time = time;
ginfo.azimuth = sat.getAzimuth();
ginfo.elev = sat.getElevation();
ginfo.snr = sat.getSnr();
ginfo.hasAl = sat.hasAlmanac();
ginfo.hasEph = sat.hasEphemeris();
ginfo.used = sat.usedInFix();
}
numSats = 0;
for (int prn = 1; prn <= NUM_SATS; ++prn)
{
GpsInfo ginfo = satCache[prn];
if (time - ginfo.time > DATA_CACHE_TIME)
{
ginfo.time = 0;
ginfo.usedTime = 0;
}
else
{
if (ginfo.used) ginfo.usedTime = time;
else if (time - ginfo.usedTime <= DATA_CACHE_TIME) ginfo.used = true;
else ginfo.usedTime = 0;
int colour = ginfo.used ? 0 : ginfo.hasEph ? 1 : ginfo.hasAl ? 2 : 3;
ginfo.colour = COLOUR_PLOT[colour];
++numSats;
}
}
rdView.setInfo(satCache);
rdView.setflg(1);
rdView.invalidate();
break;
case GpsStatus.GPS_EVENT_STARTED:
case GpsStatus.GPS_EVENT_STOPPED:
case GpsStatus.GPS_EVENT_FIRST_FIX:
break;
}
}
}
class rdView extends View
{
static final int NUM_SATS = 32;
private ohiapp33.GpsInfo[] satCache;
private int flg = 0;
private Location loc;
private Calendar calen = Calendar.getInstance();
public rdView(Context context)
{
super(context);
}
public void setloc(Location loc)
{
this.loc = loc;
}
public void setInfo(ohiapp33.GpsInfo[] satCache)
{
this.satCache = satCache;
}
public void setflg(int flg)
{
this.flg = flg;
}
protected void onDraw(Canvas canvas)
{
Paint paint = new Paint();
paint.setColor(Color.WHITE);
paint.setStrokeWidth(2f);
paint.setStyle(Paint.Style.STROKE);
int centerX = this.getWidth() / 2;
int centerY = this.getHeight() / 2;
float maxRadius = (Math.min(this.getHeight(), this.getWidth()) - 20) / 2;
double[] elevations = new double[] {
0,
Math.PI / 2,
Math.PI / 3,
Math.PI / 6
};
for (double elevation : elevations)
{
double radius = (double) Math.cos(elevation) * maxRadius;
canvas.drawCircle((float) centerX, (float) centerY, (float) radius, paint);
}
canvas.drawLine(centerX - maxRadius, centerY, centerX + maxRadius, centerY, paint);
canvas.drawLine(centerX, centerY - maxRadius, centerX, centerY + maxRadius, paint);
canvas.drawText("N", centerX - 5, centerY - maxRadius, paint);
canvas.drawText("S", centerX - 5, centerY + maxRadius + 10, paint);
canvas.drawText("E", centerX + maxRadius + 5, centerY + 5, paint);
canvas.drawText("W", centerX - maxRadius - 5, centerY + 5, paint);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setTextSize(20);
if (flg == 1)
{
for (int prn = 1; prn <= NUM_SATS; prn++)
{
ohiapp33.GpsInfo ginfo = this.satCache[prn];
if (ginfo.azimuth != 0)
{
double h = (double) Math.cos((ginfo.elev * Math.PI) / 180) * maxRadius;
int satX = (int) (centerX + h * Math.sin((ginfo.azimuth * Math.PI) / 180));
int satY = (int) (centerY - h * Math.cos((ginfo.azimuth * Math.PI) / 180));
paint.setColor(ginfo.colour);
canvas.drawCircle(satX, satY, ginfo.snr / 3, paint);
}
}
for (int prn = 1; prn <= NUM_SATS; prn++)
{
ohiapp33.GpsInfo ginfo = this.satCache[prn];
if (ginfo.azimuth != 0)
{
double h = (double) Math.cos((ginfo.elev * Math.PI) / 180) * maxRadius;
int satX = (int) (centerX + h * Math.sin((ginfo.azimuth * Math.PI) / 180));
int satY = (int) (centerY - h * Math.cos((ginfo.azimuth * Math.PI) / 180));
paint.setColor(Color.RED);
canvas.drawText(ginfo.name, satX + 5, satY + 5, paint);
}
}
if (loc != null)
{
paint.setColor(Color.YELLOW);
String p;
p = "Lat " + new Float(loc.getLatitude()).toString();
canvas.drawText(p, 10, 40, paint);
p = "Lon " + new Float(loc.getLongitude()).toString();
canvas.drawText(p, 170, 40, paint);
p = "Alt " + new Float(loc.getAltitude()).toString() + "m";
canvas.drawText(p, 10, 390, paint);
if (loc.getTime() > 0)
{
calen.setTimeInMillis(loc.getTime());
SimpleDateFormat a = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
canvas.drawText(a.format(calen.getTime()), 10, 420, paint);
}
}
}
}
}
이상.
Reference
이 문제에 관하여(GPS 연구 15), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ohisama@github/items/ee4e9bd50d89319ae22c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
package com.ohisamllc.ohiapp33;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.location.GpsSatellite;
import android.location.GpsStatus;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.location.GpsStatus.Listener;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TableLayout;
public class ohiapp33 extends Activity implements LocationListener, Listener
{
static final int NUM_SATS = 32;
public static final class GpsInfo
{
GpsInfo(int prn)
{
this.prn = prn;
this.name = "" + prn;
}
final int prn;
final String name;
long time = 0;
float azimuth;
float elev;
float snr;
boolean hasAl;
boolean hasEph;
boolean used;
long usedTime = 0;
RectF rect;
float textX;
float textY;
int colour;
}
private static final String TAG = "ohiapp33";
private static final String[] locationProviders = {
LocationManager.NETWORK_PROVIDER,
LocationManager.GPS_PROVIDER
};
private static final int[] COLOUR_PLOT = {
0xff00ffff,
0xff00ff00,
0xffffff00,
0xffff9000,
};
private static final int DATA_CACHE_TIME = 10 * 1000;
private LocationManager locationManager;
private GpsStatus gpsStatus = null;
public GpsInfo[] satCache;
private int numSats;
private final String msgOffline = "";
private rdView rdView;
@Override public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
rdView = new rdView(this);
setContentView(rdView);
satCache = new GpsInfo[NUM_SATS + 1];
for (int i = 1; i <= NUM_SATS; ++i) satCache[i] = new GpsInfo(i);
numSats = 0;
locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
for (String name : locationProviders)
{
LocationProvider prov = locationManager.getProvider(name);
if (prov != null)
{
locationManager.requestLocationUpdates(name, 60000, 0f, this);
if (name.equals(LocationManager.GPS_PROVIDER)) locationManager.addGpsStatusListener(this);
Location prime = locationManager.getLastKnownLocation(name);
if (prime != null) onLocationChanged(prime);
}
}
}
@Override public void onDestroy()
{
locationManager.removeUpdates(this);
locationManager.removeGpsStatusListener(this);
locationManager = null;
super.onDestroy();
}
public void onLocationChanged(Location loc)
{
synchronized (this)
{
if (loc.getProvider().equals(LocationManager.GPS_PROVIDER))
{
rdView.setloc(loc);
}
}
}
public void onProviderEnabled(String provider)
{
synchronized (this)
{
if (provider.equals(LocationManager.GPS_PROVIDER))
{
}
}
}
public void onProviderDisabled(String provider)
{
synchronized (this)
{
if (provider.equals(LocationManager.GPS_PROVIDER))
{
}
}
}
public void onStatusChanged(String provider, int status, Bundle extras)
{
synchronized (this)
{
String msg = null;
if (status == LocationProvider.OUT_OF_SERVICE)
{
msg = msgOffline;
}
if (provider.equals(LocationManager.GPS_PROVIDER))
{
}
}
}
public void onGpsStatusChanged(int event)
{
switch (event)
{
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
gpsStatus = locationManager.getGpsStatus(gpsStatus);
Iterable<GpsSatellite> sats = gpsStatus.getSatellites();
long time = System.currentTimeMillis();
for (GpsSatellite sat : sats)
{
int prn = sat.getPrn();
if (prn < 1 || prn > NUM_SATS) continue;
GpsInfo ginfo = satCache[prn];
ginfo.time = time;
ginfo.azimuth = sat.getAzimuth();
ginfo.elev = sat.getElevation();
ginfo.snr = sat.getSnr();
ginfo.hasAl = sat.hasAlmanac();
ginfo.hasEph = sat.hasEphemeris();
ginfo.used = sat.usedInFix();
}
numSats = 0;
for (int prn = 1; prn <= NUM_SATS; ++prn)
{
GpsInfo ginfo = satCache[prn];
if (time - ginfo.time > DATA_CACHE_TIME)
{
ginfo.time = 0;
ginfo.usedTime = 0;
}
else
{
if (ginfo.used) ginfo.usedTime = time;
else if (time - ginfo.usedTime <= DATA_CACHE_TIME) ginfo.used = true;
else ginfo.usedTime = 0;
int colour = ginfo.used ? 0 : ginfo.hasEph ? 1 : ginfo.hasAl ? 2 : 3;
ginfo.colour = COLOUR_PLOT[colour];
++numSats;
}
}
rdView.setInfo(satCache);
rdView.setflg(1);
rdView.invalidate();
break;
case GpsStatus.GPS_EVENT_STARTED:
case GpsStatus.GPS_EVENT_STOPPED:
case GpsStatus.GPS_EVENT_FIRST_FIX:
break;
}
}
}
class rdView extends View
{
static final int NUM_SATS = 32;
private ohiapp33.GpsInfo[] satCache;
private int flg = 0;
private Location loc;
private Calendar calen = Calendar.getInstance();
public rdView(Context context)
{
super(context);
}
public void setloc(Location loc)
{
this.loc = loc;
}
public void setInfo(ohiapp33.GpsInfo[] satCache)
{
this.satCache = satCache;
}
public void setflg(int flg)
{
this.flg = flg;
}
protected void onDraw(Canvas canvas)
{
Paint paint = new Paint();
paint.setColor(Color.WHITE);
paint.setStrokeWidth(2f);
paint.setStyle(Paint.Style.STROKE);
int centerX = this.getWidth() / 2;
int centerY = this.getHeight() / 2;
float maxRadius = (Math.min(this.getHeight(), this.getWidth()) - 20) / 2;
double[] elevations = new double[] {
0,
Math.PI / 2,
Math.PI / 3,
Math.PI / 6
};
for (double elevation : elevations)
{
double radius = (double) Math.cos(elevation) * maxRadius;
canvas.drawCircle((float) centerX, (float) centerY, (float) radius, paint);
}
canvas.drawLine(centerX - maxRadius, centerY, centerX + maxRadius, centerY, paint);
canvas.drawLine(centerX, centerY - maxRadius, centerX, centerY + maxRadius, paint);
canvas.drawText("N", centerX - 5, centerY - maxRadius, paint);
canvas.drawText("S", centerX - 5, centerY + maxRadius + 10, paint);
canvas.drawText("E", centerX + maxRadius + 5, centerY + 5, paint);
canvas.drawText("W", centerX - maxRadius - 5, centerY + 5, paint);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setTextSize(20);
if (flg == 1)
{
for (int prn = 1; prn <= NUM_SATS; prn++)
{
ohiapp33.GpsInfo ginfo = this.satCache[prn];
if (ginfo.azimuth != 0)
{
double h = (double) Math.cos((ginfo.elev * Math.PI) / 180) * maxRadius;
int satX = (int) (centerX + h * Math.sin((ginfo.azimuth * Math.PI) / 180));
int satY = (int) (centerY - h * Math.cos((ginfo.azimuth * Math.PI) / 180));
paint.setColor(ginfo.colour);
canvas.drawCircle(satX, satY, ginfo.snr / 3, paint);
}
}
for (int prn = 1; prn <= NUM_SATS; prn++)
{
ohiapp33.GpsInfo ginfo = this.satCache[prn];
if (ginfo.azimuth != 0)
{
double h = (double) Math.cos((ginfo.elev * Math.PI) / 180) * maxRadius;
int satX = (int) (centerX + h * Math.sin((ginfo.azimuth * Math.PI) / 180));
int satY = (int) (centerY - h * Math.cos((ginfo.azimuth * Math.PI) / 180));
paint.setColor(Color.RED);
canvas.drawText(ginfo.name, satX + 5, satY + 5, paint);
}
}
if (loc != null)
{
paint.setColor(Color.YELLOW);
String p;
p = "Lat " + new Float(loc.getLatitude()).toString();
canvas.drawText(p, 10, 40, paint);
p = "Lon " + new Float(loc.getLongitude()).toString();
canvas.drawText(p, 170, 40, paint);
p = "Alt " + new Float(loc.getAltitude()).toString() + "m";
canvas.drawText(p, 10, 390, paint);
if (loc.getTime() > 0)
{
calen.setTimeInMillis(loc.getTime());
SimpleDateFormat a = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
canvas.drawText(a.format(calen.getTime()), 10, 420, paint);
}
}
}
}
}
Reference
이 문제에 관하여(GPS 연구 15), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ohisama@github/items/ee4e9bd50d89319ae22c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)