0

Android に Google マップ API V2 を実装しました。次のコードを使用して、表示するマップと表示するポリゴンを取得しました。

public class MainActivity extends FragmentActivity {
Polygon polygon;
@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

GoogleMap googleMap;
googleMap = ((SupportMapFragment)(getSupportFragmentManager().findFragmentById(R.id.map))).getMap();
LatLng latLng = new LatLng(35.20418,-90.08342);
googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
googleMap.addMarker(new MarkerOptions()
        .position(latLng)
        .title("My Spot")
        .snippet("This is my spot!")
        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
googleMap.getUiSettings().setCompassEnabled(true);
googleMap.getUiSettings().setZoomControlsEnabled(true);
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10));

int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());
if(status == ConnectionResult.SUCCESS) {
//Success! Do what you want

Log.i("service", "Google play available");
}
else{
Log.i("service", "No Google play available");
}

PolygonOptions rectOptions = new PolygonOptions()
.add(new LatLng(35.25010,-90.08342),
 new LatLng(35.25010,-90.04175),
 new LatLng(35.29177,-90.04175),
 new LatLng(35.29177,-90.08342),
 new LatLng(35.25010,-90.08342));


//Set the rectangle's stroke color to red
 rectOptions.strokeColor(Color.BLUE);
//Set the rectangle's fill to blue
rectOptions.fillColor(Color.CYAN);
rectOptions.strokeWidth(2);
//Get back the mutable Polygon
polygon = googleMap.addPolygon(rectOptions);

}

}

Google マップ API V1 では、このonTapメソッドを使用してポリゴンを操作します。私の質問は、バージョン 2 で onTap イベントを取得する最良の方法は何ですか? Google ドキュメントを読みましたが、見落としがない限り、何も表示されませんでした。

4

3 に答える 3

0

ポリゴンの2つの連続するポイントごとに、ユーザーのクリックに応答するポイントで方向を確認する必要があります。これは、3番目の座標が0の3点から作成された行列の行列式の符号をチェックすることで行われます。次の関数を例にとってみましょう。

public boolean orientation(float lat1, float lon1, float lat2, float lon2, float lat3, float lon3){
     float result = lat1*lon2 + lat2*lon3 + lat3*lon1 - lon2*lat3 - lon3*lat1 - lon1*lat2;
     if(result >= 0) return true;
     else return false;
}

辺を形成するポリゴンのすべてのポイントに対して関数を呼び出すと、それらすべてが同じ結果を返します。ポイントはポリゴンの内側にあります。

于 2013-03-20T22:10:38.557 に答える
0

今のところ、OnMapClickListenerを使用して、「ポリゴン内のポイント」アルゴリズムを自分で実装する必要があります(googleで簡単に見つけられる実装があります)。

于 2013-03-20T20:37:35.517 に答える