在 Google 地图上制作可点击的多边形(对于 Android)
Make clickable polygons on Google Maps (for Android)
我有一个城市各个区域的连续经纬度。有什么方法可以用它创建可点击的多边形。曾经的方法是
- 使用可用的 LatLngs 生成多边形。(我想用颜色编码在地图上直观地显示多边形)
- 设置
setOnMapClickListener
.
- 在多边形内做一个点测试。
我明白这是很幼稚的。有哪些替代方法?
您不必为拥有可点击的多边形而发疯。我以前做过,但现在,有一个 api:
GoogleMap.setOnPolygonClickListener(OnPolygonClickListener)
您可以轻松使用它:
GoogleMap mymap =....//init your map
mymap.setOnPolygonClickListener(new OnPolygonClickListener(){
void onPolygonClick(Polygon polygon){
//do whatever with polygon!
}
});
正在将多边形添加到地图中。首先创建一个 PolygonOptions 对象并向其添加一些点。这些点将形成多边形的轮廓。然后通过调用 GoogleMap.addPolygon(PolygonOptions) 将多边形添加到地图,这将 return 一个多边形对象。
以下代码片段展示了如何向地图添加多边形。
// Instantiates a new Polygon object and adds points to define a rectangle PolygonOptions rectOptions = new PolygonOptions()
.add(new LatLng(37.35, -122.0),
new LatLng(37.45, -122.0),
new LatLng(37.45, -122.2),
new LatLng(37.35, -122.2),
new LatLng(37.35, -122.0));
// Get back the mutable Polygon Polygon polygon = myMap.addPolygon(rectOptions);
默认情况下,多边形是不可点击的。您可以通过调用 Polygon.setClickable(boolean)
.
来启用和禁用可点击性
就像 N Dorigatti 说的。在使用OnPolygonClickListener监听点击事件时,调用GoogleMap.setOnPolygonClickListener(OnPolygonClickListener)
。
当用户点击多边形时,您将收到 onPolygonClick(Polygon) 回调。
查看此 document 了解更多信息。
这是我的做法。
Polygon polygon = getMap().addPolygon(new PolygonOptions()
.add(new LatLng(12.780712, 77.770956), new LatLng(12.912006, 77.229738), new LatLng(12.412006, 77.629738), new LatLng(12.912006, 77.229738))
.strokeColor(0xFF00AA00)
.fillColor(0x2200FFFF)
.strokeWidth(2)
);
polygon.setClickable(true);
getMap().setOnPolygonClickListener(new GoogleMap.OnPolygonClickListener() {
public void onPolygonClick(Polygon polygon) {
mClusterManager = new ClusterManager<MyItem>(getApplicationContext(), getMap());
getMap().setOnCameraChangeListener(mClusterManager);
getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(getMap().getCameraPosition().target, getMap().getCameraPosition().zoom));
try {
readItems();
} catch (JSONException e) {
Toast.makeText(getApplicationContext(), "Problem reading list of markers.", Toast.LENGTH_LONG).show();
}
}
});
希望对您有所帮助。
我有一个城市各个区域的连续经纬度。有什么方法可以用它创建可点击的多边形。曾经的方法是
- 使用可用的 LatLngs 生成多边形。(我想用颜色编码在地图上直观地显示多边形)
- 设置
setOnMapClickListener
. - 在多边形内做一个点测试。
我明白这是很幼稚的。有哪些替代方法?
您不必为拥有可点击的多边形而发疯。我以前做过,但现在,有一个 api:
GoogleMap.setOnPolygonClickListener(OnPolygonClickListener)
您可以轻松使用它:
GoogleMap mymap =....//init your map
mymap.setOnPolygonClickListener(new OnPolygonClickListener(){
void onPolygonClick(Polygon polygon){
//do whatever with polygon!
}
});
正在将多边形添加到地图中。首先创建一个 PolygonOptions 对象并向其添加一些点。这些点将形成多边形的轮廓。然后通过调用 GoogleMap.addPolygon(PolygonOptions) 将多边形添加到地图,这将 return 一个多边形对象。 以下代码片段展示了如何向地图添加多边形。
// Instantiates a new Polygon object and adds points to define a rectangle PolygonOptions rectOptions = new PolygonOptions()
.add(new LatLng(37.35, -122.0),
new LatLng(37.45, -122.0),
new LatLng(37.45, -122.2),
new LatLng(37.35, -122.2),
new LatLng(37.35, -122.0));
// Get back the mutable Polygon Polygon polygon = myMap.addPolygon(rectOptions);
默认情况下,多边形是不可点击的。您可以通过调用 Polygon.setClickable(boolean)
.
就像 N Dorigatti 说的。在使用OnPolygonClickListener监听点击事件时,调用GoogleMap.setOnPolygonClickListener(OnPolygonClickListener)
。
当用户点击多边形时,您将收到 onPolygonClick(Polygon) 回调。 查看此 document 了解更多信息。
这是我的做法。
Polygon polygon = getMap().addPolygon(new PolygonOptions()
.add(new LatLng(12.780712, 77.770956), new LatLng(12.912006, 77.229738), new LatLng(12.412006, 77.629738), new LatLng(12.912006, 77.229738))
.strokeColor(0xFF00AA00)
.fillColor(0x2200FFFF)
.strokeWidth(2)
);
polygon.setClickable(true);
getMap().setOnPolygonClickListener(new GoogleMap.OnPolygonClickListener() {
public void onPolygonClick(Polygon polygon) {
mClusterManager = new ClusterManager<MyItem>(getApplicationContext(), getMap());
getMap().setOnCameraChangeListener(mClusterManager);
getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(getMap().getCameraPosition().target, getMap().getCameraPosition().zoom));
try {
readItems();
} catch (JSONException e) {
Toast.makeText(getApplicationContext(), "Problem reading list of markers.", Toast.LENGTH_LONG).show();
}
}
});
希望对您有所帮助。