0

Googleマップにすべてのショップの場所をロードするフラグメントがあります。しかし、現在の場所から 5 マイル以内にある店舗のみを読み込みたいと考えています。

これは私のコードです:

public class NearMeFragment extends Fragment implements GooglePlayServicesClient.ConnectionCallbacks,
    GooglePlayServicesClient.OnConnectionFailedListener, LocationListener {

        GoogleMap map;
        LatLng latlng;
        private LocationRequest lr;
        private LocationClient lc;
        MapFragment mapFragment;
        //ImageView iv;
        private static View view;
        Response response;

    public NearMeFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        if (view != null) {
            ViewGroup parent = (ViewGroup) view.getParent();
            if (parent != null)
                parent.removeView(view);
        }


        File file = new File( Environment.getExternalStorageDirectory() + "/json.txt");
            if(file.exists()) {
                try{
                       Reader inputStreamReader = new InputStreamReader(new FileInputStream(file));

                       Gson gson = new Gson();
                       this.response = gson.fromJson(inputStreamReader, Response.class);
                    } catch (FileNotFoundException e) {
                       e.printStackTrace();
                    } catch (@SuppressWarnings("hiding") IOException e){
                       e.printStackTrace();
                    }
            }else{
                System.out.println("Error");
            }

        try {
            view = inflater.inflate(R.layout.map_near_me, container,
                    false);

            mapFragment = ((MapFragment) this.getActivity()
                    .getFragmentManager().findFragmentById(R.id.map));

            map = mapFragment.getMap();
            map.getUiSettings().setAllGesturesEnabled(true);
            map.getUiSettings().setMyLocationButtonEnabled(true);
            map.setMyLocationEnabled(true);
            map.getUiSettings().setZoomControlsEnabled(true);

            for(Shop shop : this.response.shops){
                for(int i = 0; i < shop.getShopLat().size(); i++){

                    map.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(shop.getShopLat().get(i)), Double.parseDouble(shop.getShopLng().get(i)))).title(shop.getName()));
                }
            }
            MapsInitializer.initialize(this.getActivity());
        } catch (GooglePlayServicesNotAvailableException e) {
            Toast.makeText(getActivity(), "Google Play Services missing !",
                    Toast.LENGTH_LONG).show();
        } catch (InflateException e) {
            Toast.makeText(getActivity(), "Problems inflating the view !",
                    Toast.LENGTH_LONG).show();
        } catch (NullPointerException e) {
            Toast.makeText(getActivity(), "Google Play Services missing !",
                    Toast.LENGTH_LONG).show();
        }

        return view;
        }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        lr = LocationRequest.create();
        lr.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        lc = new LocationClient(this.getActivity().getApplicationContext(), this, this);
        lc.connect();
    }

    @Override
    public void onLocationChanged(Location l2) {
        CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(l2.getLatitude(), l2.getLongitude()), 15);
        map.animateCamera(cameraUpdate);
    }

    @Override
    public void onConnectionFailed(ConnectionResult arg0) {

    }

    @Override
    public void onConnected(Bundle connectionHint) {
        lc.requestLocationUpdates(lr, this);

    }

    @Override
    public void onDisconnected() {

    }
}

このコードはうまく機能しますが、読み込みに時間がかかります。私の問題は、いくつかの if ステートメントを使用することで解決できると思います。しかし、その方法を理解できませんでした。誰かがそれを解決するのを手伝ってくれますか? また、このアクティビティ/フラグメントを開始するたびに、アフリカの他の国を目にします。デフォルトを UK に変更するにはどうすればよいですか?

4

2 に答える 2