如何查看圆圈内的经纬度数组列表是否存在于Google map V2 android中?

问题描述 投票:-2回答:1

在我的应用程序中,我有一个可拖动的标记,当我在Google Map中的某处拖放时,它会在标记周围创建一个半径圆,如果我将标记拖动到某个位置,我想检查一个包含数组列表的圆圈。纬度和经度列表是否在arraylist中的纬度是否存在于圆圈内?请帮助我在下面附上我的代码

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) { 
    rootView = inflater.inflate(R.layout.fragment_layout_one, container, false); 

    MapsInitializer.initialize(getActivity()); 

    mMapView = (MapView)rootView.findViewById(R.id.mapView); 
    mMapView.onCreate(mBundle); 

    MapsInitializer.initialize(getActivity()); 

    if (android.os.Build.VERSION.SDK_INT > 9) { 
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() 
        .permitAll().build(); 
        StrictMode.setThreadPolicy(policy); 
    } 

    new DownloadJSON().execute(); 
    setUpMapIfNeeded(rootView);

    /* handler = new Handler();
    handler.postDelayed(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
             new DownloadJSON().execute(); 
                setUpMapIfNeeded(rootView); 

             Toast.makeText(getActivity(), "Data Updated!!!! ", Toast.LENGTH_SHORT).show();
             Log.e("Data in Log", "");
        }
    }, 1000);
     */
    final Handler handler = new Handler();
    timer = new Timer();
    TimerTask doAsynchronousTask = new TimerTask() {
        @Override
        public void run() {
            handler.post(new Runnable() {
                public void run() {
                    //mMap.clear();
                    // Toast.makeText(getActivity(), "Data Updated!!!! ", Toast.LENGTH_SHORT).show();
                    new DownloadJSON().execute(); 
                    setUpMapIfNeeded(rootView); 

                }
            });
        }
    };
    timer.schedule(doAsynchronousTask, 20000, 20000);

    /*LocationManager locman = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE);
    //locman.requestLocationUpdates(minTime, minDistance, criteria, intent);
    locman.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 10, this);*/
    return rootView; 
} 

private void setUpMapIfNeeded(View inflatedView) { 
    if (mMap == null) { 
        mMap = ((MapView) inflatedView.findViewById(R.id.mapView)).getMap(); 
        mMap.setMyLocationEnabled(true); 

        mMap.addMarker(new MarkerOptions()
        .position(new LatLng(0, 0))
        .title("Marker")
        .draggable(true)
        .snippet("Hello")
        .icon(BitmapDescriptorFactory
                .defaultMarker(BitmapDescriptorFactory.HUE_YELLOW)));

        mMap.setOnMarkerDragListener(this);
        markerClicked = false;


        Location myLocation = mMap.getMyLocation(); 
        if (mMap != null) {  
            //mMap.clear();

            // setUpMap(); 
            mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() { 

                @Override 
                public void onMyLocationChange(Location arg0) { 

                    // TODO Auto-generated method stub 

                    final LatLngBounds.Builder builder = new LatLngBounds.Builder(); 
                    //  mMap.clear();
                    if(marker!=null){
                        marker.remove();
                    }
                    for (int i = 0; i < arraylist1.size(); i++) { 
                        final LatLng position = new LatLng(Double 
                                .parseDouble(arraylist1.get(i).get("Latitude")), 
                                Double.parseDouble(arraylist1.get(i).get( 
                                        "Longitude"))); 
                        String ime1 = arraylist1.get(i).get("RegistrationNo");
                        final MarkerOptions options = new MarkerOptions() 
                        .position(position); 
                        //mMap.addMarker(options); 
                        //  mMap.addMarker(options.icon(BitmapDescriptorFactory .fromResource(R.drawable.buspng)).anchor(0.0f, 1.0f).title(ime1));
                        // marker=mMap.addMarker(new MarkerOptions().position(position).icon(BitmapDescriptorFactory .fromResource(R.drawable.buspng)).title(ime1));


                        //options.title(ime1);
                        builder.include(position); 

                    } if(value==1){
                        LatLng latLng = new LatLng(arg0.getLatitude(), arg0 
                                .getLongitude()); 
                        //mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
                        mMap.setMyLocationEnabled(true); 

                        //mMap.moveCamera(CameraUpdateFactory.newLatLng(newLatLnglatLng)); 
                        // mMap.setOnMapClickListener(null); 
                        mMap.setOnMarkerClickListener(null); 
                        //mMap.animateCamera(CameraUpdateFactory.zoomTo(9)); 
                        CameraPosition cameraPosition = new CameraPosition.Builder()
                        .target(latLng)      // Sets the center of the map to Mountain View
                        .zoom(10)                   // Sets the zoom
                        .build();       
                        // Creates a CameraPosition from the builder
                        mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
                        value++;
                    }
                } 
            }); 

        } 
    } 
} 

/*  protected void retrieveAndAddCities() throws IOException { 
    HttpURLConnection conn = null; 
    final StringBuilder json = new StringBuilder(); 
    try { 

        URL url = new URL(SERVICE_URL); 
        conn = (HttpURLConnection) url.openConnection(); 
        InputStreamReader in = new InputStreamReader(conn.getInputStream()); 

        int read; 
        char[] buff = new char[1024]; 
        while ((read = in.read(buff)) != -1) { 
            json.append(buff, 0, read); 
        } 
    } catch (IOException e) { 
        Log.e(LOG_TAG, "Error connecting to service", e); 
        throw new IOException("Error connecting to service", e); 
    } finally { 
        if (conn != null) { 
            conn.disconnect(); 
        } 
    } 
    new DownloadJSON().execute(); 

} */

private class DownloadJSON extends AsyncTask<Void, Void, Void> { 
    String result=""; 
    @Override 
    protected void onPreExecute() { 
        super.onPreExecute(); 
    }

    @Override 
    protected Void doInBackground(Void... params) { 
        try { 
            arraylist1 = new ArrayList<HashMap<String, String>>(); 

            JSONParser jParser = new JSONParser(); 
            String result = ""; 

            json = jParser.getJSONFromUrl(SERVICE_URL); 

            try { 
                arraylist1.clear(); 

                jsonarray = json.getJSONArray("SingleIMEs"); 
                Log.d("Haaaaaaaaaaaa", "" + json); 

                for (int i = 0; i < jsonarray.length(); i++) { 
                    Log.d("H11111111111111111111111111", 
                            "" + jsonarray.length()); 
                    map = new HashMap<String, String>(); 
                    json = jsonarray.getJSONObject(i); 

                    latitude = json.getDouble("Latitude"); 
                    longitude = json.getDouble("Longitude"); 
                    ime = json.getString("IME");
                    reg=json.getString("RegistrationNo");
                    map.put("Latitude", json.getString("Latitude")); 
                    Log.e("CHECKLAT",""+json.getString("Latitude") );
                    map.put("Longitude", json.getString("Longitude")); 
                    Log.e("CHECKLONG",""+json.getString("Longitude") );
                    map.put("RegistrationNo", json.getString("RegistrationNo"));
                    map.put("IME", json.getString("IME"));
                    arraylist1.add(map); 
                } 

            } catch (JSONException e) { 
                Log.e("log_tag", "Error parsing data " + e.toString()); 
                result="Error"; 
                e.printStackTrace(); 
            } 
        }catch(Exception e){ 
            result="Error"; 
        } 
        return null; 
    } 

    protected void onPostExecute(Void args) { 
        // mProgressDialog.dismiss(); 
    } 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    mMapView.onResume(); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    mMapView.onPause(); 
} 
@Override
public void onLowMemory() {
    super.onLowMemory();
    mMapView.onLowMemory();
}

@Override 
public void onDestroy() { 
    mMapView.onDestroy(); 
    super.onDestroy(); 
}

@Override
public void onLocationChanged(Location location) {
    // TODO Auto-generated method stub

    /* Toast.makeText(getActivity(), "onLocationUpdated!!!", Toast.LENGTH_SHORT).show();
    Log.d("onLocationUpdated!!!","");
    new DownloadJSON().execute(); 
    setUpMapIfNeeded(rootView);*/
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub
}

@Override
public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub
}

@Override
public void onProviderDisabled(String provider) {

    // TODO Auto-generated method stub
}

@Override
public void onMapClick(LatLng arg0) {
    // TODO Auto-generated method stub
    mMap.animateCamera(CameraUpdateFactory.newLatLng(arg0));

    markerClicked = false;
}

@Override
public void onMarkerDrag(Marker arg0) {
    // TODO Auto-generated method stub

}

@Override
public void onMarkerDragEnd(Marker arg0) {
    // TODO Auto-generated method stub
    Toast.makeText(
            getActivity().getApplicationContext(),
            "Lat " + mMap.getMyLocation().getLatitude() + " "
                    + "Long " + mMap.getMyLocation().getLongitude(),
                    Toast.LENGTH_LONG).show();
    circleOptions = new CircleOptions();
    circleOptions.center(arg0.getPosition());
    circleOptions.radius(100000);
    //circleOptions.strokeColor(Color.BLUE);
    circle=mMap.addCircle(circleOptions);
}

@Override
public void onMarkerDragStart(Marker arg0) {
    // TODO Auto-generated method stub
    if(circle!=null){
        circle.remove();
    }
}
@Override
public void onMapLongClick(LatLng arg0) {
    // TODO Auto-generated method stub
}
android google-maps google-maps-android-api-2 google-maps-api-2
1个回答
0
投票

在Javascript API中,您有一个containsLocation函数,但在Android API中没有。

对于Android API,您必须自己计算两个lat / lng之间的距离,您可以使用distanceBetween函数计算。

© www.soinside.com 2019 - 2024. All rights reserved.