2017-08-22 25 views
2

Heloo i'am是android studio中的新手,我做了一個名爲BTS Locator的項目,它在2天內混淆了兩個標記的距離。所以圓圈中心的標記是抱怨,另一個是BTS。那麼我想顯示距離抱怨BTS,有人可以幫我嗎? enter image description here如何在Android Studio中顯示半徑爲2的標記的顯示距離

所以這裏是我的maps.activity

package com.example.jody_pc.btslocator; 

import android.content.DialogInterface; 
import android.content.Intent; 
import android.support.v4.app.FragmentActivity; 
import android.os.Bundle; 
import android.support.v7.app.AlertDialog; 
import android.util.Log; 

import com.android.volley.Request; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.JsonArrayRequest; 
import com.android.volley.toolbox.Volley; 
import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.Circle; 
import com.google.android.gms.maps.model.CircleOptions; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.Marker; 
import com.google.android.gms.maps.model.MarkerOptions; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 

    private GoogleMap mMap; 
    String lat,lng; 
    Double latitude,longitude; 
    private Circle mCircle; 
    private String[] id,vendor,cellname,tower_id,total_tilt,site_name,bsc_rnc,lac,ci,bcch,bsid_rncid,site_id,dir,ant_height,status_site,cell_type,cluster_name,band,kecamatan,kabupaten; 
    int numData; 
    LatLng latLng[]; 
    Boolean markerD[]; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_maps); 
     // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 

     Bundle b = getIntent().getExtras(); 

     lat = b.getString("lat"); 
     lng = b.getString("lng"); 



     latitude = Double.parseDouble(lat); 
     longitude = Double.parseDouble(lng); 



     sekitar(); 
    } 


    /** 
    * Manipulates the map once available. 
    * This callback is triggered when the map is ready to be used. 
    * This is where we can add markers or lines, add listeners or move the camera. In this case, 
    * we just add a marker near Sydney, Australia. 
    * If Google Play services is not installed on the device, the user will be prompted to install 
    * it inside the SupportMapFragment. This method will only be triggered once the user has 
    * installed Google Play services and returned to the app. 
    */ 
    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 

     // Add a marker in Sydney and move the camera 
     LatLng latlng = new LatLng(latitude, longitude); 


     mMap.addMarker(new MarkerOptions().position(latlng)); 
     mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlng, 14.5f)); 
     drawMarkerWithCircle(latlng); 

     //mMap.setOnInfoWindowClickListener(this); 

    } 

    private void drawMarkerWithCircle(LatLng latlng) { 
     double radiusInMeters = 2500.0; 
     int strokeColor = 0xffff0000; //red outline 
     int shadeColor = 0x44ff0000; //opaque red fill 

     CircleOptions circleOptions = new CircleOptions().center(latlng).radius(radiusInMeters).fillColor(shadeColor).strokeColor(strokeColor).strokeWidth(8); 
     mCircle = mMap.addCircle(circleOptions); 
    } 

    private void sekitar(){ 
     String url = "http://bts.telkompolines.com/sekitar.php?lat="+lat+"&&lng="+lng; 
     /*String url = "https://devonly.000webhostapp.com/conn.php";*/ 
     JsonArrayRequest request = new JsonArrayRequest 
       (Request.Method.GET, url, new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         numData = response.length(); 
         Log.d("DEBUG_", "Parse JSON"); 
         latLng = new LatLng[numData]; 
         markerD = new Boolean[numData]; 
         /*nama = new String[numData];*/ 
         vendor = new String[numData]; 
         site_name = new String[numData]; 
         tower_id = new String[numData]; 
         bsc_rnc = new String[numData]; 
         lac = new String[numData]; 
         ci = new String[numData]; 
         bcch = new String[numData]; 
         bsid_rncid = new String[numData]; 
         site_id = new String[numData]; 
         dir = new String[numData]; 
         ant_height = new String[numData]; 
         total_tilt = new String[numData]; 
         status_site = new String[numData]; 
         cell_type = new String[numData]; 
         cluster_name = new String[numData]; 
         band = new String[numData]; 
         kecamatan = new String[numData]; 
         kabupaten = new String[numData]; 
         id = new String[numData]; 
         cellname = new String[numData]; 

         for (int i = 0; i < numData; i++) { 
          JSONObject data = null; 
          try { 
           data = response.getJSONObject(i); 
           id[i] = data.getString("id"); 
           latLng[i] = new LatLng(data.getDouble("lat"), 
             data.getDouble("lng")); 
           vendor[i] = data.getString("vendor"); 
           cellname[i] = data.getString("cellname"); 
           kabupaten [i] = data.getString("kabupaten"); 
           tower_id [i] = data.getString("tower_id"); 
           bsc_rnc [i] = data.getString("tower_id"); 
           lac [i] = data.getString("lac"); 
           ci [i] = data.getString("ci"); 
           bcch [i] = data.getString("bcch"); 
           bsid_rncid [i] = data.getString("bsid_rncid"); 
           site_id [i] = data.getString("site_id"); 
           site_name [i] = data.getString("site_name"); 
           dir [i] = data.getString("dir"); 
           ant_height [i] = data.getString("ant_height"); 
           total_tilt [i] = data.getString("total_tilt"); 
           status_site [i] = data.getString("status_site"); 
           cell_type [i] = data.getString("cell_type"); 
           cluster_name [i] = data.getString("cluster_name"); 
           band [i] = data.getString("band"); 
           kecamatan [i] = data.getString("kecamatan"); 



           markerD[i] = false; 
           mMap.addMarker(new MarkerOptions() 
             .position(latLng[i]) 
             .title(site_name[i])); 
           final int finalI = i; 
           mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 
            @Override 
            public boolean onMarkerClick(Marker marker) { 
             Intent detail = new Intent(getApplicationContext(), DetailActivity.class); 
             Bundle b = new Bundle(); 
             LatLng position = marker.getPosition(); 
             /*Double x = position.latitude; 
             Double y = position.longitude; 

             String lat = Double.toString(x); 
             String lng = Double.toString(y);*/ 

             b.putString("cellname", cellname[finalI]); 
             b.putString("id", id [finalI]); 
             b.putString("vendor", vendor[finalI]); 
             b.putString("kabupaten", kabupaten[finalI]); 
             b.putString("tower_id", tower_id[finalI]); 
             b.putString("bsc_rnc", bsc_rnc[finalI]); 
             b.putString("lac", lac[finalI]); 
             b.putString("ci", ci[finalI]); 
             b.putString("bcch", bcch[finalI]); 
             b.putString("bsid_rncid", bsid_rncid[finalI]); 
             b.putString("site_id", site_id[finalI]); 
             b.putString("site_name", site_name[finalI]); 
             b.putString("dir", dir[finalI]); 
             b.putString("ant_height", ant_height[finalI]); 
             b.putString("total_tilt", total_tilt[finalI]); 
             b.putString("status_site", status_site[finalI]); 
             b.putString("cell_type", cell_type[finalI]); 
             b.putString("cluster_name", cluster_name[finalI]); 
             b.putString("band", band[finalI]); 
             b.putString("kecamatan", kecamatan[finalI]); 
             b.putString("lat", String.valueOf(position.latitude).toString()); 
             b.putString("lng", String.valueOf(position.longitude).toString()); 
             detail.putExtras(b); 
             startActivity(detail); 

             return false; 
            } 
           }); 



          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 
          mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng[i], 15.5f)); 
         } 
        } 

       }, new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         AlertDialog.Builder builder = new AlertDialog.Builder(MapsActivity.this); 
         builder.setTitle("Error!"); 
         builder.setMessage("No Internet Connection"); 
         builder.setIcon(android.R.drawable.ic_dialog_alert); 
         builder.setPositiveButton("Refresh", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           sekitar(); 
          } 
         }); 
         AlertDialog alert = builder.create(); 
         alert.show(); 
        } 
       }); 
     Volley.newRequestQueue(this).add(request); 
    } 


} 

回答

0

您應該使用Location.distanceBetween方法來計算你的中心點和點擊標記之間米的距離。

在你onMarkerClick()像做以下(假設你要像你與所有其他BTS做相關的數據傳遞的距離信息):

float[] results = new float[3]; 
Location.distanceBetween(self.latitude, self.longitude, position.latitude, position.longitude, results); 
b.putString("distance_in_meters", String.valueOf(results[0])); 
+0

u能告訴我如何採取緯度和經度json放置Location.distanceBetween?在此先感謝 – rifkyjody

+0

我想到的方式是使用單擊的標記位置LatLng position = marker.getPosition();您已經在您的volley onResponse方法中解析JSON。你究竟想達到什麼目的? – linakis

相關問題