Italian google maps - Percorso tra due punti

ken87

Active Member
Licensed User
Ciao stavo cercando di tracciare una linea in due punti della mappa:
La prima è calcolata dal mio programma , altra da programma Google map,
ecco il mio codice:

B4X:
#Region  Project Attributes
    #ApplicationLabel: B4A Example
    #VersionCode: 1
    #VersionName:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: unspecified
    #CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
    #AdditionalJar: com.google.android.gms:play-services-maps
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.

End Sub

Sub Globals
    Private gmap As GoogleMap
    Dim cp As CameraPosition
  
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
    Public MapFragment1 As MapFragment
    Private area_mappa As MapFragment
    Dim l1, l2 As LatLng
  
End Sub

Sub Activity_Create(FirstTime As Boolean)
  
    Activity.LoadLayout("mappa")
    If MapFragment1.IsGooglePlayServicesAvailable = False Then
        ToastMessageShow("Please install Google Play Services.", True)
    End If

End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub


Sub area_mappa_Ready
    gmap = area_mappa.GetMap
    cp.Initialize(39.3106447,8.536623599999984, 9.5)
    gmap.AnimateCamera(cp)
    Dim m1 As Marker = gmap.AddMarker(39.0632229,8.4546907,"Partenza")
    m1.Snippet = "Punto di partenza"
    l1.Initialize(39.0632229,8.4546907)
    l2.Initialize(39.335568,8.55117)
    Dim pl As Polyline = gmap.AddPolyline
    Dim points As List
    points.Initialize
    points.Add(l1)
    points.Add(l2)
    pl.points = points
    pl.Color = Colors.Blue
  
  
End Sub
Con il mio codice fa una semplice linea (Allegato 2) , mentre con google map fa una linea dettagliata (Allegato 1).
Come faccio ad ottenere lo stesso risultato di google map?
 

Attachments

sirjo66

Well-Known Member
Licensed User
Quello che vuoi fare tu non è una linea, semmai è un tracciato (o percorso, chiamalo come vuoi)
E' ovvio che se usi il comando AddPolyline ti traccerà una linea
Devi cercare sulla documentazione come calcolare un tracciato
 

ken87

Active Member
Licensed User
Ciao ho trovato questo codice per il web

B4X:
<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <title>Travel Modes in Directions</title>
    <style>
      /* Always set the map height explicitly to define the size of the div
       * element that contains the map. */
      #map {
        height: 100%;
      }
      /* Optional: Makes the sample page fill the window. */
      html, body {
        height: 100%;
        margin: 0;
        padding: 0;
      }
      #floating-panel {
        position: absolute;
        top: 10px;
        left: 25%;
        z-index: 5;
        background-color: #fff;
        padding: 5px;
        border: 1px solid #999;
        text-align: center;
        font-family: 'Roboto','sans-serif';
        line-height: 30px;
        padding-left: 10px;
      }
    </style>
  </head>
  <body>
    <div id="floating-panel">
    <b>Mode of Travel: </b>
    <select id="mode">
      <option value="DRIVING">Driving</option>
      <option value="WALKING">Walking</option>
      <option value="BICYCLING">Bicycling</option>
      <option value="TRANSIT">Transit</option>
    </select>
    </div>
    <div id="map"></div>
    <script>
      function initMap() {
        var directionsDisplay = new google.maps.DirectionsRenderer;
        var directionsService = new google.maps.DirectionsService;
        var map = new google.maps.Map(document.getElementById('map'), {
          zoom: 14,
          center: {lat: 39.0623156, lng:8.4547815}
        });
        directionsDisplay.setMap(map);

        calculateAndDisplayRoute(directionsService, directionsDisplay);
        document.getElementById('mode').addEventListener('change', function() {
          calculateAndDisplayRoute(directionsService, directionsDisplay);
        });
      }

      function calculateAndDisplayRoute(directionsService, directionsDisplay) {
        var selectedMode = document.getElementById('mode').value;
        directionsService.route({
          origin: {lat: 39.0623156 , lng:8.4547815 },  // Haight.
          destination: {lat:39.31224, lng:8.54547500000001},  // Ocean Beach.
          // Note that Javascript allows us to access the constant
          // using square brackets and a string value as its
          // "property."
          travelMode: google.maps.TravelMode[selectedMode]
        }, function(response, status) {
          if (status == 'OK') {
            directionsDisplay.setDirections(response);
          } else {
            window.alert('Directions request failed due to ' + status);
          }
        });
      }
    </script>
    <script async defer
    src="https://maps.googleapis.com/maps/api/js?key=Key&callback=initMap">
    </script>
  </body>
