在Android的谷歌地图API V2实现多边形(Implementing polygons wit

2019-08-07 00:32发布

我实现了Android手机上的谷歌地图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);

}

}

在谷歌地图API V1的onTap方法用于与多边形的交互。 我的问题是什么让事件的onTap在版本2的最佳方式? 我读过的谷歌文档,除非我错过了,我没有看到任何东西。

Answer 1:

这种尝试为多边形和阅读此链接。

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


Answer 2:

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



Answer 3:

您需要检查与响应用户点击一个多边形的每一个连续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;
}

当调用函数,该函数形成侧多边形的所有点,他们都返回相同的结果 - 重点是多边形的内部。



文章来源: Implementing polygons with Google maps API V2 in Android