0

私のアプリケーションでは、ユーザーがデータを挿入するときに、ユーザーの正確な場所をキャプチャしたいと考えています。私は非常に多くの方法を試しました。しかし、どれも正確な場所を示していませんでした。(国と管理地域の詳細のみを表示するという意味でした。getLocality と getFeatureName を使用しました。その緯度と経度で Locality または Featurename が見つからない場合は、null 値が返されます)。私のコードは

Geocoder coder=new Geocoder(MainActivity.mContext,Locale.getDefault());
    try
    {
        List<Address> listaddress=coder.getFromLocation(lat, lon, 1);
        Address obj=listaddress.get(0);
        String add=obj.getAddressLine(0);
        add = add+"\n"+obj.getLatitude();
        add = add+","+obj.getLongitude();
        add = add + "," + obj.getCountryName();
        add = add + "," + obj.getAdminArea();
        add = add + "\n" + obj.getPostalCode();//null
        add = add + "," + obj.getSubAdminArea();
        add = add +","+obj.getFeatureName();//null
        add = add+ "," +obj.getPremises();//null
        add = add + "\n" + obj.getLocality();//null
        add = add + "," + obj.getSubThoroughfare();//null
        add = add+ "," +obj.getSubLocality();//null
        add = add+"\n"+obj.getThoroughfare();

        Log.v("IGA", "Address" + add);
        //Toast.makeText(this, "Address=>" + add,Toast.LENGTH_SHORT).show();
        t.setText(" "+add);


    }

だから私はそれを解決する方法がわかりません。しかし、私には考えがあります。その場所を使用できるように、正確な緯度と経度の値に最も近い場所を見つける必要があります。しかし、最も近い場所を見つける方法がわかりません (最も近い場所とは、他の場所ではなく、村または通りを意味します)。

また、Android フォンには、1 つのアプリケーション「Places」があります。私が正確にどこにいるかについての正しいエリアを示しています。アプリケーション「場所」を使用して、正確な場所または最寄りの場所を見つける可能性はありますか? (subAdminArea (state) ではなく、最も近い村または通りが必要です。はいの場合は説明してください。

誰でも私を助けてくれますか

4

2 に答える 2

0
   private class MatchingNearByLocationTask extends
        AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // Showing progress dialog
        progressDialog = new ProgressDialog(getContext());
        progressDialog.setMessage("Loading...");
        progressDialog.setCancelable(true);
        progressDialog.show();

    }

    @Override
    protected Void doInBackground(Void... arg0) {

        jsonStr = getLocationInfo(latitude, longitude).toString(); // put longitude and      latitude value from which u want find nearer palce
        if (jsonStr != null) {
            Log.i("location--??", jsonStr);

            JSONObject jsonObj;
            try {
                jsonObj = new JSONObject(jsonStr);

                JSONObject responseJsonObject = jsonObj
                        .getJSONObject("response");

                JSONArray venues = responseJsonObject
                        .getJSONArray(("venues"));

                for (int index = 0; index < venues.length(); index++) {

                    locationObject = new NearByLocationObject();

                    String id = "", name = "", longitude = "", latitude = "";

                    JSONObject venuesJsonObj = venues.getJSONObject(index);

                    id = venuesJsonObj.getString("id");
                    name = venuesJsonObj.getString("name");

                    JSONObject latLngJsonObj = venuesJsonObj
                            .getJSONObject("location");

                    longitude = latLngJsonObj.getString("lng");
                    latitude = latLngJsonObj.getString("lat");

                    locationObject.setId(id);
                    locationObject.setNameOfLocation(name);
                    locationObject.setLocationOfLatitude(latitude);
                    locationObject.setLocationOfLongitude(longitude);

                    nearByLocationArrayList.add(locationObject);

                }

            } catch (JSONException e) {

                e.printStackTrace();
            }

        }

        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        // Dismiss the progress dialog
        if (progressDialog.isShowing()) {
            progressDialog.dismiss();
        }

        adapter = new NearByLocationArrayAdapter(getContext(),
                R.layout.nearby_location_item, nearByLocationArrayList);
        nearByLocationListView.setAdapter(adapter);
    }

    @Override
    protected void onCancelled() {

        super.onCancelled();
        progressDialog.dismiss();

    }

}

