商家和其他地图注点

默认情况下,地图注点 (POI) 将与对应的图标一起显示在基本地图上。地图注点包括公园、学校、政府大楼等等。

另外,如果地图类型为 normal,商家地图注点默认将显示在地图上。商家地图注点表示商店、餐馆和酒店之类的商家。室内地图(楼层平面图)上的商家地图注点仅在精简模式地图上显示。

根据 Places SDK for Android 的定义,一个地图注点对应一个地点 ID。例如,休闲公园为地图注点,但喷泉等地点通常不属于地图注点(除非它们具有国家/地区或历史意义)。

监听地图注点上的点击事件

如果您想对用户点按某个地图注点的操作作出响应,可以使用 OnPoiClickListener,如以下代码示例所示:

Java

class OnPoiClickDemoActivity extends AppCompatActivity implements
    OnMapReadyCallback, GoogleMap.OnPoiClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.poi_click_demo);
        SupportMapFragment mapFragment;
        mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap map) {
        map.setOnPoiClickListener(this);
    }

    @Override
    public void onPoiClick(PointOfInterest poi) {
        Toast.makeText(this, "Clicked: " +
                poi.name + "\nPlace ID:" + poi.placeId +
                "\nLatitude:" + poi.latLng.latitude +
                " Longitude:" + poi.latLng.longitude,
            Toast.LENGTH_SHORT).show();
    }
}
      

Kotlin

internal class OnPoiClickDemoActivity : AppCompatActivity(), OnMapReadyCallback, OnPoiClickListener {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.poi_click_demo)
        val mapFragment = supportFragmentManager.findFragmentById(R.id.map)
                as SupportMapFragment
        mapFragment.getMapAsync(this)
    }

    override fun onMapReady(map: GoogleMap) {
        map.setOnPoiClickListener(this)
    }

    override fun onPoiClick(poi: PointOfInterest) {
        Toast.makeText(this, """Clicked: ${poi.name}
            Place ID:${poi.placeId}
            Latitude:${poi.latLng.latitude} Longitude:${poi.latLng.longitude}""",
            Toast.LENGTH_SHORT
        ).show()
    }
}
      

默认情况下,地图注点显示在地图上,但没有默认的点击界面。也就是说,当用户点按某个地图注点时,API 不会自动显示信息窗口或任何其他界面。

如上述示例所示,您可以通过调用 GoogleMap.setOnPoiClickListener(OnPoiClickListener) 在地图上设置 OnPoiClickListener。当用户点击(点按)某个地图注点时,您的应用会收到 OnPoiClick(PointOfInterest) 事件,指示用户点击的地图注点。PointOfInterest 包含纬度/经度坐标、地点 ID 和地图注点名称。

停止在地图上显示地图注点

您可以通过向所有地图注点或特定类别的地图注点应用自定义样式来隐藏地图注点。

以下 JSON 样式声明会在地图上隐藏所有商家地图注点:

[
  {
    "featureType": "poi.business",
    "stylers": [
      { "visibility": "off" }
    ]
  }
]

下面的另一个 JSON 示例可以简化所有类别地图注点的显示:

[
  {
    "featureType": "poi",
    "stylers": [
      { "visibility": "simplified" }
    ]
  }
]

如需了解 Java 代码和其他详情,请参阅有关通过样式设置隐藏地图项的指南。