私は場所のアドレスのリストを持っています。私の現在の場所から、私は最も近い場所を取得する必要があり、地図上に表示する必要があります。どのように私は現在の場所から最も近い場所を得ることができます。最初に私は現在の位置を緯度と経度で取得し、次にどのように最寄り駅を取得します。与えられたデータから現在の場所から最も近い場所を見つける方法を教えてください。
おかげ
私は場所のアドレスのリストを持っています。私の現在の場所から、私は最も近い場所を取得する必要があり、地図上に表示する必要があります。どのように私は現在の場所から最も近い場所を得ることができます。最初に私は現在の位置を緯度と経度で取得し、次にどのように最寄り駅を取得します。与えられたデータから現在の場所から最も近い場所を見つける方法を教えてください。
おかげ
あなたは経度がこれだけ最短距離で、この式と表示アドレスを使用して、現在の場所と場所のアドレスgeopointsのリストの間の距離を見つけるあなたの現在の場所の緯度を持っています。まず、あなたが持っているそれぞれの場所のLattitude & Longitude
を取得し、各場所の距離を見つけるあなたの現在の場所からLocation
クラスのdistanceToメソッドを使用して、その後、あなたからの最低距離を見つけるそして、あなたの現在のlocation
Lattitude & Longitude
を取得
private double distance(double lat1, double lon1, double lat2, double lon2) {
// haversine great circle distance approximation, returns meters
double theta = lon1 - lon2;
double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2))
+ Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2))
* Math.cos(deg2rad(theta));
dist = Math.acos(dist);
dist = rad2deg(dist);
dist = dist * 60; // 60 nautical miles per degree of seperation
dist = dist * 1852; // 1852 meters per nautical mile
return (dist);
}
private double deg2rad(double deg) {
return (deg * Math.PI/180.0);
}
private double rad2deg(double rad) {
return (rad * 180.0/Math.PI);
}
距離の単位は何を見つけました場所のリストから? –
リスト。ステップバイ
ステップ、場所の最寄りの場所のリストを取得する方法
。
ステップ1:置きAPI
https://code.google.com/apis/console/
を取得するためのAPIコンソールに移動して、場所のサービスのサービス]タブ
に選択
今、今あなたが場所
プログラミングで今
を取得するためのAPIキーを持っているAPIアクセス]タブを選択し、APIキー
を取得*ステップ2 *:まず、Place.javaという名前のクラスを作成します。このクラスは、プレイスAPIによって提供される場所のプロパティを格納するために使用されます。
package com.android.code.GoogleMap.NearsetLandmark;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.json.JSONException;
import org.json.JSONObject;
public class Place {
private String id;
private String icon;
private String name;
private String vicinity;
private Double latitude;
private Double longitude;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public Double getLatitude() {
return latitude;
}
public void setLatitude(Double latitude) {
this.latitude = latitude;
}
public Double getLongitude() {
return longitude;
}
public void setLongitude(Double longitude) {
this.longitude = longitude;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getVicinity() {
return vicinity;
}
public void setVicinity(String vicinity) {
this.vicinity = vicinity;
}
static Place jsonToPontoReferencia(JSONObject pontoReferencia) {
try {
Place result = new Place();
JSONObject geometry = (JSONObject) pontoReferencia.get("geometry");
JSONObject location = (JSONObject) geometry.get("location");
result.setLatitude((Double) location.get("lat"));
result.setLongitude((Double) location.get("lng"));
result.setIcon(pontoReferencia.getString("icon"));
result.setName(pontoReferencia.getString("name"));
result.setVicinity(pontoReferencia.getString("vicinity"));
result.setId(pontoReferencia.getString("id"));
return result;
} catch (JSONException ex) {
Logger.getLogger(Place.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
@Override
public String toString() {
return "Place{" + "id=" + id + ", icon=" + icon + ", name=" + name + ", latitude=" + latitude + ", longitude=" + longitude + '}';
}
}
は、今すぐあなたが最寄りの場所のリストを取得する新しいアクティビティを作成でPlacesService
package com.android.code.GoogleMap.NearsetLandmark;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class PlacesService {
private String API_KEY;
public PlacesService(String apikey) {
this.API_KEY = apikey;
}
public void setApiKey(String apikey) {
this.API_KEY = apikey;
}
public List<Place> findPlaces(double latitude, double longitude,String placeSpacification)
{
String urlString = makeUrl(latitude, longitude,placeSpacification);
try {
String json = getJSON(urlString);
System.out.println(json);
JSONObject object = new JSONObject(json);
JSONArray array = object.getJSONArray("results");
ArrayList<Place> arrayList = new ArrayList<Place>();
for (int i = 0; i < array.length(); i++) {
try {
Place place = Place.jsonToPontoReferencia((JSONObject) array.get(i));
Log.v("Places Services ", ""+place);
arrayList.add(place);
} catch (Exception e) {
}
}
return arrayList;
} catch (JSONException ex) {
Logger.getLogger(PlacesService.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
//https://maps.googleapis.com/maps/api/place/search/json?location=28.632808,77.218276&radius=500&types=atm&sensor=false&key=api key
private String makeUrl(double latitude, double longitude,String place) {
StringBuilder urlString = new StringBuilder("https://maps.googleapis.com/maps/api/place/search/json?");
if (place.equals("")) {
urlString.append("&location=");
urlString.append(Double.toString(latitude));
urlString.append(",");
urlString.append(Double.toString(longitude));
urlString.append("&radius=1000");
// urlString.append("&types="+place);
urlString.append("&sensor=false&key=" + API_KEY);
} else {
urlString.append("&location=");
urlString.append(Double.toString(latitude));
urlString.append(",");
urlString.append(Double.toString(longitude));
urlString.append("&radius=1000");
urlString.append("&types="+place);
urlString.append("&sensor=false&key=" + API_KEY);
}
return urlString.toString();
}
protected String getJSON(String url) {
return getUrlContents(url);
}
private String getUrlContents(String theUrl)
{
StringBuilder content = new StringBuilder();
try {
URL url = new URL(theUrl);
URLConnection urlConnection = url.openConnection();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()), 8);
String line;
while ((line = bufferedReader.readLine()) != null)
{
content.append(line + "\n");
}
bufferedReader.close();
}
catch (Exception e)
{
e.printStackTrace();
}
return content.toString();
}
}
という名前のクラスを作成します。
/** * */
public class CheckInActivity extends ListActivity{
@Override
protected void onCreate(Bundle arg0) {
// TODO Auto-generated method stub
super.onCreate(arg0);
new GetPlaces(this, getListView()).execute();
}
class GetPlaces extends AsyncTask<Void, Void, Void>{
private ProgressDialog dialog;
private Context context;
private String[] placeName;
private String[] imageUrl;
private ListView listView;
public GetPlaces(Context context, ListView listView) {
// TODO Auto-generated constructor stub
this.context = context;
this.listView = listView;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
dialog.dismiss();
listView.setAdapter(new ArrayAdapter<String>(context, android.R.layout.simple_expandable_list_item_1,placeName));
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
dialog = new ProgressDialog(context);
dialog.setCancelable(true);
dialog.setMessage("Loading..");
dialog.isIndeterminate();
dialog.show();
}
@Override
protected Void doInBackground(Void... arg0) {
// TODO Auto-generated method stub
PlacesService service = new PlacesService("AIzaSyDIRAipDcVMf1FGYHEGDRzvLv0SFH46uRQ");
List<Place> findPlaces = service.findPlaces(28.632808,77.218276,"hospital"); // hq for hospital
// atm for ATM
placeName = new String[findPlaces.size()];
imageUrl = new String[findPlaces.size()];
for (int i = 0; i < findPlaces.size(); i++) {
Place placeDetail = findPlaces.get(i);
placeDetail.getIcon();
System.out.println( placeDetail.getName());
placeName[i] =placeDetail.getName();
imageUrl[i] =placeDetail.getIcon();
}
return null;
}
}
}
このサンプルコードを私に教えてもらえますか? –
逆はそれらをジオコードして、最寄りの場所 – ingsaurabh