1

我的 android 应用程序中有一个谷歌地图,上面有一个简单的硬编码标记。我在 mysql db 中保存了一些带有纬度和经度的数据,我想从 mysql db 中读取这些数据,然后在我的 google 地图上显示它在 android .我的意思是如何从我的 mysql 数据库数据中制作地图。这是我的加载地图的代码,具有简单的硬编码标记。

更新

 package com.javacodegeeks.android.googlemaps;

import java.util.List;

import android.graphics.drawable.Drawable;
import android.os.Bundle;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

//import android.app.ListActivity;
import android.net.ParseException;
//import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;



public class GMapsActivity extends MapActivity {

private MapView mapView;

JSONArray jArray;
String result = null;
InputStream is = null;
StringBuilder sb=null;

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

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

 ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
//http post
try{
     HttpClient httpclient = new DefaultHttpClient();
     HttpPost httppost = new HttpPost("http://sml.com.pk/a/map.php");
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
     HttpResponse response = httpclient.execute(httppost);
     HttpEntity entity = response.getEntity();
     is = entity.getContent();
     }catch(Exception e){
         Log.e("log_tag", "Error in http connection"+e.toString());
    }
//convert response to string
try{
      BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
       sb = new StringBuilder();
       sb.append(reader.readLine() + "\n");

       String line="0";
       while ((line = reader.readLine()) != null) {
                      sb.append(line + "\n");
        }
        is.close();
        result=sb.toString();
        }catch(Exception e){
              Log.e("log_tag", "Error converting result "+e.toString());
        }
//paring data
double LAT;
double LANG;
String INFO;
try{
      jArray = new JSONArray(result);
      JSONObject json_data=null;
      for(int i=0;i<jArray.length();i++){
             json_data = jArray.getJSONObject(i);
             LAT=json_data.getDouble("LAT");
             LANG=json_data.getDouble("LANG");
             INFO=json_data.getString("INFO");


//Overlay code
List<Overlay> mapOverlays = mapView.getOverlays();
                Drawable drawable = this.getResources().getDrawable(R.drawable.icon);
        CustomItemizedOverlay itemizedOverlay = new CustomItemizedOverlay(drawable, this);

        //GeoPoint point = new GeoPoint(latitudeE6, longitudeE6);
        GeoPoint point = new GeoPoint((int)(LAT * 1e6),(int)(LANG * 1e6));
        OverlayItem overlayitem = new OverlayItem(point, "", INFO);
        itemizedOverlay.addOverlay(overlayitem);
        mapOverlays.add(itemizedOverlay);

        MapController mapController = mapView.getController();

        mapController.animateTo(point);
        mapController.setZoom(6);

//Overlay code

         }
      }
      catch(JSONException e1){
          Toast.makeText(getBaseContext(), "No City Found" ,Toast.LENGTH_LONG).show();
      } catch (ParseException e1) {
            e1.printStackTrace();
    }
}
@Override
protected boolean isRouteDisplayed() {
    return false;
}
}
4

1 回答 1

0

你可以这样做

ArrayList<Data> dynamicData=getData();
    if(dynamicData!=null)
    {
        for(int i=0;i<dynamicData.size();i++)
        {
            Drawable drawable = this.getResources().getDrawable(R.drawable.icon);
            CustomItemizedOverlay itemizedOverlay = new CustomItemizedOverlay(drawable, this);

            //GeoPoint point = new GeoPoint(latitudeE6, longitudeE6);
            GeoPoint point = new GeoPoint((int)(Double.parseDouble(dynamicData.get(i).lat) * 1e6),(int)(Double.parseDouble(dynamicData.get(i).lon) * 1e6));
            OverlayItem overlayitem = new OverlayItem(point, "SML", "Shakarganj Mills Limited Jhang");

            itemizedOverlay.addOverlay(overlayitem);
            mapOverlays.add(itemizedOverlay);
        }
    }

public static ArrayList<MapData> getData() {
    try {

        String URL = "http://sml.com.pk/a/map.php";
        HttpParams httpparams = new BasicHttpParams();

        SchemeRegistry registry = new SchemeRegistry();
        registry.register(new Scheme("http", new PlainSocketFactory(), 80));

        DefaultHttpClient client = new DefaultHttpClient(
                new ThreadSafeClientConnManager(httpparams, registry),
                httpparams);

        HttpGet httpGet = new HttpGet(URL);

        HttpResponse response = client.execute(httpGet);
        String string_response = EntityUtils.toString(response.getEntity(),
                "UTF-8");
        JSONArray JsonResponse;
        try {
            JsonResponse = new JSONArray(string_response);

            ArrayList<MapData> list = new ArrayList<MapData>();
            for (int i = 0; i < JsonResponse.length(); i++) {
                String GPS = JsonResponse.getJSONObject(i).getString("GPS");
                String temp[] = GPS.split(",");
                MapData apoint = new MapData();
                apoint.lat = temp[0];
                apoint.lon = temp[1];
                list.add(apoint);

            }
            return list;
        } catch (JSONException e) {
            e.printStackTrace();
            return null;
        }
    } catch (ClientProtocolException e) {
        e.printStackTrace();
        return null;
    } catch (IOException e) {

        e.printStackTrace();
        return null;

    }


}

 public static class MapData {
        public String lat;
        public String lon;
    }
于 2012-07-05T05:27:55.887 回答