2012-05-13 9 views
1

私の場所を使用緯度経度とDB緯度経度計算距離。しかし、常にエラー "アプリケーションAndroidGoogleMaps(プロセスcom.androidhive.googlemaps)が予期せず停止しました。もう一度やり直してください。私の場所を使用緯度経度とDB緯度経度計算距離

public class AndroidGoogleMapsActivity extends MapActivity { 

public int mm[][]= new int[100][100]; 
double[][] rtdist= new double[50][2]; 
double[][] okdist= new double[50][2]; 
public GeoPoint[] endpp = new GeoPoint[100]; 
private static String KEY_SUCCESS = "success"; 
private MyLocationOverlay mylayer; 
private MapController mapController; 
private MapView mapView; 
protected GeoPoint geoPoint; 

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

private void findViews() { 
     mapView = (MapView) findViewById(R.id.mapView); 
     mapController = mapView.getController(); 
     mapView.setBuiltInZoomControls(true);   
} 

private void setupMap() { 
List<Overlay> overlays = mapView.getOverlays(); 
    mylayer = new MyLocationOverlay(this, mapView); 
    mylayer.runOnFirstFix(new Runnable() { 
     public void run() { 
      // Zoom in to current location 
      mapView.setTraffic(true); 
      mapController.setZoom(17); 
      mapController.animateTo(mylayer.getMyLocation()); 
     } 
    }); 

overlays.add(mylayer); 
GeoPoint startpp = mylayer.getMyLocation(); 

     String b="SELECT lat,lng FROM markers"; 
    UserFunctions userFunction = new UserFunctions(); 
    JSONObject json = userFunction.execqlcmd(b); 

    try { 
     if (json.getString(KEY_SUCCESS) != null) 
     { 
      String res = json.getString(KEY_SUCCESS); 
      if(Integer.parseInt(res) == 1) 
      { 

       for(int i=0 ; i<100 ; i++) { 

       JSONObject json_row = json.getJSONObject("r"+i); 

    mm[i][0]=(int)(Double.parseDouble(json_row.getString("c0")) * 1E6) ; 
mm[i][1]=(int)(Double.parseDouble(json_row.getString("c1")) * 1E6) ; 
    endpp[i] =new GeoPoint(mm[i][0], mm[i][1]); 

     MapController mc = mapView.getController(); 

DistanceCalculator caldist= new DistanceCalculator(6371); 

for(int j = 0; j < 2; j++) 
    { 
    rtdist[j][0]=1; 
    rtdist[j][1]=caldist.CalculationByDistance(startpp, endpp[j]); 

    //startpp The location of the phone is 
    //endpp DB's lat lng 

    //To judge the results of this array is in line with the distance required by the user 
    if(rtdist[j][1]<=50) 
    { 
    okdist[j][0]=rtdist[j][0]; //The amount of store 
    okdist[j][0]=rtdist[j][1]; //Store the distance 
    } 

    } 

    mc.animateTo(geoPoint); 
    mc.setZoom(15); 
    mapView.invalidate(); 

     List<Overlay> mapOverlays = mapView.getOverlays(); 

    Drawable drawable = this.getResources().getDrawable(R.drawable.mark_red); 
    AddItemizedOverlay itemizedOverlay = 
    new AddItemizedOverlay(drawable, this); 

    OverlayItem overlayitem = new OverlayItem(geoPoint, "Hello", "Sample Overlay item"); 
    itemizedOverlay.addOverlay(overlayitem); 

    mapOverlays.add(itemizedOverlay); 


    }}}} 
    catch (JSONException e) { 
     e.printStackTrace(); 
    } 

} 

    @Override 
protected void onResume() { 
// TODO Auto-generated method stub 
super.onResume(); 
mylayer.enableMyLocation(); 
} 
@Override 
protected void onPause() { 
// TODO Auto-generated method stub 
super.onPause(); 
mylayer.disableMyLocation(); 
} 

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

     private double Radius; 

     // R = earth's radius (mean radius = 6,371km) 
     // Constructor 
     DistanceCalculator(double R) { 
      Radius = R; 
     } 


    public double CalculationByDistance(GeoPoint startpp, GeoPoint endpp) { 
      double lat1 = startpp.getLatitudeE6()/1E6; 
      double lat2 = endpp.getLatitudeE6()/1E6; 
      double lon1 = startpp.getLongitudeE6()/1E6; 
      double lon2 = endpp.getLongitudeE6()/1E6; 
      double dLat = Math.toRadians(lat2-lat1); 
      double dLon = Math.toRadians(lon2-lon1); 
      double a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
      Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * 
      Math.sin(dLon/2) * Math.sin(dLon/2); 
      double c = 2 * Math.asin(Math.sqrt(a)); 
      return Radius * c; 
     } 
    } 
} 

LogCat:あなたは2つの地点間の距離を計算する場合

