<tfoot id='aiI0z'></tfoot>
  • <legend id='aiI0z'><style id='aiI0z'><dir id='aiI0z'><q id='aiI0z'></q></dir></style></legend>

    <small id='aiI0z'></small><noframes id='aiI0z'>

        <i id='aiI0z'><tr id='aiI0z'><dt id='aiI0z'><q id='aiI0z'><span id='aiI0z'><b id='aiI0z'><form id='aiI0z'><ins id='aiI0z'></ins><ul id='aiI0z'></ul><sub id='aiI0z'></sub></form><legend id='aiI0z'></legend><bdo id='aiI0z'><pre id='aiI0z'><center id='aiI0z'></center></pre></bdo></b><th id='aiI0z'></th></span></q></dt></tr></i><div id='aiI0z'><tfoot id='aiI0z'></tfoot><dl id='aiI0z'><fieldset id='aiI0z'></fieldset></dl></div>

          <bdo id='aiI0z'></bdo><ul id='aiI0z'></ul>

      1. Android Google Map如何检查gps位置是否在圆圈内

        时间:2023-09-02
            <tbody id='JtBhA'></tbody>

          • <legend id='JtBhA'><style id='JtBhA'><dir id='JtBhA'><q id='JtBhA'></q></dir></style></legend>
            • <tfoot id='JtBhA'></tfoot>
            • <i id='JtBhA'><tr id='JtBhA'><dt id='JtBhA'><q id='JtBhA'><span id='JtBhA'><b id='JtBhA'><form id='JtBhA'><ins id='JtBhA'></ins><ul id='JtBhA'></ul><sub id='JtBhA'></sub></form><legend id='JtBhA'></legend><bdo id='JtBhA'><pre id='JtBhA'><center id='JtBhA'></center></pre></bdo></b><th id='JtBhA'></th></span></q></dt></tr></i><div id='JtBhA'><tfoot id='JtBhA'></tfoot><dl id='JtBhA'><fieldset id='JtBhA'></fieldset></dl></div>
                <bdo id='JtBhA'></bdo><ul id='JtBhA'></ul>
              • <small id='JtBhA'></small><noframes id='JtBhA'>

                  本文介绍了Android Google Map如何检查gps位置是否在圆圈内的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  我正在尝试使用用户 gps 位置检测用户是否在 Marker 的半径内.我有标记的坐标,但我不知道如何计算用户是否在该区域内.我尝试使用以下内容,但即使当前位置在圆圈内,我也会不断收到外部"消息.

                  I'm trying to detect if a user is in the radius of a Marker , using the users gps location. I have the marker's coordinates, but I don't know how to calculate whether the user is in the area. I've tried to use the following, but even when the current location is inside the circle I keep getting the "outside" message.

                  public class MapaEscola extends FragmentActivity {
                  
                      private GoogleMap googleMap;
                      private Serializable escolas;
                      private ProgressDialog dialog;
                      private Circle mCircle;
                      private Marker mMarker;
                  
                  
                  
                      @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
                      @Override
                      protected void onCreate(Bundle savedInstanceState) {
                          super.onCreate(savedInstanceState);
                  
                          getActionBar().setDisplayHomeAsUpEnabled(true);
                          getActionBar().setHomeButtonEnabled(true);
                  
                          setContentView(R.layout.maps);
                  
                          // Loading map
                          initilizeMap();
                  
                          // Changing map type
                          googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                  
                          // Showing / hiding your current location
                          googleMap.setMyLocationEnabled(true);
                  
                          // Enable / Disable zooming controls
                          googleMap.getUiSettings().setZoomControlsEnabled(true);
                  
                          // Enable / Disable my location button
                          googleMap.getUiSettings().setMyLocationButtonEnabled(true);
                  
                          // Enable / Disable Compass icon
                          googleMap.getUiSettings().setCompassEnabled(true);
                  
                          // Enable / Disable Rotate gesture
                          googleMap.getUiSettings().setRotateGesturesEnabled(true);
                  
                          // Enable / Disable zooming functionality
                          googleMap.getUiSettings().setZoomGesturesEnabled(true);
                  
                          Bundle extra = getIntent().getBundleExtra("extra");
                          ArrayList<Escolas> objects = (ArrayList<Escolas>) extra.getSerializable("array");
                  
                  
                          try {
                  
                              for(int i = 0; i < objects.size(); i ++) {
                                  System.out.println(" escolas " + objects.get(i).getLatitude() + " " + objects.get(i).getLongitude());
                  
                                  float latitude = objects.get(i).getLatitude();
                                  float longitude = objects.get(i).getLongitude();
                  
                                  googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(-23.316281, -51.155528), 15));
                  
                                  MarkerOptions options = new MarkerOptions();
                  
                                  // Setting the position of the marker
                  
                                  options.position(new LatLng(latitude, longitude));
                  
                                  googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
                  
                                  LatLng latLng = new LatLng(latitude, longitude);
                                  drawMarkerWithCircle(latLng);
                  
                  
                                  googleMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {
                                      @Override
                                      public void onMyLocationChange(Location location) {
                                          float[] distance = new float[2];
                  
                                          Location.distanceBetween( mMarker.getPosition().latitude, mMarker.getPosition().longitude,
                                                  mCircle.getCenter().latitude, mCircle.getCenter().longitude, distance);
                  
                                          if( distance[0] > (mCircle.getRadius() / 2)  ){
                                              Toast.makeText(getBaseContext(), "Outside", Toast.LENGTH_LONG).show();
                                          } else {
                                              Toast.makeText(getBaseContext(), "Inside", Toast.LENGTH_LONG).show();
                                          }
                  
                                      }
                                  });
                  
                  
                  
                  
                              }
                  
                  
                  
                          } catch (Exception e) {
                              e.printStackTrace();
                          }
                      }
                  
                  
                      private void drawMarkerWithCircle(LatLng position){
                          double radiusInMeters = 500.0;
                          int strokeColor = 0xffff0000; //red outline
                          int shadeColor = 0x44ff0000; //opaque red fill
                  
                          CircleOptions circleOptions = new CircleOptions().center(position).radius(radiusInMeters).fillColor(shadeColor).strokeColor(strokeColor).strokeWidth(8);
                          mCircle = googleMap.addCircle(circleOptions);
                  
                          MarkerOptions markerOptions = new MarkerOptions().position(position);
                          mMarker = googleMap.addMarker(markerOptions);
                      }
                  
                  
                  
                      private void initilizeMap() {
                  
                          if (googleMap == null) {
                              googleMap = ((MapFragment) getFragmentManager().findFragmentById(
                                      R.id.map)).getMap();
                  
                              // check if map is created successfully or not
                              if (googleMap == null) {
                                  Toast.makeText(getApplicationContext(),
                                          "Não foi possível carregar o mapa", Toast.LENGTH_SHORT)
                                          .show();
                              }
                          }
                      }
                  
                      @TargetApi(Build.VERSION_CODES.HONEYCOMB)
                      @Override
                      public void onBackPressed() {
                  
                          super.onBackPressed();
                          finish();
                  
                      }
                  
                      @Override
                      public boolean onCreateOptionsMenu(Menu menu) {
                          // TODO Auto-generated method stub
                          MenuInflater inflater = getMenuInflater();
                          inflater.inflate(R.menu.menu_main, menu);
                  
                          return super.onCreateOptionsMenu(menu);
                      }
                  
                      @TargetApi(Build.VERSION_CODES.HONEYCOMB)
                      public boolean onOptionsItemSelected(MenuItem item) {
                  
                  
                          switch (item.getItemId()) {
                  
                              case android.R.id.home:
                                  super.onBackPressed();
                                  finish();
                  
                                  return true;
                  
                  
                          }
                  
                          return true;
                  
                      }
                  
                      @Override
                      protected void onResume() {
                          super.onResume();
                          initilizeMap();
                      }
                  
                  
                  }
                  

                  推荐答案

                  我刚刚运行了更新的代码,发现主要问题是什么.

                  I just ran the updated code and figured out what the main problem is.

                  您应该使用 Location 传递给 onMyLocationChange() 回调,以便它使用您当前的位置来判断设备是否在圆圈内:

                  You should be using the Location passed into the onMyLocationChange() callback, so that it uses your current location to tell if the device is within the circle or not:

                  googleMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {
                                  @Override
                                  public void onMyLocationChange(Location location) {
                                      float[] distance = new float[2];
                  
                                      /*
                                      Location.distanceBetween( mMarker.getPosition().latitude, mMarker.getPosition().longitude,
                                              mCircle.getCenter().latitude, mCircle.getCenter().longitude, distance);
                                              */
                  
                                      Location.distanceBetween( location.getLatitude(), location.getLongitude(),
                                              mCircle.getCenter().latitude, mCircle.getCenter().longitude, distance);
                  
                                      if( distance[0] > mCircle.getRadius() ){
                                          Toast.makeText(getBaseContext(), "Outside, distance from center: " + distance[0] + " radius: " + mCircle.getRadius(), Toast.LENGTH_LONG).show();
                                      } else {
                                          Toast.makeText(getBaseContext(), "Inside, distance from center: " + distance[0] + " radius: " + mCircle.getRadius() , Toast.LENGTH_LONG).show();
                                      }
                  
                                  }
                              });
                  

                  这是我运行的完整工作示例,它是您原始代码的精简版:

                  Here is the full working example that I ran, it's a pared down version of your original code:

                  public class MainActivity extends ActionBarActivity {
                  
                      private GoogleMap googleMap;
                      private Serializable escolas;
                      private ProgressDialog dialog;
                      private Circle mCircle;
                      private Marker mMarker;
                  
                  
                  
                      @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
                      @Override
                      protected void onCreate(Bundle savedInstanceState) {
                          super.onCreate(savedInstanceState);
                  
                          getSupportActionBar().setDisplayHomeAsUpEnabled(true);
                          getSupportActionBar().setHomeButtonEnabled(true);
                  
                          setContentView(R.layout.activity_main);
                  
                          // Loading map
                          initilizeMap();
                  
                          // Changing map type
                          googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                  
                          // Showing / hiding your current location
                          googleMap.setMyLocationEnabled(true);
                  
                          // Enable / Disable zooming controls
                          googleMap.getUiSettings().setZoomControlsEnabled(true);
                  
                          // Enable / Disable my location button
                          googleMap.getUiSettings().setMyLocationButtonEnabled(true);
                  
                          // Enable / Disable Compass icon
                          googleMap.getUiSettings().setCompassEnabled(true);
                  
                          // Enable / Disable Rotate gesture
                          googleMap.getUiSettings().setRotateGesturesEnabled(true);
                  
                          // Enable / Disable zooming functionality
                          googleMap.getUiSettings().setZoomGesturesEnabled(true);
                  
                         // Bundle extra = getIntent().getBundleExtra("extra");
                          //ArrayList<Escolas> objects = (ArrayList<Escolas>) extra.getSerializable("array");
                  
                  
                          try {
                                 //test outside
                                 double mLatitude = 37.77657;
                                 double mLongitude = -122.417506;
                  
                  
                                  //test inside
                                  //double mLatitude = 37.7795516;
                                  //double mLongitude = -122.39292;
                  
                  
                                  googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(mLatitude, mLongitude), 15));
                  
                                  MarkerOptions options = new MarkerOptions();
                  
                                  // Setting the position of the marker
                  
                                  options.position(new LatLng(mLatitude, mLongitude));
                  
                                  //googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
                  
                                  LatLng latLng = new LatLng(mLatitude, mLongitude);
                                  drawMarkerWithCircle(latLng);
                  
                  
                                  googleMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {
                                      @Override
                                      public void onMyLocationChange(Location location) {
                                          float[] distance = new float[2];
                  
                                          /*
                                          Location.distanceBetween( mMarker.getPosition().latitude, mMarker.getPosition().longitude,
                                                  mCircle.getCenter().latitude, mCircle.getCenter().longitude, distance);
                                                  */
                  
                                          Location.distanceBetween( location.getLatitude(), location.getLongitude(),
                                                  mCircle.getCenter().latitude, mCircle.getCenter().longitude, distance);
                  
                                          if( distance[0] > mCircle.getRadius()  ){
                                              Toast.makeText(getBaseContext(), "Outside, distance from center: " + distance[0] + " radius: " + mCircle.getRadius(), Toast.LENGTH_LONG).show();
                                          } else {
                                              Toast.makeText(getBaseContext(), "Inside, distance from center: " + distance[0] + " radius: " + mCircle.getRadius() , Toast.LENGTH_LONG).show();
                                          }
                  
                                      }
                                  });
                  
                  
                  
                  
                          } catch (Exception e) {
                              e.printStackTrace();
                          }
                      }
                  
                  
                      private void drawMarkerWithCircle(LatLng position){
                          double radiusInMeters = 500.0;
                          int strokeColor = 0xffff0000; //red outline
                          int shadeColor = 0x44ff0000; //opaque red fill
                  
                          CircleOptions circleOptions = new CircleOptions().center(position).radius(radiusInMeters).fillColor(shadeColor).strokeColor(strokeColor).strokeWidth(8);
                          mCircle = googleMap.addCircle(circleOptions);
                  
                          MarkerOptions markerOptions = new MarkerOptions().position(position);
                          mMarker = googleMap.addMarker(markerOptions);
                      }
                  
                  
                  
                      private void initilizeMap() {
                  
                          if (googleMap == null) {
                              googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(
                                      R.id.map)).getMap();
                  
                              // check if map is created successfully or not
                              if (googleMap == null) {
                                  Toast.makeText(getApplicationContext(),
                                          "Não foi possível carregar o mapa", Toast.LENGTH_SHORT)
                                          .show();
                              }
                          }
                      }
                  
                      @TargetApi(Build.VERSION_CODES.HONEYCOMB)
                      @Override
                      public void onBackPressed() {
                  
                          super.onBackPressed();
                          finish();
                  
                      }
                  
                      @Override
                      public boolean onCreateOptionsMenu(Menu menu) {
                          // TODO Auto-generated method stub
                          MenuInflater inflater = getMenuInflater();
                          inflater.inflate(R.menu.menu_main, menu);
                  
                          return super.onCreateOptionsMenu(menu);
                      }
                  
                      @TargetApi(Build.VERSION_CODES.HONEYCOMB)
                      public boolean onOptionsItemSelected(MenuItem item) {
                  
                  
                          switch (item.getItemId()) {
                  
                              case android.R.id.home:
                                  super.onBackPressed();
                                  finish();
                  
                                  return true;
                  
                  
                          }
                  
                          return true;
                  
                      }
                  
                      @Override
                      protected void onResume() {
                          super.onResume();
                          initilizeMap();
                      }
                  
                  
                  }
                  

                  圈内结果:

                  圈外结果:

                  这篇关于Android Google Map如何检查gps位置是否在圆圈内的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:使用 json 获取当前位置 下一篇:融合的位置提供者似乎没有使用 GPS 接收器

                  相关文章

                  最新文章

                    <bdo id='YBUDr'></bdo><ul id='YBUDr'></ul>

                  <small id='YBUDr'></small><noframes id='YBUDr'>

                  1. <tfoot id='YBUDr'></tfoot>
                  2. <legend id='YBUDr'><style id='YBUDr'><dir id='YBUDr'><q id='YBUDr'></q></dir></style></legend>
                      <i id='YBUDr'><tr id='YBUDr'><dt id='YBUDr'><q id='YBUDr'><span id='YBUDr'><b id='YBUDr'><form id='YBUDr'><ins id='YBUDr'></ins><ul id='YBUDr'></ul><sub id='YBUDr'></sub></form><legend id='YBUDr'></legend><bdo id='YBUDr'><pre id='YBUDr'><center id='YBUDr'></center></pre></bdo></b><th id='YBUDr'></th></span></q></dt></tr></i><div id='YBUDr'><tfoot id='YBUDr'></tfoot><dl id='YBUDr'><fieldset id='YBUDr'></fieldset></dl></div>