private JSONObject getLocationInfo(double lat, double lng) {

    HttpGet httpGet = new HttpGet(
            "https://api.foursquare.com/v2/venues/search?ll="
                    + lat
                    + ","
                    + lng
                    + "&radius=100&oauth_token=TNFKWLITLCJYWPSLAXQNHCSDPHZ4IS5PWVDD45OI224JGFFM&v=20140407&intent=checkin");
    HttpClient client = new DefaultHttpClient();
    HttpResponse response;
    StringBuilder stringBuilder = new StringBuilder();

    try {
        response = client.execute(httpGet);
        HttpEntity entity = response.getEntity();
        InputStream stream = entity.getContent();
        int b;
        while ((b = stream.read()) != -1) {
            stringBuilder.append((char) b);
        }
    } catch (ClientProtocolException e) {
    } catch (IOException e) {
    }

    JSONObject jsonObject = new JSONObject();
    try {
        jsonObject = new JSONObject(stringBuilder.toString());
    } catch (JSONException e) {
        e.printStackTrace();
    }

    return jsonObject;
}



public class NearByLocationObject {

String id = "", nameOfLocation, locationOfLatitude, LocationOfLongitude;

public NearByLocationObject() {
    super();
    // TODO Auto-generated constructor stub
}

public NearByLocationObject(String id, String nameOfLocation,
        String locationOfLatitude, String locationOfLongitude) {
    super();
    this.id = id;
    this.nameOfLocation = nameOfLocation;
    this.locationOfLatitude = locationOfLatitude;
    LocationOfLongitude = locationOfLongitude;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getNameOfLocation() {
    return nameOfLocation;
}

public void setNameOfLocation(String nameOfLocation) {
    this.nameOfLocation = nameOfLocation;
}

public String getLocationOfLatitude() {
    return locationOfLatitude;
}

public void setLocationOfLatitude(String locationOfLatitude) {
    this.locationOfLatitude = locationOfLatitude;
}

public String getLocationOfLongitude() {
    return LocationOfLongitude;
}

public void setLocationOfLongitude(String locationOfLongitude) {
    LocationOfLongitude = locationOfLongitude;
}

}

于 2014-07-07T12:03:35.313 に答える
0

Google リバース ジオコーディング API を使用すると、緯度と緯度の値を指定することで、実際の住所を取得できます。

Android の GPS 受信機を介して緯度と緯度を取得する

次に、Google リバース ジオコーディング API を呼び出して、実際の住所を取得します。

  MapManager in = new MapManager(
                    "http://maps.google.com/maps/geo?output=xml&oe=utf-8&ll="
                            + lattitude                             + "%2C"
                            + lantitude                         + "&key=get-key-from-google-map-api");
            content = in.URLRequest();
            System.out.println("Addrss:"+in.parseMapData(content));

Class MapManager{
  String url ="";

  MapManager(String url){
         this.url = url;
  }

  public String parseMapData(String data) {
            String addr = "";
            try {
                InputStream in = new ByteArrayInputStream(data.getBytes());
                DocumentBuilder builder = DocumentBuilderFactory.newInstance()
                        .newDocumentBuilder();
                Document doc = builder.parse(in, null);
                NodeList address = doc.getElementsByTagName("address");
                addr = address.item(0).getTextContent();
            } catch (Throwable t) {
                Log.v("Exception", "Exception: " + t.toString());
            }
            return addr;
        }



     public String URLRequest() {

        httpclient = new DefaultHttpClient();
        try {
            httpget = new HttpGet(url);
            httpresponse = httpclient.execute(httpget);
            httpentity = httpresponse.getEntity();
            response = EntityUtils.toString(httpentity);
            response = response.trim();
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            IsServerConn = false;
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (Exception e) {
            IsServerConn = false;
        }
        return response;

    }

}
于 2013-01-10T05:03:35.363 に答える