Как бороться с ошибкой 0,0 маркера в Google Map Direction API? - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь создать приложение для Android и пытаюсь использовать API-интерфейс Google Map Direction, чтобы нарисовать линию между маркером 2, и когда я пытаюсь декодировать точку полилинии в JSON, полученном с сервера goole, у меня есть куча маркеровустановить рядом с позицией 0.0,0.0, как на моем скриншоте ниже

моя функция декодирования полилинии

private fun decodePoly(polylineArrayList: ArrayList<String>): List<LatLng> {
    val poly = ArrayList<LatLng>()
    var index = 0
    for (i in 0 until polylineArrayList.size-1) {
        val encoded = polylineArrayList[i]
        val len = encoded.length
        var lat = 0
        var lng = 0

        while (index < len -1) {
            var b: Int
            var shift = 0
            var result = 0
            do {
                b = encoded[index++].toInt() - 63
                result = result or (b and 0x1f shl shift)
                shift += 5
            } while (b >= 0x20 )
            val dlat = if (result and 1 != 0) (result shr 1).inv() else result shr 1
            lat += dlat

            shift = 0
            result = 0
            do {
                b = encoded[index++].toInt() - 63
                result = result or (b and 0x1f shl shift)
                shift += 5
            } while (b >= 0x20 )
            val dlng = if (result and 1 != 0) (result shr 1).inv() else result shr 1
            lng += dlng

            val p = LatLng(lat.toDouble() / 1E5,
                    lng.toDouble() / 1E5)
            poly.add(p)
        }
    }
    return poly
}

вот код, где я рисую линию (я делаю в случае успехаиз моего задания asynck

private val options = PolylineOptions()
private val latLongB = LatLngBounds.Builder()
override fun onSuccess(googleDirectionData: GoogleDirectionData?) {
     val polylineArrayList = ArrayList<String>()
     for (route in googleDirectionData?.routes!!) {
          for (leg in route.legs) {
              for (step in leg.steps)
                  polylineArrayList.add(step.polyline.points)
          }
      }
      val polypts = decodePoly(polylineArrayList)
      for (point in polypts) {
          options.add(point)
          latLongB.include(point)
      }
val caisseMarker = LatLng(caisse.wsg84[0], caisse.wsg84[1])
options.add(caisseMarker)
latLongB.include(caisseMarker)
val bounds = latLongB.build()
// add polyline to the map
map.addPolyline(options)
// show map with route centered
map.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 100))
}

связка маркера около 0.0,0.0

кто-то знал, как это исправить, чтобы больше не иметь маркера для позиции 0.0, 0,0

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

да, спасибо, но я не очень-то в поисках производительности, это просто проект для стажировки, чтобы выучить kotlin, поэтому мне не нужно повышать производительность

0 голосов
/ 24 мая 2018

Если вы хотите повысить свою производительность, вы должны использовать предварительно созданные библиотеки.

Посмотрите

https://github.com/jd-alexander/Google-Directions-Android

https://github.com/bkhezry/MapDrawingTools

https://github.com/akexorcist/Android-GoogleDirectionLibrary

Простой синтаксис

GoogleDirection.withServerKey("YOUR_SERVER_API_KEY")
        .from(new LatLng(41.8838111, -87.6657851))
        .and(new LatLng(41.8766061, -87.6556908))
        .and(new LatLng(41.8909056, -87.6467561))
        .to(new LatLng(41.9007082, -87.6488802))
        .transportMode(TransportMode.DRIVING)
        .execute(new DirectionCallback() {
            @Override
            public void onDirectionSuccess(Direction direction, String rawBody) {
                if(direction.isOK()) {
                    // Do something
                } else {
                    // Do something
                }
            }

            @Override
            public void onDirectionFailure(Throwable t) {
                // Do something
            }
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...