Come faccio ad utilizzare la funzione nel mio programma di prova?
Posso inserire la finzione java nel mio sorgente?
Grazie mille
 

Filippo

Expert
Licensed User
Quello che ti serve è questo
 

marcick

Well-Known Member
Licensed User
Il problema è che adesso (da giugno) con Google il routing è a pagamento e la richiesta credo dovrebbe essere accompagnata da una ApiKey, associata allo sviluppatore, che deve depositare i dati della carta di credito ...
C'è una quota di utilizzo gratuita, ma comunque vogliono la tua carta.
 

ken87

Active Member
Licensed User
Ciao,
Non ti confermo che ho trovato soluzione nel forum, e la chiave si può usare senza pagare nulla.
Ho un altro problema, carico i diversi punti nella mappa Maker.
ho provato con questa istruzione
B4X:
Marker.Remove
ma non succede nulla
 

marcick

Well-Known Member
Licensed User
Non so di quale soluzione parli, magari un link è utile. Google adesso offre 200$ al mese di utilizzo gratuito, oltre il quale fatturano. Ma anche per l’utilizzo gratuito devi depositare la carta di credito (vogliono la garanzia che se sfori hanno dove prelevare).
Tutti questi nuovi meccanismi entrano in funzione adesso. Dicevano 16 giugno, poi è diventato luglio, ma siamo qui.

Il marker con cui usi remove deve essere lo stesso oggetto con cui hai fatto add.
Cioè quando li piazzi devi salvarti in una mappa gli oggetti marker che potrai più usare per il remove.
 

marcick

Well-Known Member
Licensed User
Mah. Parli così per sensazioni.
Dalla console di Google maps platform vedi tutto in estremo dettaglio. Fai una richiesta di Geocoding, piuttosto che di routing o di StreetView con una certa ApiKey e vedrai il relativo contatore incrementarsi di uno. In tempo quasi reale.
 

Filippo

Expert
Licensed User
Per l'uso con i cellulari e tablet la Api è sempre gratis, la carta di credito viene richiesta solo per la verifica del cliente.
Questo è quello che ho capito io! (L'ha scritto anche Erel a qualche parte)

Ma anche se non fosse così, per superare la soglia dei 200$ bisognano moltissime richieste, moltissime richieste sono uguali a moltissimi clienti, quindi anche moltissimi downloads, quindi anche qualche soldino.
Alla fine se ci guadagni qualche cosa, puoi pure spendere qualche cosa, o no? ;)
 

marcick

Well-Known Member
Licensed User
No.
Sono gratuite solo le API per la visualizzazione delle mappe statiche.
Il Routing (itinerario da A a B), geocoding (ottenimento indirizzo da coordinate), StreetView e molto altro è diventato a pagamento.
La carta di credito è obbligatoria altrimenti ti viene bloccato il progetto con tutte le API che utilizzi (incluso quelle gratuite). Non ho provato a non metterla perchè non ho progetti che utilizzano solo API gratuite, ma sono abbastanza convinto che sia così.
Superare o meno i 200$ dipende da che app hai sviluppato, che servizi utilizzano e da quante ne hai in giro, ma è molto più facile di quanto puoi credere.
Google non è babbo natale e sono assolutamente d'accordo che pretenda un ritorno economico dai servizi che mette a disposizione. Ma sono furibondo per il fatto che abbiano avvisato solo un mese prima di questo cambiamento. Spiegare ai clienti che quello che fino a ieri era gratuito oggi diventa a pagamento non è stato facile.
 

LucaMs

Expert
Licensed User
Spiegare ai clienti che quello che fino a ieri era gratuito oggi diventa a pagamento non è stato facile.
Da non dimenticare che se tu, invece, pubblichi un'app come gratuita, poi non puoi più metterla a pagamento.
Credo che tu possa aggiungerci in un secondo tempo le vendite in-app.
 

marcick

Well-Known Member
Licensed User
O aggiungi in-app o ti fai pagare per altre vie conteggiando le chiamate API che fanno.
 

marcick

Well-Known Member
Licensed User
nel senso che ogni chiamata API la puoi contare in un tuo database e scalare dei punti da un credito virtuale. E quando il cliente finisce i punti blocchi l'utilizzo della funzione finchè non ricarica. Devi mettere in piedi un po' di roba con un server, ovvio
 

LucaMs

Expert
Licensed User
nel senso che ogni chiamata API la puoi contare in un tuo database e scalare dei punti da un credito virtuale. E quando il cliente finisce i punti blocchi l'utilizzo della funzione finchè non ricarica. Devi mettere in piedi un po' di roba con un server, ovvio
Ma parli di API di Google, giusto (rimanendo in tema)? Questo era soprattutto ciò che non avevo capito.
 
Top