Showing place names on Google indoor map

老子叫甜甜 提交于 2019-12-04 04:44:09

问题


I m trying to get Google indoor maps to work inside my app. When I look at a building in Google maps with indoor information available it shows the name of the places in it.

I looked up the sample Google Indoor maps project, putting new latitude and longitude the sample project shows the building but not all the name of places.

How do I make it show the same information as Google maps show ?

Here is the code for IndoorDemoActivity

public class IndoorDemoActivity extends FragmentActivity {

  private GoogleMap mMap;

  private boolean showLevelPicker = true;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.indoor_demo);
    mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
    // SFO airport
//    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(37.614631, -122.385153), 18));
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(19.173036, 72.835679), 18));
  }

  /**
   * Called when the toggle level picker button is clicked.
   */
  public void onToggleLevelPicker(View view) {
    showLevelPicker = !showLevelPicker;
    mMap.getUiSettings().setIndoorLevelPickerEnabled(showLevelPicker);
  }

  /**
   * Called when the focused building info is clicked.
   */
  public void onFocusedBuildingInfo(View view) {
    IndoorBuilding building = mMap.getFocusedBuilding();
    if (building != null) {
      String s = "";
      for (IndoorLevel level : (List<IndoorLevel>) building.getLevels()) {
        s = s + level.getName() + " ";
      }
      if (building.isUnderground()) {
        s += "is underground";
      }
      setText(s);
    } else {
      setText("No visible building");
    }
  }

  /**
   * Called when the focused level info is clicked.
   */
  public void onVisibleLevelInfo(View view) {
    IndoorBuilding building = mMap.getFocusedBuilding();
    if (building != null) {
      IndoorLevel level = (IndoorLevel) building.getLevels().get(building.getActiveLevelIndex());
      if (level != null) {
        setText(level.getName());
      } else {
        setText("No visible level");
      }
    } else {
      setText("No visible building");
    }
  }

  /**
   * Called when the activate higher level is clicked.
   */
  public void onHigherLevel(View view) {
    IndoorBuilding building = mMap.getFocusedBuilding();
    if (building != null) {
      List<IndoorLevel> levels = building.getLevels();
      if (!levels.isEmpty()) {
        int currentLevel = building.getActiveLevelIndex();
        // The levels are in 'display order' from top to bottom,
        // i.e. higher levels in the building are lower numbered in the array.
        int newLevel = currentLevel - 1;
        if (newLevel == -1) {
          newLevel = levels.size() - 1;
        }
        IndoorLevel level = levels.get(newLevel);
        setText("Activiating level " + level.getName());
        level.activate();
      } else {
        setText("No levels in building");
      }
    } else {
      setText("No visible building");
    }
  }

  private void setText(String message) {
    TextView text = (TextView) findViewById(R.id.top_text);
    text.setText(message);
  }
}

回答1:


The markers you see in the Google Maps app are likely placed by the Google Maps app itself via Google Places. The limited set of markers you are seeing in your app are likely baked into the indoor map itself as "Floor Plan markers".

As far as I know, to display the other place information you must integrate with the Google Places API. You can then use that to find and add the business markers yourself with addMarker, probably clearing and re-adding them whenever the level is changed.



来源:https://stackoverflow.com/questions/25708831/showing-place-names-on-google-indoor-map

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!