我想通过使用纬度和经度来计算附近的位置

时间:2017-06-19 09:00:17

标签: android

我正在开发取决于计算附近位置的应用 我使用firebase数据库来存储纬度和经度,我将它们存储在一个值中,这样我就可以一次读取所有值。 问题是,要计算距离我需要单独读取每个纬度和经度,但它们存储在一个字符串值中。我该怎么办?

 package com.example.felfel.drivers;

    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.EditText;
    import android.Manifest;
    import android.content.pm.PackageManager;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.os.Build;
    import android.provider.Settings;
    import android.support.v4.app.ActivityCompat;
    import android.widget.TextView;
    import com.firebase.client.Firebase;

    public class MainActivity extends AppCompatActivity {
        private TextView t;
        private LocationManager locationManager;
        private LocationListener listener;
        private Firebase locations;
        private Firebase user;
        private Firebase loc;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Firebase.setAndroidContext(this);
            locations=new Firebase("https://drivers-b09df.firebaseio.com/locations");

            t = (TextView) findViewById(R.id.loc);


            locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);


            listener = new LocationListener() {
                @Override
                public void onLocationChanged(Location location) {
                    t.append("\n " + location.getLongitude() + " " + location.getLatitude());
                    user.setValue(location.getLongitude() + " " + location.getLatitude());
                }

                @Override
                public void onStatusChanged(String s, int i, Bundle bundle) {

                }

                @Override
                public void onProviderEnabled(String s) {

                }

                @Override
                public void onProviderDisabled(String s) {

                    Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                    startActivity(i);
                }
            };

        }


        public void enter(View view){

            EditText t1= (EditText) findViewById(R.id.name);
            String name=t1.getText().toString();
            user = locations.child(name);

            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.INTERNET}
                            , 10);
                }



            }
            locationManager.requestLocationUpdates("gps", 10000, 10, listener);



        }
    public void ShowDrivers(View view){
        Intent intent1=new Intent(this,ShowDrivers.class);
        startActivity(intent1);
    }
    }


    package com.example.felfel.drivers;

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.TextView;

    import com.firebase.client.ChildEventListener;
    import com.firebase.client.DataSnapshot;
    import com.firebase.client.Firebase;
    import com.firebase.client.FirebaseError;
    import com.firebase.client.ValueEventListener;

    import java.util.ArrayList;
    import java.util.Map;

    public class ShowDrivers extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_show_drivers);

            final ArrayList<String>loc=new ArrayList<>();
            ListView lv= (ListView) findViewById(R.id.lv);
            final ArrayAdapter<String>arrayAdapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,loc);
            lv.setAdapter(arrayAdapter);

            Firebase locations=new Firebase("https://drivers-b09df.firebaseio.com/locations");
            locations.addChildEventListener(new ChildEventListener() {
                                                @Override
                                                public void onChildAdded(DataSnapshot dataSnapshot, String s) {

                                                    String value=dataSnapshot.getValue(String.class);
                                                    TextView textView=(TextView)findViewById(R.id.tv1);
                                                    textView.append(value);
                                                    loc.add(value);
                                                    arrayAdapter.notifyDataSetChanged();

                                                }

                                                @Override
                                                public void onChildChanged(DataSnapshot dataSnapshot, String s) {

                                                }

                                                @Override
                                                public void onChildRemoved(DataSnapshot dataSnapshot) {

                                                }

                                                @Override
                                                public void onChildMoved(DataSnapshot dataSnapshot, String s) {

                                                }

                                                @Override
                                                public void onCancelled(FirebaseError firebaseError) {

                                                }
                                            }

            );
        }
    }

1 个答案:

答案 0 :(得分:1)

您必须拆分字符串才能获取值。例如,如果您的字符串如下所示:String position = "47.2173;-1.5534"则执行:

String [] separated = position.split(";);
separated[0];//Will contains the latitude
separated[1];//Will contains the longitude