Как создать интерактивную карту в Android

Мне нужен раздел моего приложения, чтобы иметь интерактивную карту квадратной области, которая состоит из около 10 зданий. Вы должны иметь возможность нажать на здание и получить некоторую информацию о нем. Я знаю, что есть несколько способов сделать это, но я надеюсь, что кто-то с некоторым опытом в этом может дать мне несколько советов.

вот несколько способов, которыми я могу подумать об этом.

Google Maps

Я уже реализовал Google Maps API и он работает довольно хорошо, но на самом деле не имеет эффекта, который я искал. Google Maps требует подключения к интернету и дает вам доступ ко всей карте. Мне нужно, чтобы он был заперт в одном месте.

Webviews

Это кажется отличной альтернативой. Я уверен, что могу придумать простую карту изображений, которая даст вам больше информации при нажатии на определенное здание. Единственная проблема в том, что вам также нужен интернет соединение.

OpenGL?

Я никогда не рассматривал это слишком много, но я слышал, что это трудно и больно реализовать. Он мог бы работать локально, но стоит ли это того?

есть ли другой способ разработки интерактивной карты? Что-то нужно иметь в виду, что я также хотел бы когда-нибудь перенести это на iOS (Если у кого-то есть опыт с этим)

4 ответов


Если вы хотите полный контроль и удобно использовать html и javascript, я бы настоятельно рекомендовал использовать с открытым исходным кодом OpenLayers библиотека. Вы можете создать html-страницу, сохранить ее в активах и запустить локально на устройстве. Вы можете создать свой собственный набор картографических листов или даже использовать один файл jpeg, а затем "отобразить" здания, которые вы хотите на нем, а затем использовать простой, но обширный API OpenLayers, чтобы обеспечить выбор здания и отображение информации. Он даже имеет мультитач функциональность встроенная для панорамирования и масштабирования. Отлично работает на мобильном телефоне.

вы можете увидеть список примеров здесь. Выполнение простого источника представления на любом из примеров даст вам очень четкое представление о том, что они делают. Вы также можете взглянуть на который отображает кучу эскизов изображений в области карты от мерцания с возможностью щелчка для получения более подробной информации. В этом примере используется онлайн-канал, но вы можете легко использовать локальный.. даже один!--9-->передано из приложения в webview.

ps. У меня нет принадлежности к OpenLayers, кроме активного использования его для моих проектов.


для ответа на ваш вопрос с самого начала может потребоваться 10 страниц.

  1. давайте сначала посмотрим здесь: https://developers.google.com/maps/documentation/android/hello-mapview

  2. после того, как вы сможете использовать MapView, вам просто нужно создать класс ItemizedOverlay.

замените этот класс HelloItemizedOverlay в учебнике.

public class GooglerMapItemizedOverlay extends ItemizedOverlay {

    private ArrayList<OverlayItem> mOverlayItems = new ArrayList<OverlayItem>();
    private Context mContext;
    private Paint rectPaint, textPaint;

    public GooglerMapItemizedOverlay(Drawable defaultMarker, Context context) {
        super(boundCenterBottom(defaultMarker));

        mContext = context;
        populate(); 
    }

    @Override
    protected OverlayItem createItem(int i) {
        return mOverlayItems.get(i);
    }

    public void addOverlayItem(OverlayItem overlay) {
        mOverlayItems.add(overlay);
        populate();
    }

    @Override
    public int size() {
        return mOverlayItems.size();
    }

    public void clear(){
        mOverlayItems.clear();
        populate(); 
    }

    @Override
    protected boolean onTap(int index) {
        // information goes here
      OverlayItem item = mOverlayItems.get(index);
      AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
      dialog.setTitle(item.getTitle());
      dialog.setMessage(item.getSnippet());
      dialog.show();
      return true;
    }
}

надеюсь, что это помогает.


Google Maps

  • будет иметь эффект, который вы хотите (пользовательское расположение, не может двигаться, не может увеличивать или уменьшать)
  • но не позволяет автономный контент

вот как это сделать (я сделал это, и это работает):

  1. вы центрируетесь на координатах GPS, которые вы хотите ограничить область
  2. вы регулируете уровень масштабирования, чтобы ограничить область
  3. вы отключаете события мультитач, чтобы предотвратить увеличение или вон!--7-->
  4. отключить перетаскивание, чтобы предотвратить перемещение
  5. вы ручки нажмите на кнопку ItimizedOverlays Что вы создали для обработки действий

есть хорошие ответы на StackOverflow для каждого из этих шагов.


Если вам нужно отображать всегда одну и ту же карту, вы можете просто отобразить карту в качестве фона макета (сделать изображение карты) и обрабатывать сенсорные позиции, чтобы показать всплывающие окна для определенного здания.

или использовать webview, как указано в комментарии и обрабатывать touch x,y для отображения положения здания.