Как создать интерактивную карту в 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 страниц.
давайте сначала посмотрим здесь: https://developers.google.com/maps/documentation/android/hello-mapview
после того, как вы сможете использовать 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
- будет иметь эффект, который вы хотите (пользовательское расположение, не может двигаться, не может увеличивать или уменьшать)
- но не позволяет автономный контент
вот как это сделать (я сделал это, и это работает):
- вы центрируетесь на координатах GPS, которые вы хотите ограничить область
- вы регулируете уровень масштабирования, чтобы ограничить область
- вы отключаете события мультитач, чтобы предотвратить увеличение или вон!--7-->
- отключить перетаскивание, чтобы предотвратить перемещение
- вы ручки нажмите на кнопку
ItimizedOverlays
Что вы создали для обработки действий
есть хорошие ответы на StackOverflow для каждого из этих шагов.
Если вам нужно отображать всегда одну и ту же карту, вы можете просто отобразить карту в качестве фона макета (сделать изображение карты) и обрабатывать сенсорные позиции, чтобы показать всплывающие окна для определенного здания.
или использовать webview, как указано в комментарии и обрабатывать touch x,y для отображения положения здания.