我在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文档,除非我错过了,否则我没有看到任何内容。
答案 0 :(得分:2)
尝试使用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));
答案 1 :(得分:1)
现在你将不得不使用OnMapClickListener并自己实现“point inside polygon”算法(谷歌很容易找到实现)。
答案 2 :(得分:0)
您需要检查多边形的每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;
}
当您为构成边的多边形的所有点调用该函数时,所有这些点都返回相同的结果 - 该点位于多边形内部。