【问题标题】:Java android google maps change color polyline where I wasJava android 谷歌地图改变我所在的颜色折线
【发布时间】:2019-04-11 05:27:43
【问题描述】:

这就是我绘制折线的方式:

 List<LatLng> latLngsList = new ArrayList<>();
            for (LegsItem leg : response.body().getRoutes().get(0).getLegs()) {
                for (StepsItem step : leg.getSteps()) {
                    List<LatLng> latLngs = PolyUtil.decode(step.getGeometry());
                    step.setLatLngs(latLngs);
                    latLngsList.addAll(latLngs);
                }
            }

            Polyline polyline1 = googleMap.addPolyline(new PolylineOptions()
                    .addAll(latLngsList));

我在黑色上绘制它,但是当我在折线上(在 LatLtg 中)时,我想将颜色更改为蓝色。为了检测我是否正确,我使用以下内容:

mMap.setOnMyLocationChangeListener 

并检查第一个未完成的点是否在 2 m 附近:

double dis = currentLocation.distanceTo(location);

但它不能正常工作

【问题讨论】:

    标签: java android google-maps


    【解决方案1】:

    您可以使用函数 distanceBetween 计算两个位置之间的近似距离(以米为单位),以及它们之间最短路径的初始方位和最终方位。

    public static boolean checkDistance(LatLng oldPosition, LatLng newPosition) {
            float[] results = new float[1];
            Location.distanceBetween(oldPosition.latitude, oldPosition.longitude,
                    newPosition.latitude, newPosition.longitude, results);
            return results[0] <= 50.0;
        }
    

    这里我设置了最小距离 50 米。如果您当前的位置(纬度)在折线纬度的 50 米内,这些将返回 true。

    【讨论】:

      【解决方案2】:

      colors.xml中定义颜色值

      colors.xml

      <?xml version="1.0" encoding="utf-8"?>
      <resources>
          <color name="blue">#0000EE</color>
      </resources>
      

      并像这样设置颜色:-

      Polyline line = mMap.addPolyline(new PolylineOptions()
                      .addAll(list)
                      .color(R.color.blue));
      

      编辑

      mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {
                  @Override
                  public void onMyLocationChange(Location location) {
      
                      for (LatLng nLatLng : latLngsList) {
      
                          double latitude = nLatLng.latitude;
                          double longitude = nLatLng.longitude;
                          double myLat = location.getLatitude();
                          double myLong = location.getLongitude();
      
                          if (latitude == myLat && longitude == myLong) {
      
      
                              Polyline polyline1 = googleMap.addPolyline(new PolylineOptions()
                                      .add(nLatLng)
                                      .color(R.color.blue));
                          } /*else {
                              Polyline polyline1 = googleMap.addPolyline(new PolylineOptions()
                                      .add(nLatLng)
                                      .color(R.color.black));
                          }*/
                      }
      
      
                  }
              });
      

      update-polyline-according-to-the-user-moving-android-googlemaps

      【讨论】:

      • 好的,但是我如何检测我是否在那里
      • 您提到您使用了mMap.setOnMyLocationChangeListener,并且此方法为您提供了您当前的位置。在该位置显示标记。您还可以计算两点之间的距离或LatLng
      猜你喜欢
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      • 2014-07-07
      • 2014-12-31
      • 1970-01-01
      相关资源
      最近更新 更多