05-13 14:49:44.703: D/dalvikvm(303): GC_FOR_MALLOC freed 4358 objects/275032 bytes in 316ms 
05-13 14:49:44.903: D/dalvikvm(303): GC_FOR_MALLOC freed 10567 objects/641664 bytes in 58ms 
05-13 14:49:45.063: D/dalvikvm(303): GC_FOR_MALLOC freed 4727 objects/310440 bytes in 45ms 
05-13 14:49:45.243: D/dalvikvm(303): GC_FOR_MALLOC freed 6480 objects/394584 bytes in 48ms 
05-13 14:49:45.443: D/dalvikvm(303): GC_FOR_MALLOC freed 7949 objects/616640 bytes in 51ms 
05-13 14:49:45.623: D/dalvikvm(303): GC_FOR_MALLOC freed 6072 objects/370040 bytes in 51ms 
05-13 14:49:45.813: D/dalvikvm(303): GC_FOR_MALLOC freed 4449 objects/354128 bytes in 62ms 
05-13 14:49:45.823: I/dalvikvm-heap(303): Grow heap (frag case) to 3.048MB for 87396-byte allocation 
05-13 14:49:45.884: D/dalvikvm(303): GC_FOR_MALLOC freed 45 objects/2392 bytes in 66ms 
05-13 14:49:45.953: D/dalvikvm(303): GC_FOR_MALLOC freed 2 objects/80 bytes in 67ms 
05-13 14:49:45.953: I/dalvikvm-heap(303): Grow heap (frag case) to 3.129MB for 87396-byte allocation 
05-13 14:49:46.013: D/dalvikvm(303): GC_FOR_MALLOC freed 0 objects/0 bytes in 58ms 
05-13 14:49:46.273: E/JSON(303): {"tag":"exesqlcmd","success":1,"error":0,"rownum":2,"colnum":2,"r0":{"c0":"23.973728","c1":"121.583641"},"r1":{"c0":"23.973827","c1":"121.585625"}} 
05-13 14:49:46.293: D/AndroidRuntime(303): Shutting down VM 
05-13 14:49:46.293: W/dalvikvm(303): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
05-13 14:49:46.313: E/AndroidRuntime(303): FATAL EXCEPTION: main 
05-13 14:49:46.313: E/AndroidRuntime(303): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.androidhive.googlemaps/com.androidhive.googlemaps.AndroidGoogleMapsActivity}: java.lang.NullPointerException 
05-13 14:49:46.313: E/AndroidRuntime(303): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
05-13 14:49:46.313: E/AndroidRuntime(303): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
05-13 14:49:46.313: E/AndroidRuntime(303): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
05-13 14:49:46.313: E/AndroidRuntime(303): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
05-13 14:49:46.313: E/AndroidRuntime(303): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-13 14:49:46.313: E/AndroidRuntime(303): at android.os.Looper.loop(Looper.java:123) 
05-13 14:49:46.313: E/AndroidRuntime(303): at android.app.ActivityThread.main(ActivityThread.java:4627) 
05-13 14:49:46.313: E/AndroidRuntime(303): at java.lang.reflect.Method.invokeNative(Native Method) 
05-13 14:49:46.313: E/AndroidRuntime(303): at java.lang.reflect.Method.invoke(Method.java:521) 
05-13 14:49:46.313: E/AndroidRuntime(303): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
05-13 14:49:46.313: E/AndroidRuntime(303): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
05-13 14:49:46.313: E/AndroidRuntime(303): at dalvik.system.NativeStart.main(Native Method) 
05-13 14:49:46.313: E/AndroidRuntime(303): Caused by: java.lang.NullPointerException 
05-13 14:49:46.313: E/AndroidRuntime(303): at com.androidhive.googlemaps.AndroidGoogleMapsActivity$DistanceCalculator.CalculationByDistance(AndroidGoogleMapsActivity.java:178) 
05-13 14:49:46.313: E/AndroidRuntime(303): at com.androidhive.googlemaps.AndroidGoogleMapsActivity.setupMap(AndroidGoogleMapsActivity.java:106) 
05-13 14:49:46.313: E/AndroidRuntime(303): at com.androidhive.googlemaps.AndroidGoogleMapsActivity.onCreate(AndroidGoogleMapsActivity.java:41) 
05-13 14:49:46.313: E/AndroidRuntime(303): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
05-13 14:49:46.313: E/AndroidRuntime(303): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
05-13 14:49:46.313: E/AndroidRuntime(303): ... 11 more 
+0

calculationByDistanceは(、)それは私がこのhttp://www.codecodex.com/wiki/Calculate_distance_between_two_points_on_a_globe –

+0

を資産計上している理由の方法で私はそれはそれはそれは私が変更小文字 – user1176220

+0

参照だ –

答えて

0

は、あなたが場所のクラスでは、これらの2つのメソッドを参照してくださいする必要があり

Location Class

あなたがそれを使用することができますこのように:

Location locationA = new Location("point A"); 

locationA.setLatitude(latA); 
locationA.setLongitude(lngA); 

Location locationB = new Location("point B"); 

locationB.setLatitude(latB); 
LocationB.setLongitude(lngB); 

distance = locationA.distanceTo(locationB); 
関連する問題