Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android中使用Google maps API V2实现多边形_Java_Android_Google Maps Android Api 2 - Fatal编程技术网

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

Java 在Android中使用Google maps API V2实现多边形,java,android,google-maps-android-api-2,Java,Android,Google Maps Android Api 2,我在Android上实现了Google maps API V2,我使用以下代码获得了要显示的地图和要显示的多边形: public class MainActivity extends FragmentActivity { Polygon polygon; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layou

我在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 map API V1上,使用
onTap
方法与多边形交互。我的问题是在version2中获取onTap事件的最佳方式是什么?我已经阅读了谷歌文档,除非我错过了,否则我没有在上面看到任何东西。

现在你必须使用OnMapClickListener并自己实现“多边形内点”算法(谷歌有一些实现很容易找到)。

现在你必须使用OnMapClickListener并实现“多边形内点”算法本身(谷歌很容易找到一些实现)。

您需要检查多边形每两个连续点的方向,以及响应用户单击的方向。这是通过使用第三个坐标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;
}

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

您需要检查多边形的每两个连续点的方向,以及响应用户单击的方向。这是通过使用第三个坐标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;
}

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

请尝试为多边形使用此函数并阅读此链接

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

请尝试使用此多边形并阅读此链接

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

你可以插入4个lat lang来绘制,你也可以给poligon加上fillip的颜色……你可以插入4个lat lang来绘制,你也可以给poligon加上fillip的颜色……这个问题的答案帮助我走上了正确的道路:这个问题的答案帮助我走上了正确的道路: