在谷歌地图中显示提供的坐标

时间:2015-05-07 07:54:46

标签: android google-maps

我已完成显示cafe|restaurant 1000 meters到我当前位置的距离mainactivity.java。但我的要求改变了,要求我显示json响应提供的坐标集。

我已经提到了我的代码,而在我的public class MainActivity extends Activity { // flag for Internet connection status Boolean isInternetPresent = false; // Connection detector class ConnectionDetector cd; // Alert Dialog Manager AlertDialogManager alert = new AlertDialogManager(); // Google Places GooglePlaces googlePlaces; // Places List PlacesList nearPlaces; // GPS Location GPSTracker gps; // Button Button btnShowOnMap; // Progress dialog ProgressDialog pDialog; // Places Listview ListView lv; // ListItems data ArrayList<HashMap<String, String>> placesListItems = new ArrayList<HashMap<String,String>>(); // KEY Strings public static String KEY_REFERENCE = "reference"; // id of the place public static String KEY_NAME = "name"; // name of the place public static String KEY_VICINITY = "vicinity"; // Place area name @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.storelocator_list); cd = new ConnectionDetector(getApplicationContext()); // Check if Internet present isInternetPresent = cd.isConnectingToInternet(); if (!isInternetPresent) { // Internet Connection is not present alert.showAlertDialog(MainActivity.this, "Internet Connection Error", "Please connect to working Internet connection", false); // stop executing code by return return; } // creating GPS Class object gps = new GPSTracker(this); // check if GPS location can get if (gps.canGetLocation()) { Log.d("Your Location", "latitude:" + gps.getLatitude() + ", longitude: " + gps.getLongitude()); } else { // Can't get user's current location alert.showAlertDialog(MainActivity.this, "GPS Status", "Couldn't get location information. Please enable GPS", false); // stop executing code by return return; } // Getting listview lv = (ListView) findViewById(R.id.list); // button show on map btnShowOnMap = (Button) findViewById(R.id.btn_show_map); // calling background Async task to load Google Places // After getting places from Google all the data is shown in listview new LoadPlaces().execute(); /** Button click event for shown on map */ btnShowOnMap.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { Intent i = new Intent(getApplicationContext(), PlacesMapActivity.class); // Sending user current geo location i.putExtra("user_latitude", Double.toString(gps.getLatitude())); i.putExtra("user_longitude", Double.toString(gps.getLongitude())); // passing near places to map activity i.putExtra("near_places", nearPlaces); // staring activity startActivity(i); } }); /** * ListItem click event * On selecting a listitem SinglePlaceActivity is launched * */ lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // getting values from selected ListItem String reference = ((TextView) view.findViewById(R.id.reference)).getText().toString(); // Starting new intent Intent in = new Intent(getApplicationContext(), SinglePlaceActivity.class); // Sending place refrence id to single place activity // place refrence id used to get "Place full details" in.putExtra(KEY_REFERENCE, reference); startActivity(in); } }); } /** * Background Async Task to Load Google places * */ class LoadPlaces extends AsyncTask<String, String, String> { /** * Before starting background thread Show Progress Dialog * */ @Override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(MainActivity.this); pDialog.setMessage(Html.fromHtml("<b>Search</b><br/>Loading Places...")); pDialog.setIndeterminate(false); pDialog.setCancelable(false); pDialog.show(); } /** * getting Places JSON * */ protected String doInBackground(String... args) { // creating Places class object googlePlaces = new GooglePlaces(); try { // Separeate your place types by PIPE symbol "|" // If you want all types places make it as null // Check list of types supported by google // String types = "cafe|restaurant"; // Listing places only cafes, restaurants // Radius in meters - increase this value if you don't find any places double radius = 1000; // 1000 meters // get nearest places nearPlaces = googlePlaces.search(gps.getLatitude(), gps.getLongitude(), radius, types); } catch (Exception e) { e.printStackTrace(); } return null; } /** * After completing background task Dismiss the progress dialog * and show the data in UI * Always use runOnUiThread(new Runnable()) to update UI from background * thread, otherwise you will get error * **/ protected void onPostExecute(String file_url) { // dismiss the dialog after getting all products pDialog.dismiss(); // updating UI from Background Thread runOnUiThread(new Runnable() { public void run() { /** * Updating parsed Places into LISTVIEW * */ // Get json response status String status = nearPlaces.status; // Check for all possible status if(status.equals("OK")){ // Successfully got places details if (nearPlaces.results != null) { // loop through each place for (Place p : nearPlaces.results) { HashMap<String, String> map = new HashMap<String, String>(); // Place reference won't display in listview - it will be hidden // Place reference is used to get "place full details" map.put(KEY_REFERENCE, p.reference); // Place name map.put(KEY_NAME, p.name); // adding HashMap to ArrayList placesListItems.add(map); } // list adapter ListAdapter adapter = new SimpleAdapter(MainActivity.this, placesListItems, R.layout.storelocator_listitem, new String[] { KEY_REFERENCE, KEY_NAME}, new int[] { R.id.reference, R.id.name }); // Adding data into listview lv.setAdapter(adapter); } } else if(status.equals("ZERO_RESULTS")){ // Zero results found alert.showAlertDialog(MainActivity.this, "Near Places", "Sorry no places found. Try to change the types of places", false); } else if(status.equals("UNKNOWN_ERROR")) { alert.showAlertDialog(MainActivity.this, "Places Error", "Sorry unknown error occured.", false); } else if(status.equals("OVER_QUERY_LIMIT")) { alert.showAlertDialog(MainActivity.this, "Places Error", "Sorry query limit to google places is reached", false); } else if(status.equals("REQUEST_DENIED")) { alert.showAlertDialog(MainActivity.this, "Places Error", "Sorry error occured. Request is denied", false); } else if(status.equals("INVALID_REQUEST")) { alert.showAlertDialog(MainActivity.this, "Places Error", "Sorry error occured. Invalid Request", false); } else { alert.showAlertDialog(MainActivity.this, "Places Error", "Sorry error occured.", false); } } }); } } 中,它获取了最近的位置并显示了它。如何将我的坐标提供给它。

MainActivity.java

public class PlacesMapActivity extends MapActivity {
    // Nearest places
    PlacesList nearPlaces;

    // Map view
    MapView mapView;

    // Map overlay items
    List<Overlay> mapOverlays;

    AddItemizedOverlay itemizedOverlay;

    GeoPoint geoPoint;
    // Map controllers
    MapController mc;

    double latitude;
    double longitude;
    OverlayItem overlayitem;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.storelocator_map_places);

        // Getting intent data
        Intent i = getIntent();

        // Users current geo location
        String user_latitude = i.getStringExtra("user_latitude");
        String user_longitude = i.getStringExtra("user_longitude");

        // Nearplaces list
        nearPlaces = (PlacesList) i.getSerializableExtra("near_places");

        mapView = (MapView) findViewById(R.id.mapView);
        mapView.setBuiltInZoomControls(true);

        mapOverlays = mapView.getOverlays();

        // Geopoint to place on map
        geoPoint = new GeoPoint((int) (Double.parseDouble(user_latitude) * 1E6),
                (int) (Double.parseDouble(user_longitude) * 1E6));

        // Drawable marker icon
        Drawable drawable_user = this.getResources()
                .getDrawable(R.drawable.mark_red);

        itemizedOverlay = new AddItemizedOverlay(drawable_user, this);

        // Map overlay item
        overlayitem = new OverlayItem(geoPoint, "Your Location",
                "That is you!");

        itemizedOverlay.addOverlay(overlayitem);

        mapOverlays.add(itemizedOverlay);
        itemizedOverlay.populateNow();

        // Drawable marker icon
        Drawable drawable = this.getResources()
                .getDrawable(R.drawable.mark_blue);

        itemizedOverlay = new AddItemizedOverlay(drawable, this);

        mc = mapView.getController();

        // These values are used to get map boundary area
        // The area where you can see all the markers on screen
        int minLat = Integer.MAX_VALUE;
        int minLong = Integer.MAX_VALUE;
        int maxLat = Integer.MIN_VALUE;
        int maxLong = Integer.MIN_VALUE;

        // check for null in case it is null
        if (nearPlaces.results != null) {
            // loop through all the places
            for (Place place : nearPlaces.results) {
                latitude = place.geometry.location.lat; // latitude
                longitude = place.geometry.location.lng; // longitude

                // Geopoint to place on map
                geoPoint = new GeoPoint((int) (latitude * 1E6),
                        (int) (longitude * 1E6));

                // Map overlay item
                overlayitem = new OverlayItem(geoPoint, place.name,
                        place.vicinity);

                itemizedOverlay.addOverlay(overlayitem);


                // calculating map boundary area
                minLat  = (int) Math.min( geoPoint.getLatitudeE6(), minLat );
                minLong = (int) Math.min( geoPoint.getLongitudeE6(), minLong);
                maxLat  = (int) Math.max( geoPoint.getLatitudeE6(), maxLat );
                maxLong = (int) Math.max( geoPoint.getLongitudeE6(), maxLong );
            }
            mapOverlays.add(itemizedOverlay);

            // showing all overlay items
            itemizedOverlay.populateNow();
        }

        // Adjusting the zoom level so that you can see all the markers on map
        mapView.getController().zoomToSpan(Math.abs( minLat - maxLat ), Math.abs( minLong - maxLong ));

        // Showing the center of the map
        mc.animateTo(new GeoPoint((maxLat + minLat)/2, (maxLong + minLong)/2 ));
        mapView.postInvalidate();

    }

    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }

}

