对于类型Projection&,类型fromPixels(int,int)是未定义的。对于GeoPoint类型,方法getLatitudeE6()未定义

时间:2014-02-27 16:35:43

标签: android

它不适用于 fromPixels()&在 getLatitudeE6() * getLongitudeE6() * at

public boolean onTouchEvent(MotionEvent event, MapView mapView)

方法,位于此代码的最后部分。可以任何一个帮助PLZ .....

package com.mamun.tasktest;

import java.io.IOException;
import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesClient;
import com.google.android.gms.location.LocationClient;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapActivity<GeoPoint, OverlayItem> extends Activity implements
        GooglePlayServicesClient.ConnectionCallbacks,
        GooglePlayServicesClient.OnConnectionFailedListener, LocationListener {

    private LocationManager manager;

    private TextView tvAddress;
    private Button btnSearch;
    private EditText etSearch;
    private LocationClient locationClient;
    private GoogleMap googleMap;
    private MapFragment mapFragment;
    //private GeoPoint p;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.map);

        manager = (LocationManager) getSystemService(LOCATION_SERVICE);

        tvAddress = (TextView) findViewById(R.id.tvaddress);
        btnSearch = (Button) findViewById(R.id.btnSearch);
        etSearch = (EditText) findViewById(R.id.etSearch);
        mapFragment = (MapFragment) getFragmentManager().findFragmentById(
                R.id.maps);
        googleMap = mapFragment.getMap();
        locationClient = new LocationClient(this, this, this);

    }

    public void onSearch(View v) {

        // Getting user input location
        String location = etSearch.getText().toString();

        if (location != null && !location.equals("")) {
            new GeocoderTask().execute(location);
        }
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        locationClient.connect();
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        locationClient.disconnect();
    }

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

    }

    @Override
    public void onConnectionFailed(ConnectionResult result) {

    }

    @Override
    public void onConnected(Bundle connectionHint) {
        try {

            Location currentLocation = locationClient.getLastLocation();
            double lat = currentLocation.getLatitude();
            double lng = currentLocation.getLongitude();
            // txtLocation.setText(lat + ", " + lng);

            Geocoder geocoder = new Geocoder(this);

            ArrayList<Address> address = (ArrayList<Address>) geocoder
                    .getFromLocation(currentLocation.getLatitude(),
                            currentLocation.getLongitude(), 5);
            Address addr = address.get(0);
            String currentAddress = (addr.getAddressLine(0) + "-"
                    + addr.getAdminArea() + "-" + addr.getLocality() + "-"
                    + addr.getPostalCode() + "-" + addr.getCountryCode());
            MarkerOptions options = new MarkerOptions();
            options.position(new LatLng(lat, lng));
            options.title(currentAddress);
            options.snippet("Current location");
            options.icon(BitmapDescriptorFactory
                    .defaultMarker(BitmapDescriptorFactory.HUE_AZURE));
            if (googleMap != null) {
                googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
                        new LatLng(lat, lng), 14.0f));
                googleMap.addMarker(options);
            } else {
                Toast.makeText(getApplicationContext(), "Map is null",
                        Toast.LENGTH_LONG).show();
            }

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    @Override
    public void onDisconnected() {
        // TODO Auto-generated method stub

    }

    // An AsyncTask class for accessing the GeoCoding Web Service
    private class GeocoderTask extends
            AsyncTask<String, Void, ArrayList<Address>> {

        @Override
        protected ArrayList<Address> doInBackground(String... locationName) {
            // Creating an instance of Geocoder class
            Geocoder geocoder = new Geocoder(getBaseContext());
            ArrayList<Address> addresses = null;

            try {
                // Getting a maximum of 3 Address that matches the input text
                addresses = (ArrayList<Address>) geocoder.getFromLocationName(
                        locationName[0], 3);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return addresses;
        }

        @Override
        protected void onPostExecute(ArrayList<Address> addresses) {

            if (addresses == null || addresses.size() == 0) {
                Toast.makeText(getBaseContext(), "No Location found",
                        Toast.LENGTH_SHORT).show();
                return;
            }

            // Clears all the existing markers on the map
            googleMap.clear();

            // Adding Markers on Google Map for each matching address
            for (int i = 0; i < addresses.size(); i++) {

                Address address = (Address) addresses.get(i);

                // Creating an instance of GeoPoint, to display in Google Map
                LatLng latLng;
                latLng = new LatLng(address.getLatitude(),
                        address.getLongitude());

                String addressText = String.format(
                        "%s, %s",
                        address.getMaxAddressLineIndex() > 0 ? address
                                .getAddressLine(0) : "", address
                                .getCountryName());
                MarkerOptions markerOptions = new MarkerOptions();
                // markerOptions = new MarkerOptions();
                markerOptions.position(latLng);
                markerOptions.title(addressText);

                googleMap.addMarker(markerOptions);

                // Locate the first location
                if (i == 0)
                    googleMap.animateCamera(CameraUpdateFactory
                            .newLatLng(latLng));
            }
        }
    }


    public class AddItemizedOverlay extends ItemizedOverlay<OverlayItem> {

           /*................. Add this method ........*/

           public boolean onTouchEvent(MotionEvent event, MapView mapView)
           {  

               if (event.getAction() == 1) {               
                   GeoPoint geopoint = googleMap.getProjection().fromPixels(
                       (int) event.getX(),
                       (int) event.getY());
                   // latitude
                   double lat = (geopoint).getLatitudeE6() / 1E6;
                   // longitude
                   double lon = (geopoint).getLongitudeE6() / 1E6;

                Toast.makeText(getBaseContext(), "Lat: " + lat + ", Lon: "+lon, Toast.LENGTH_SHORT).show();
               }                           
               return false;
           }

        }
}

0 个答案:

没有答案