- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
现在我正在使用 GPS 在移动时每 1 分钟获取不同的纬度和经度,并且必须将其存储到数组列表中。我为此使用线程。我点击了这个链接。 http://www.androidhive.info/2012/08/android-working-with-google-places-and-maps-tutorial/
我的代码是
跟踪.java
package com.example.getlatlang;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class Tracking extends Activity
{
Button btnShowLocation;
boolean isRepeat = true;
protected int splashTime = 1000;
int timer =0;
Thread th;
ArrayList<Double> lat_array = new ArrayList<Double>();
ArrayList<Double> lon_array = new ArrayList<Double>();
// GPSTracker class
GPSTracker gps;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.currentlocation);
btnShowLocation = (Button) findViewById(R.id.start_bt);
// show location button click event
btnShowLocation.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View arg0)
{
// create class object
if(isRepeat)
{
isRepeat = false;
btnShowLocation.setBackgroundResource(R.drawable.stop);
if(lat_array.size()>0 && lon_array.size()>0)
{
lat_array.clear();
lon_array.clear();
System.out.println("Array cleared...");
}
// check if GPS enabled th=new Thread()
th=new Thread()
{
@Override
public void run(){
try
{
for (timer = 0; timer < 20; timer++)
{
// int waited = 0;
// while(waited < splashTime)
// {
Thread.sleep(100);
runOnUiThread(new Runnable()
{
@Override
public void run()
{
try
{ gps = new GPSTracker(Tracking.this);
if(gps.canGetLocation())
{
double latitude = gps.getLatitude();
double longitude = gps.getLongitude();
lat_array.add(latitude);
lon_array.add(longitude);
// \n is for new line
System.out.println("lat_array"+lat_array+"lon_array"+lon_array);
Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + lat_array + "\nLong: " + lon_array, Toast.LENGTH_LONG).show();
}
else
{
// can't get location
// GPS or Network is not enabled
// Ask user to enable GPS/network in settings
gps.showSettingsAlert();
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
});
// waited += 100;
//}
}}
catch (InterruptedException e)
{
}
}
};
th.start();
}
else
{
isRepeat = true;
th.interrupt();
btnShowLocation.setBackgroundResource(R.drawable.start);
}
}
});
}
public void ohDestroy()
{
th.stop();
}
}
GPSTracker.java
package com.example.getlatlang;
import android.app.AlertDialog;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
import android.util.Log;
public class GPSTracker extends Service implements LocationListener
{
private final Context mContext;
// flag for GPS status
boolean isGPSEnabled = false;
// flag for network status
boolean isNetworkEnabled = false;
// flag for GPS status
boolean canGetLocation = false;
Location location; // location
double latitude; // latitude
double longitude; // longitude
// The minimum distance to change Updates in meters
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters
// The minimum time between updates in milliseconds
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute
// Declaring a Location Manager
protected LocationManager locationManager;
public GPSTracker(Context context) {
this.mContext = context;
getLocation();
}
public Location getLocation() {
try {
locationManager = (LocationManager) mContext
.getSystemService(LOCATION_SERVICE);
// getting GPS status
isGPSEnabled = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
// getting network status
isNetworkEnabled = locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnabled && !isNetworkEnabled) {
// no network provider is enabled
} else {
this.canGetLocation = true;
if (isNetworkEnabled) {
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("Network", "Network");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
// if GPS Enabled get lat/long using GPS Services
if (isGPSEnabled) {
if (location == null) {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("GPS Enabled", "GPS Enabled");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return location;
}
/**
* Stop using GPS listener
* Calling this function will stop using GPS in your app
* */
public void stopUsingGPS(){
if(locationManager != null){
locationManager.removeUpdates(GPSTracker.this);
}
}
/**
* Function to get latitude
* */
public double getLatitude(){
if(location != null){
latitude = location.getLatitude();
}
// return latitude
return latitude;
}
/**
* Function to get longitude
* */
public double getLongitude(){
if(location != null){
longitude = location.getLongitude();
}
// return longitude
return longitude;
}
/**
* Function to check GPS/wifi enabled
* @return boolean
* */
public boolean canGetLocation() {
return this.canGetLocation;
}
/**
* Function to show settings alert dialog
* On pressing Settings button will lauch Settings Options
* */
public void showSettingsAlert(){
AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
// Setting Dialog Title
alertDialog.setTitle("GPS is settings");
// Setting Dialog Message
alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");
// On pressing Settings button
alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
mContext.startActivity(intent);
}
});
// on pressing cancel button
alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
// Showing Alert Message
alertDialog.show();
}
@Override
public void onLocationChanged(Location location) {
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
}
现在我的问题是在移动时无法获得不同的纬度和经度点。第一个值仅在数组中存储了 20 次。因为我设置了 Tread 必须运行 20 次。但我想获得不同的点并将其存储到数组列表中。我不知道我哪里做错了。任何人都可以帮助我解决这个问题吗?提前致谢。
最佳答案
您在收集纬度的循环中使用了 sleep(100)
。
这里的时间单位是微秒。(据我所知)
20*100 = 2000,即 2 秒。而且我不认为 GPS 更新那么快。
看看这个。
相反,您可以使用相同的循环,但仅当该值与之前的值不同时才存储该值。
if(oldLat != curLat){
//store curLat to array
//and make oldLat = curLat
}
关于java - 如何在android中每1分钟移动一次获得不同的纬度和经度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19019395/
我正在开发一个应用程序,用户可以在其中搜索其位置附近的项目。 当用户注册我的服务时,会获取他们的经/纬度坐标(这实际上是从邮政编码中获取的,然后通过 Google 查找经度/纬度坐标)。当用户添加一个
所以:我有以下函数,改编自在线找到的公式,它采用两个纬度/经度坐标并计算它们之间的距离(以英里为单位)(沿着球形地球): public static double distance (double l
我有一个给定点(经度、纬度),我想获取给定点 5 英里半径范围内的所有点范围? 最佳答案 我只是在这里猜测,但我认为您需要找到一种不同的方法。如果您尝试使用 Foursquare、Google map
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
我找到了一些代码,用于将纬度/经度转换为给定图像上的像素,反之亦然。我将其移植到 JavaScript,但在纬度上得到了不正确的返回值。我测试了原始的、未修改的代码,它给出了同样的不准确之处。下面是带
我用了AstroPy EarthLocation 获取传播卫星轨道的纬度、经度和高度 loc = coord.EarthLocation(*itrs.cartesian.xyz)。现在,我尝试使用 n
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: how to do location based search Getting similar longit
我有一个超过 15000 个经纬度坐标的列表。给定任何 X、Y 坐标,在列表中找到最近坐标的最快方法是什么? 最佳答案 您将需要使用名为 Voronoi diagram 的几何结构。 .这将平面划分为
For people interested in this topic: the accepted answer involves some concepts that I think are wel
我的应用程序上有一张 map ,它显示 2 种注释:位置和位置集群。当我放大集群时,集群会展开以显示集群中包含的位置。当这些位置添加到 map 时,其父簇的坐标将存储在注释对象中。我想要做的是制作一个
关于纬度/经度计算的简单问题。 我想获取一个值集,例如Lat: 55.123456 Long -6.123456 并计算出任意距离的四个点。 作为给定的正方形,我想计算出左侧和右侧的纬度值。因此红线距
Postgis中Linestring中的点(由osm2pgsql从osm导入)按顺序描述(经度,纬度) 例如慕尼黑 map 中的线串 'LINESTRING(11.4068032 47.8580927
给定左上长/纬度和右下长/纬度,我如何确定给定的长/纬度是否落在矩形内? 理想情况下我会看类似的东西 bool IsWithinArea(float topLeftLat,float topLeftL
几天来,我一直在尝试让纬度/经度检查器、速度计、高度计工作,但似乎没有任何工作。我尝试过使用 Android 的内置 locationmanager 和 google play 服务。现在我回来尝试
我有经纬度形式的位置坐标,例如:23⁰ 39' 24.8"N & 58⁰ 11' 36.5"E,请参见下图。但是在我的工作场所我使用 ArcGIS 并且它似乎不支持度数(纬度,经度)形式的坐标。我现在
网上看了一些教程,发现LocationManager就是这样做的。这是我在网上找到的代码。但是,我不明白。为什么我不能得到长/纬度?为什么要经历所有“改变”位置的事情...... lm=(Locati
我一直在关注此网站的教程:' http://wptrafficanalyzer.in/blog/storing-google-maps-android-api-v2-marker-locations-
我需要使用用户当前的纬度/经度和数据库中存储的一些值进行一些计算。问题是 Location.getLatitude() 返回一个类似 4119778.0 的值,而我在数据库中的值保存为 41.1675
所以在 PostgreSQL 中,我有一堆 long/lat 的几何值,其格式如下: 0101000020E610000095B9F94674CF37C09CBF0985083B5040 所以在 Po
在 GoogleMap 中,有标记的纬度和经度概念。 MySQL 中的 Point 数据类型有两个坐标 x 和 y。我不知道 Point 的坐标代表什么;所以我想知道什么表示 Point 根据 Goo
我是一名优秀的程序员,十分优秀!