PlacesMapActivity.java

public class GooglePlaces {

    /** Global instance of the HTTP transport. */
    private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();

    // Google API Key
    private static final String API_KEY = "AIzaSyBIHK8OGvu4qVdHY8xMvRJ37PFm0OYDbm4"; // place your API key here

    // Google Places serach url's
    private static final String PLACES_SEARCH_URL = "https://maps.googleapis.com/maps/api/place/search/json?";
    private static final String PLACES_TEXT_SEARCH_URL = "https://maps.googleapis.com/maps/api/place/search/json?";
    private static final String PLACES_DETAILS_URL = "https://maps.googleapis.com/maps/api/place/details/json?";

    private double _latitude;
    private double _longitude;
    private double _radius;

    /**
     * Searching places
     * @param latitude - latitude of place
     * @params longitude - longitude of place
     * @param radius - radius of searchable area
     * @param types - type of place to search
     * @return list of places
     * */
    public PlacesList search(double latitude, double longitude, double radius, String types)
            throws Exception {

        this._latitude = latitude;
        this._longitude = longitude;
        this._radius = radius;

        try {

            HttpRequestFactory httpRequestFactory = createRequestFactory(HTTP_TRANSPORT);
            HttpRequest request = httpRequestFactory
                    .buildGetRequest(new GenericUrl(PLACES_SEARCH_URL));
            request.getUrl().put("key", API_KEY);
            request.getUrl().put("location", _latitude + "," + _longitude);
            request.getUrl().put("radius", _radius); // in meters
            request.getUrl().put("sensor", "false");
            if(types != null)
                request.getUrl().put("types", types);

            PlacesList list = request.execute().parseAs(PlacesList.class);
            // Check log cat for places response status
            Log.d("Places Status", "" + list.status);
            return list;

        } catch (HttpResponseException e) {
            Log.e("Error:", e.getMessage());
            return null;
        }

    }

    /**
     * Searching single place full details
     * @param refrence - reference id of place
     *                 - which you will get in search api request
     * */
    public PlaceDetails getPlaceDetails(String reference) throws Exception {
        try {

            HttpRequestFactory httpRequestFactory = createRequestFactory(HTTP_TRANSPORT);
            HttpRequest request = httpRequestFactory
                    .buildGetRequest(new GenericUrl(PLACES_DETAILS_URL));
            request.getUrl().put("key", API_KEY);
            request.getUrl().put("reference", reference);
            request.getUrl().put("sensor", "false");

            PlaceDetails place = request.execute().parseAs(PlaceDetails.class);

            return place;

        } catch (HttpResponseException e) {
            Log.e("Error in Perform Details", e.getMessage());
            throw e;
        }
    }

    /**
     * Creating http request Factory
     * */
    public static HttpRequestFactory createRequestFactory(
            final HttpTransport transport) {
        return transport.createRequestFactory(new HttpRequestInitializer() {
            public void initialize(HttpRequest request) {
                GoogleHeaders headers = new GoogleHeaders();
                headers.setApplicationName("AndroidHive-Places-Test");
                request.setHeaders(headers);
                JsonHttpParser parser = new JsonHttpParser(new JacksonFactory());
                request.addParser(parser);
            }
        });
    }

}

GooglePlaces.java

doInBackground

任何人都可以帮我解决这个问题吗?我对www.site.com/profile#/profile/profession/3 方法进行了一些更改,然后它没有在地图上显示任何内容。

0 个答案:

没有答案