定義された境界に基づいて、GoogleMaps で位置をランダムに生成するアプリがあります。したがって、最初にランダムな LatLng を生成し、次にこのポイントが境界内にあるかどうかを確認します。であれば、有効です。
Builder builder = new LatLngBounds.Builder();
double antartica[] = {-62.5670958528642, -59.92767333984375, -62.584805850293485, -59.98260498046875, -62.61450963659083};
for (int i = 0; i < antartica.length; i++) {
builder.include(new LatLng(antartica[i],antartica[++i]));
}
pAntarctica = builder.build();
LatLng point = generateRandomPosition();
if(isWithinBoundaries(point))
return point;
else
return getValidPoint();
したがって、この後、私は有効なポイントになります。私の問題は、Google マップで有効なポイントがストリートビューで有効であるとは限らないことです。
このランダムなポイントは、まだストリートビューにマッピングされていない地球上のどこかにある可能性があります。そこでも有効である必要があります。
このリンクに続く JavaScript API v3 を使用してこれを実現できることは承知しています。
次のようにします。
var latLng = new google.maps.LatLng(12.121221, 78.121212);
streetViewService.getPanoramaByLocation(latLng, STREETVIEW_MAX_DISTANCE, function (streetViewPanoramaData, status) {
if (status === google.maps.StreetViewStatus.OK) {
//ok
} else {
//no ok
}
});
しかし、私はAndroidのみを使用してこれを行うことを望んでいます。ちなみに、 Google Maps v2 Android ではなく、Google Play Services API を使用しています。
誰でも光を当てることができますか?
編集: ラタナの提案に従って、これは私がこれまでに持っているものです:
svpView.getStreetViewPanoramaAsync(new OnStreetViewPanoramaReadyCallback() {
@Override
public void onStreetViewPanoramaReady(final StreetViewPanorama panorama) {
for(final LatLng point : points) {
System.out.println(point.latitude + " " + point.longitude);
panorama.setPosition(point, 1000);
final CountDownLatch latch = new CountDownLatch(1);
mHandlerMaps.post(new Runnable() {
@Override
public void run() {
if (panorama.getLocation() != null) {
System.out.println("not null " + panorama.getLocation().position);
writeToFile(panorama.getLocation().position.toString());
l.add(point);
}
latch.countDown();
}
});
try {
latch.await(4, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(l.toString());
}
});