2

AndroidにGoogleマップを表示したい ユーザー編集テキスト値latとlangと場所名に基づいて、最後に検索ボタンをクリックすると、マップがAndroidに表示されました。

4

2 に答える 2

3

のようなオブジェクトを作成する必要があります。

MapView mapView; 
MapController mc;
GeoPoint p;
String add = "";
double lattitude ;
double longitude;

名前で場所を検索し、マップを表示します。

 AlertDialog.Builder alert = new AlertDialog.Builder(this);

        alert.setTitle("Search Location");
        alert.setMessage("Enter Location Name: ");

        // Set an EditText view to get user input 
        final EditText input = new EditText(this);
        alert.setView(input);

        alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
          String value = input.getText().toString();
          // Do something with value!
          Log.d("value", value);

          Geocoder geoCoder = new Geocoder(getBaseContext(), Locale.getDefault());    
            try {
                List<Address> addresses = geoCoder.getFromLocationName(
                    value, 5);
                String add = "";
                if (addresses.size() > 0) {
                    p = new GeoPoint(
                            (int) (addresses.get(0).getLatitude() * 1E6), 
                            (int) (addresses.get(0).getLongitude() * 1E6));
                    mc.animateTo(p);    
                    mapView.invalidate();
                }    
            } catch (IOException e) {
                e.printStackTrace();
            }


          }
        });

        alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialog, int whichButton) {
            // Canceled.
          }
        });

        alert.show();

    }

緯度と経度を入力して場所を検索し、地図を表示します..

    searchUsingLangLat()
    {       

        LayoutInflater factory = LayoutInflater.from(this);            
        final View textEntryView = factory.inflate(R.layout.latlong, null);

        AlertDialog.Builder alert = new AlertDialog.Builder(this);

        alert.setTitle("Search Location");
        alert.setMessage("Enter Lattitude and Longitude: ");

        alert.setView(textEntryView); 
        // Set an EditText view to get user input
        AlertDialog latLongPrompt = alert.create();

        final EditText lat = (EditText) textEntryView.findViewById(R.id.lat);
        final EditText longi = (EditText) textEntryView.findViewById(R.id.longi);
    //alert.setView(lat);
        //alert.setView(longi);

        alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {

            Toast.makeText(getBaseContext(), "clicked ok ", Toast.LENGTH_SHORT).show();
          Double value1 = Double.parseDouble(lat.getText().toString());
          Double value2 = Double.parseDouble(longi.getText().toString());
          // Do something with value!
         // Log.d("value1", value1);
          //Log.d("value2", value2);

          p = new GeoPoint(
                    (int) (value1 * 1E6), 
                    (int) (value2 * 1E6));

                mc.animateTo(p);
                mc.setZoom(17); 
                mapView.invalidate();


          }
        });

        alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialog, int whichButton) {
            // Canceled.
          }
        });

        alert.show();

最後に、マップを表示する必要があります。onCreate() メソッドに次のコードを記述します。

mapView = (MapView) findViewById(R.id.mapView);
    LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);  
    View zoomView = mapView.getZoomControls(); 

    zoomLayout.addView(zoomView, 
        new LinearLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, 
            LayoutParams.WRAP_CONTENT)); 
    mapView.displayZoomControls(true);

    mc = mapView.getController();
    String coordinates[] = {"1.352566007", "103.78921587"};
    double lat = Double.parseDouble(coordinates[0]);
    double lng = Double.parseDouble(coordinates[1]);

    p = new GeoPoint(
        (int) (lat * 1E6), 
        (int) (lng * 1E6));

    mc.setCenter(p);
    mc.setZoom(17); 

    //---Add a location marker---
    MapOverlay mapOverlay = new MapOverlay();
    List<Overlay> listOfOverlays = mapView.getOverlays();
    listOfOverlays.clear();
    listOfOverlays.add(mapOverlay);      


    LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 500.0f, this);

このコードを試してください...エラーが発生した場合は、無料でお問い合わせください。

于 2012-05-05T12:31:27.837 に答える
0

多数の場所の緯度と経度を SQLite データベースに保存すると、これらの値を取得し、それぞれを OverlayItem クラスに配置して、Google のマップ コードで使用できます!!

  1. データベース名: データベース
  2. テーブル名: 場所

所定のフィールド テーブル:

  1. id タイトル 説明 緯度 経度

次のようなクエリを実行します。

SELECT title, description, latitude, longitude
FROM place

これは、次のように Android で実行できます。

    // get your database object here using your DbHelper object and the
    // method getReadableDatabase();
    ArrayList<OverlayItem> items = new ArrayList<OverlayItem>();
    Cursor locationCursor = databaseObject.query("place", new String[] {
            "title", "description", "latitude", "longitude" }, null, null,
            null, null, null);

    locationCursor.moveToFirst();
    do {
        String title = locationCursor.String(locationCursor
                .getColumnIndex("title"));
        String description = locationCursor.String(locationCursor
                .getColumnIndex("description"));
        int latitude = (int) (locationCursor.getDouble(locationCursor
                .getColumnIndex("latitude")) * 1E6);
        int longitude = (int) (locationCursor.getDouble(locationCursor
                .getColumnIndex("longitude")) * 1E6);

        items.add(new OverlayItem(new GeoPoint(latitude, longitude), title,
                description));
    } while (locationCursor.moveToNext());

Android は緯度/経度値の整数表現を使用するため、1e6 で double 値を計る必要があります。データベースに入力するときにすでにこれに対処している場合は、乗算をスキップして locationCursor.getInt(...) を使用してください。

于 2012-05-05T12:36:36.427 に答える