Italian google maps - Percorso tra due punti

Discussion in 'Italian Forum' started by ken87, Jul 18, 2018.

  1. ken87

    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:

    Code:
    #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.5366235999999849.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?
     

    Attached Files:

  2. sirjo66

    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
     
    Star-Dust likes this.
  3. ken87

    ken87 Active Member Licensed User

    Ciao ho trovato questo codice per il web

    Code:
    <!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
     
  4. Filippo

    Filippo Expert Licensed User

    Quello che ti serve è questo
     
    sirjo66 likes this.
  5. marcick

    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.
     
  6. ken87

    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
    Code:
    Marker.Remove
    ma non succede nulla
     
  7. marcick

    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.
     
  8. LucaMs

    LucaMs Expert Licensed User

    ed "io" vorrei la garanzia d'avere sforato !!!
     
  9. marcick

    marcick Well-Known Member Licensed User

    Cioè?
     
  10. LucaMs

    LucaMs Expert Licensed User

    Che non puoi controllare se e quanto "sfori" e quindi se quanto di addebitino sia equo.
     
  11. marcick

    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.
     
  12. LucaMs

    LucaMs Expert Licensed User

    Esatto; anzi, quasi: scrivo per sensazioni :)
     
  13. Filippo

    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? ;)
     
  14. marcick

    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.
     
  15. LucaMs

    LucaMs Expert Licensed User

    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.
     
  16. marcick

    marcick Well-Known Member Licensed User

    O aggiungi in-app o ti fai pagare per altre vie conteggiando le chiamate API che fanno.
     
  17. LucaMs

    LucaMs Expert Licensed User

    In che zenzo?
     
  18. marcick

    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
     
  19. LucaMs

    LucaMs Expert Licensed User

    Ma parli di API di Google, giusto (rimanendo in tema)? Questo era soprattutto ciò che non avevo capito.
     
  20. marcick

    marcick Well-Known Member Licensed User

    infatti quando si va off-topic diventa un minestrone. Di la ci avrebbero già segato.
     
    LucaMs likes this.
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice