Ermitteln Sie die Google Streetview-Funktion

Gibt es eine Möglichkeit zu ermitteln, ob ein Google Streetview-Panorama von einer Android-Anwendung (dh mit Java) verfügbar ist.

Für PHP oder Python oder andere serverseitige Technologien gibt es keine Alternativen.

Die Auswirkung des Aufrufs von Google Streetview, wo kein Panorama existiert, ist einfach ein schwarzer Bildschirm und eine "Spinnsache".

  • Wie überprüfe ich, ob ein TextView eine bestimmte Zeichenfolge enthält
  • Optimierung der Android-Anwendung vor der Freigabe
  • Java.lang.NullPointerException bei getapplicationContext () beim Einleiten des Adapters
  • Habpclient veraltet
  • Android - Wie ist es möglich, dass ein Dienst läuft, nachdem die Aktivität heruntergefahren wurde?
  • Wo ist Android Studio Layout Vorschau?
  • View.OnClickListener, Methode oder Klasse?
  • Stellen Sie quirk für WebView ein
  • 4 Solutions collect form web for “Ermitteln Sie die Google Streetview-Funktion”

    Ich habe dafür einen kleinen Hack geschafft. ๐Ÿ™‚

    Strings.xml

    <string name="html_streetview"> <![CDATA[ <html> <head> <script src="http://maps.google.com/maps/api/js?v=3&amp;sensor=false" type="text/javascript"></script> </head> <body> <script type="text/javascript"> Android.echo(); var testPoint = new google.maps.LatLng(%1$s, %2$s,true); var svClient = new google.maps.StreetViewService(); svClient.getPanoramaByLocation(testPoint, 50,function (panoramaData, status) { if (status == google.maps.StreetViewStatus.OK) { Android.hasStreetview(); } else { Android.hasNotStreetview(); } }); </script> </body> </html> ]]> </string> 

    Fügen Sie nun einen Button für Streetview auf die Aktivität und legen Sie diesen folgenden Code in die Onclick-Methode:

      if (webView == null) { webView = new WebView(this); webView.setVisibility(View.INVISIBLE); webView.getSettings().setJavaScriptEnabled(true); webView.addJavascriptInterface(new JavascriptCheck(this), "Android"); webView.setWebViewClient(new WebViewClient() { public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Toast.makeText(this, "Streetview loading", Toast.LENGTH_SHORT).show(); super.onReceivedError(view, errorCode, description, failingUrl); } }); } Toast.makeText(this, "Streetview loading", Toast.LENGTH_SHORT).show(); webView.loadDataWithBaseURL(baseurl, getString(R.string.html_streetview, latitude, longitude), "text/html", "UTF-8", baseurl); 

    Und jetzt die innere Klasse der Aktivität:

     public class JavascriptCheck { private final Context context; public JavascriptCheck(Context context) { this.context = context; } public void echo() { Log.d("JavascriptChecker", "javascript called"); } public void hasStreetview() { pushStreetviewState(true); } public void hasNotStreetview() { pushStreetviewState(false); } private void pushStreetviewState(final boolean hasStreetview) { Log.d("JavascriptChecker", hasStreetview); // TODO do your stuff needed here } } 

    Dies ist ein ziemlich schlechter Workaround aber wahrscheinlich helfen können. ๐Ÿ™‚

    Danke ein Bündel Alos und Steemcb, ich war mit Blick auf die Straße mit der falschen Eigenschaft oder einem leeren Bildschirm stecken. Ich hoffe, dass Google mit einem nativen Android SDK kommt, bis dahin beide Codes ROX !!

    Ich musste ein paar Anpassungen vornehmen, bevor ich den Code benutzen konnte. Hier ist meine Umsetzung.

    Strings.xml

     <string formatted="false" name="html_streetview"> &lt;html> &lt;head> &lt;script src=\"http://maps.google.com/maps?file=api&amp;amp;v=2&amp;amp;sensor=false\" type=\"text/javascript\"/> &lt;/head> &lt;body> &lt;script type=\"text/javascript\"> var testPoint = new GLatLng(%1$s, %2$s); var svClient = new GStreetviewClient(); svClient.getNearestPanoramaLatLng(testPoint,function(camera){ if (camera !== null){ lat2 = camera.lat(); lon2 = camera.lng(); lat1 = testPoint.lat(); lon1 = testPoint.lng(); dLon = lon1 - lon2; y = Math.sin(dLon) * Math.cos(lat2); x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(dLon); var bearing = Math.atan2(y, x) * (180 / Math.PI); //had to get rid of this line it was causing formatting exceptions // I moved this logic to the inner class //bearing = (bearing + 180) % 360; Android.setStreetViewAngle(bearing); } //had trouble with bearing taking long to calculate and end up with 0.0 value in the uri. So I put it in here after when bearing is calculated. Not pretty.. but it works for me svClient.getNearestPanoramaLatLng(testPoint, function (nearest) { if ((nearest !== null) &amp;&amp; (testPoint.distanceFrom(nearest) &lt;= 100)) { Android.hasStreetview(true); } else { Android.hasStreetview(false); } }); }); &lt;/script> &lt;/body> &lt;/html> </string> 

    Private innere Klasse

      private final Context context; private double bearing; public JavascriptCheck(Context context) { this.context = context; } public void hasStreetview(boolean hasStreetview) { if (hasStreetview) { String uri = "google.streetview:cbll=" + propDetailInfo.getLatitude() + "," + propDetailInfo.getLongitude() + "&cbp=1,"+ bearing + ",,1,1.0&mz=14"; Utils.printDebug("URI: " + uri); Intent streetView = new Intent(Intent.ACTION_VIEW, Uri.parse(uri)); startActivity(streetView); } else { Toast.makeText(context, "Sorry Streetview not available for this address", Toast.LENGTH_LONG).show(); } } public void setStreetViewAngle(double bearing){ bearing = (bearing + 180) % 360; this.bearing = bearing; } public void toast(String part) { Toast.makeText(context, part, Toast.LENGTH_SHORT).show(); } } 

    Nur um die hervorragende Antwort von alos weiter zu finden, hier ist ein Skript, das Ihnen den nötigen Winkel zurücksendet, damit Streetview auf die richtigen Koordinaten zeigt:

     <string name="html_streetview_bearing"> <![CDATA[ <html> <head> <script src="http://maps.google.com/maps/api/js?v=3&amp;sensor=false" type="text/javascript"></script> </head> <body> <script type=\"text/javascript\"> var testPoint = new google.maps.LatLng(%1$s, %2$s,true); var svClient = new google.maps.StreetViewService(); svClient.getPanoramaByLocation(testPoint,100,function (camera, status) { if(camera!=null) { var location = camera.location; var latLng = location.latLng; lat2 = latLng.lat(); lon2 = latLng.lng(); lat1 = testPoint.lat(); lon1 = testPoint.lng(); var dLon = lon1 - lon2; var y = Math.sin(dLon) * Math.cos(lat2); var x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(dLon); var bearing = Math.atan2(y, x) * (180 / Math.PI); Android.setStreetviewAngle(bearing); } } ); </script> </body> </html> ]]> </string> 

    Hinweis: Der Rückgabewert muss so geändert werden

     bearing = (bearing + 180) % 360; 

    Um Ihnen den richtigen Endwert zu geben. Ich mache das in nativem Code.

    AKTUALISIERTE ANTWORT: Jetzt auf Android 3.0 und höher arbeiten.

    Ein Weg, dies zu tun wäre, um Google Street View Image API verwenden, um zu überprüfen, ob Google Street View existiert oder nicht.

    https://developers.google.com/maps/documentation/streetview/

    Es gibt ein Bild mit einer anderen Dateigröße zurück, wenn Street View bei bestimmten Koordinaten existiert, als wenn es nicht geht

     http://maps.googleapis.com/maps/api/streetview?size=400x400&location=40.720032,%20-73.988354&fov=90&heading=235&pitch=10&sensor=false 

    Sie können diese Bilder vergleichen und überprüfen, ob es existiert oder nicht.

    Das Android ist ein Google Android Fan-Website, Alles รผber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.