如何在标记的位置附近搜索?

时间:2016-12-28 06:24:16

标签: android google-maps google-places-api

我的位置根据其他活动提供的意图进行更改,并且工作正常,可以显示我想要的位置LatitudeDegreeLongitudeDegree。现在我想在用户选择的地方显示其附近。如果他键入ATM然后附近的ATM应该显示等等。

这是我的代码,我有位置,我试图使用地方选择器,但我不知道我是否正确,我应该如何使用。

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback{

    private GoogleMap mMap;
    private String mAirportName;
    private int mLatitudeDegree;
    private int mLongitudeDegree;
    private int PLACE_PICKER_REQUEST = 1;

    @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);
        Intent newIntent = getIntent();
        mAirportName = newIntent.getStringExtra("airportName");
        mLatitudeDegree = newIntent.getIntExtra("latDegree", 200);
        mLongitudeDegree = newIntent.getIntExtra("lngDegree", 201);

        /*PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();

        try {
            startActivityForResult(builder.build(this), PLACE_PICKER_REQUEST);
        } catch (GooglePlayServicesRepairableException e) {
            e.printStackTrace();
        } catch (GooglePlayServicesNotAvailableException e) {
            e.printStackTrace();
        }*/
    }


    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        // Add a marker and move the camera
        LatLng latLng = new LatLng(mLatitudeDegree, mLongitudeDegree);
        mMap.addMarker(new MarkerOptions().position(latLng).title(mAirportName));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
        mMap.animateCamera(CameraUpdateFactory.zoomTo(5));
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == PLACE_PICKER_REQUEST) {
            if (resultCode == RESULT_OK) {
                Place place = PlacePicker.getPlace(data, this);
                String toastMsg = String.format("Place: %s", place.getName());
                Toast.makeText(this, toastMsg, Toast.LENGTH_LONG).show();
            }
        }
    }
}

3 个答案:

答案 0 :(得分:0)

如果您有 lat lang 附近的项目,请使用标记并标记它们。如果您还没有,则需要购买 API 或创建自己的数据库,或尝试搜索是否有可用的 API

答案 1 :(得分:0)

如果您有其他地方(例如:纺织品店)位置经度和纬度,您可以使用此方法检查用户和位置之间的距离;

 public double callDistanceToMethod(LatLng latLngStartPosition, LatLng latLngEndPosition) {

        Location endLocation = new Location("EndPosition");
        endLocation.setLatitude(latLngEndPosition.latitude);
        endLocation.setLongitude(latLngEndPosition.longitude);

        Location startLocation = new Location("StartPosition");
        startLocation.setLatitude(latLngStartPosition.latitude);
        startLocation.setLongitude(latLngStartPosition.longitude);


        double distance = startLocation.distanceTo(endLocation);
        System.out.println("Hello Distance**--->" + distance);
        return distance;
    }

如下所示调用此方法(将以米为单位返回)

Double distanceBetweenTwoLocations = callDistanceToMethod(startCoordinatesInLatLng, endCoordinatesInLatLng);

如果您现在想要,可以使用if条件

if(distanceBetweenTwoLocations <100){
// ok user is almost there in 100 meter range
// display an alert , send a push notification or anything 


}

答案 2 :(得分:0)

除了以上答案:如果您在列表或数据库中保留附近的位置,您可以通过以下算法找到最近的地方:

distancefaktor = ((currentlat-listitem_lat)*(currentlat-listitem_lat)+(currentlon-listitem_lon)*(currentlon*listitem_lon))

然后按distancefaktor对列表进行排序并取i.E.前10项。

我看到很晚,你正在研究谷歌地图。在这种情况下,你必须使用谷歌api来附近的地方:

https://developers.google.com/places/web-service/search?hl=de