在Android中使用Google maps API V2实现多边形

我在Android上实现了Google maps 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文档,除非我错过了,否则我没有看到任何内容。

尝试使用Polygon并阅读此链接。

 https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/model/Polygon GoogleMap map; Polygon polygon = map.addPolygon(new PolygonOptions() .add(new LatLng(0, 0), new LatLng(0, 5), new LatLng(3, 5), new LatLng(0, 0)) .strokeColor(Color.RED) .fillColor(Color.BLUE)); 

现在你将不得不使用OnMapClickListener并自己实现“点内多边形”算法(谷歌很容易找到实现)。

您需要检查多边形的每2个连续点的方向,并确定响应用户单击的方向。 这是通过检查由3个点和第三个坐标0构成的矩阵的行列式的符号来完成的。以此函数为例:

 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; } 

当您为形成边的多边形的所有点调用该函数时,所有这些点都返回相同的结果 – 该点位于多边形内部。