我正试图从.xls文件中获取一些数据,但它无法正常工作。文件的第2列是地点的纬度和经度,第3列是一个问题。我想保存纬度和经度,计算距离我当前位置的距离,当我足够接近(dist <0.02)时,显示问题。不幸的是我找不到错误。有人可以帮我吗?非常感谢!
public class GeoCurrentProximityDistance extends FragmentActivity {
GoogleMap googleMap;
LocationManager locationManager;
PendingIntent pendingIntent;
SharedPreferences sharedPreferences;
Toast toast;
MediaPlayer mysound;
int zoomlevel;
Polyline line;
boolean tag = false;
double destLatit;
double destLongit;
double latitude;
double longitude;
String unit;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.geomain_proximityalert);
// Getting Google Play availability status
int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());
// Showing status
if (status != ConnectionResult.SUCCESS) { // Google Play Services are not available
int requestCode = 10;
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
dialog.show();
} else { // Google Play Services are available
// Getting reference to the SupportMapFragment of activity_main.xml
// Getting GoogleMap object from the fragment
googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
.getMap();
// Enabling MyLocation Layer of Google Map
googleMap.setMyLocationEnabled(true);
// Getting LocationManager object from System Service LOCATION_SERVICE
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
// Creating a criteria object to retrieve provider
Criteria criteria = new Criteria();
// Getting the name of the best provider
String provider = locationManager.getBestProvider(criteria, true);
// Getting Current Location
Location location;
location = locationManager.getLastKnownLocation(provider);
try {
read(location,latitude, longitude, unit, destLatit, destLongit, tag);
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void CalculateDistance(double latitude, double longitude, double destLatit, double destLongit, String unit, boolean tag) {
tag = false;
TextView tvDistance = (TextView) findViewById(R.id.tv_distance);
double theta = longitude - destLongit;
double dist = Math.sin(deg2rad(latitude)) * Math.sin(deg2rad(destLatit)) + Math.cos(deg2rad(latitude)) * Math.cos(deg2rad(destLatit)) * Math.cos(deg2rad(theta));
dist = Math.acos(dist);
dist = rad2deg(dist);
dist = dist * 60 * 1.1515;
if (unit == "K") {
dist = dist * 1.609344;
} else if (unit == "M") {
dist = dist * 0.8684;
}
tvDistance.setText("Distance:" + round(dist, 2) * 1000 + "meters");
// while (tag == false) {
if (dist > 10) {
Toast.makeText(getBaseContext(), "Είστε αρκετά μακρυά. Η απόσταση από τον προορισμό σας είναι μεγαλύτερη από 10 χιλιόμετρα.", Toast.LENGTH_LONG).show();
zoomlevel = 8;
int secondsDelayed = 1;
new Handler().postDelayed(new Runnable() {
public void run() {
finish();
}
}, secondsDelayed * 30000);
}
if (dist <= 10 && dist > 5) {
Toast.makeText(getBaseContext(), "Η απόσταση από τον προορισμό σας είναι μικρότερη από 10 χιλιόμετρα.", Toast.LENGTH_LONG).show();
zoomlevel = 12;
}
if (dist <= 5 && dist > 1) {
Toast.makeText(getBaseContext(), "Η απόσταση από τον προορισμό σας είναι μικρότερη από 5 χιλιόμετρα.", Toast.LENGTH_LONG).show();
zoomlevel = 13;
}
if (dist <= 1 && dist > 0.5) {
Toast.makeText(getBaseContext(), "Η απόσταση από τον προορισμό σας είναι μικρότερη από 1 χιλιόμετρο.", Toast.LENGTH_LONG).show();
zoomlevel = 14;
}
if (dist <= 0.5 && dist > 0.25) {
Toast.makeText(getBaseContext(), "Η απόσταση από τον προορισμό σας είναι μικρότερη από 500 μέτρα", Toast.LENGTH_LONG).show();
zoomlevel = 15;
}
if (dist <= 0.25 && dist > 0.1) {
Toast.makeText(getBaseContext(), "Η απόσταση από τον προορισμό σας είναι μικρότερη από 250 μέτρα", Toast.LENGTH_LONG).show();
zoomlevel = 15;
}
if (dist <= 0.1 && dist > 0.05) {
Toast.makeText(getBaseContext(), "Η απόσταση από τον προορισμό σας είναι μικρότερη από 100 μέτρα. Ο στόχος πλέον πρέπει να είναι ορατός.", Toast.LENGTH_LONG).show();
zoomlevel = 16;
}
if (dist <= 0.05 && dist > 0.03) {
Toast.makeText(getBaseContext(), "Η απόσταση από τον προορισμό σας είναι μικρότερη από 50 μέτρα.", Toast.LENGTH_LONG).show();
zoomlevel = 17;
}
if (dist <= 0.03 && dist > 0.02) {
Toast.makeText(getBaseContext(), "Η απόσταση από τον προορισμό σας είναι μικρότερη από 30 μέτρα.", Toast.LENGTH_LONG).show();
zoomlevel = 18;
}
if (dist <= 0.02) {
Toast.makeText(getBaseContext(), "Συγχαρητήρια! Ο στόχος σας είναι πλέον ορατός.", Toast.LENGTH_LONG).show();
zoomlevel = 18;
tag = true;
}
}
public String inputFile;
public void setInputFile(String inputFile) {
this.inputFile = "C:\\Users\\Βούλα\\Desktop\\coords.xls";
}
public void read(Location location, double latitude, double longitude, String unit, double destLatit, double destLongit, boolean tag) throws IOException {
setInputFile(inputFile);
File inputWorkbook = new File(inputFile);
Workbook w;
try {
w = Workbook.getWorkbook(inputWorkbook);
// Get the first sheet
Sheet sheet = w.getSheet(0);
// Loop over first 10 column and lines
int QuestionNumber = 0;
//διαβαζει το αρχειο πρωτα ανα γραμμή, όχι απ το 0 αλλά απ το 1, γιατι στην γραμμη 0 ειναι ο τιτλος
for (int row = 1; row < sheet.getRows(); row++) {
for (int clm = 0; clm < sheet.getColumns(); clm++) {
if (clm == 0) { //στην 1η στηλη, περιέχεται το latitude
Cell latit = sheet.getCell(row, clm);
Cell longit = sheet.getCell(row, clm + 1); //στην 2η, το longitude
String lattd = latit.getContents();
String longtd = longit.getContents();
destLatit = Double.parseDouble(lattd);
destLongit = Double.parseDouble(longtd);
this.CalculateDistance(latitude, longitude, destLatit, destLongit, unit, tag);
onLocationChanged(location);
// if (tag == true) {
String qstn = sheet.getCell(row, 2).getContents();
Intent intent = new Intent(this, CurrentQuestion.class);
intent.putExtra("question", qstn);
startActivity(intent);
// }
QuestionNumber = QuestionNumber + 1;
}
}
}
} catch (BiffException e) {
e.printStackTrace();
}
}
}
公共类CurrentQuestion扩展了Activity {
public static final String qstn = CurrentQuestion.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_display_message);
Intent intent = getIntent();
intent.getStringExtra("question");
TextView textView = new TextView(this);
textView.setTextSize(40);
textView.setText(qstn);
setContentView(textView);
}