地图上大量标记的问题

2023-11-27

我正在开发一款 iPhone 上已经存在的 Android 应用程序。

在应用程序中,有一个 Map 活动,它有(我数过)大约 800 个标记,分为四组,并用四种不同颜色的可绘制标记进行标记。每个组都可以打开或关闭。有关我在列表中的标记的信息。我为每个组创建一个 mapOverlay,然后将该叠加层附加到地图上。我坚信我的编码部分做得正确。但无论如何我都会附上我的代码......

问题是,我的 Nexus One 无法处理带有所有这些标记的地图。仅绘制 500 个标记就需要大约 15 秒。然后当全部绘制完成后,地图就不太平滑了。缩放和导航有点困难。可以做到,但是经验很差,我想看看是否可以在那里做点什么。我知道如果我避免 String > Double 转换,我可以节省一些时间,但我怀疑这是否重要。

iPhone 显示所有这些标记似乎没有问题。显示所有内容大约需要 1-2 秒,并且缩放和平移也不错。减慢是明显的,但仍然可以接受。我个人认为绘制所有这些标记是没有好处的,但应用程序是由其他人设计的,我不应该进行任何重大更改。

我不知道在这里做什么。看来我必须想出不同的功能,也许使用 GPS 位置(如果已知),并仅在某个半径内绘制标记,或者,如果位置未知,则使用屏幕中心(地图)并在其周围绘制标记。如果我做出这些改变,我必须向我的老板做出合理的解释。

如果有人有任何 idas,我将不胜感激。

和代码:

    List<Overlay> mapOverlays = mapView.getOverlays();
    Drawable drawable = this.getResources().getDrawable(R.drawable.pin_blue);
    drawable = this.getResources().getDrawable(R.drawable.pin_blue);
    ArrList = appState.GetSleepArrList();
    ItemizedOverlay itemizedoverlay = new ItemizedOverlay(drawable, this); 
    ...
    ...
       for (int m = 0; m < ArrList.size(); m++) {
            tName = ArrList.get(m).get("name").toString();
            tId = ArrList.get(m).get("id").toString();
            tLat = ArrList.get(m).get("lat").toString();;
            tLng = ArrList.get(m).get("lng").toString();;
            try {
                lat = Double.parseDouble(tLat);
                lng = Double.parseDouble(tLng);
                p1 = new GeoPoint(
                        (int) (lat * 1E6), 
                        (int) (lng * 1E6));
                OverlayItem overlayitem = new OverlayItem(p1, tName, tId);
                itemizedoverlay.addOverlay(overlayitem);
            } catch (NumberFormatException e) {
                Log.d(TAG, "NumberFormatException" + e);    
            }
        }
        mapOverlays.add(itemizedoverlay);
        mapView.postInvalidate();

................................

public class ItemizedOverlay extends ItemizedOverlay<OverlayItem>
{
    private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
    private Context mContext;
    public HelloItemizedOverlay(Drawable defaultMarker, Context context)
    {
        super(boundCenterBottom(defaultMarker));
        mContext = context;
    }

    public void addOverlay(OverlayItem overlay)
    {
        mOverlays.add(overlay);
        populate();
    }
    @Override
    protected OverlayItem createItem(int i)
    {
        return mOverlays.get(i);
    }
    @Override
    public int size()
    {
        return mOverlays.size();
    }
    @Override
    protected boolean onTap(int index)
    {
        final OverlayItem item = mOverlays.get(index);
                    ... EACH MARKER WILL HAVE ONCLICK EVENT THAT WILL PRODUCE CLICABLE 
                    ... BALOON WITH MARKER'S NAME.          
        return true;
    }       
}    

出色地。事实证明,我每次添加标记后都会调用 populate() 。我从 addOverlay() 方法中取出了 populate() ,并在循环完成后调用它。所有标记现在几乎立即显示。现在唯一的问题是地图在较低缩放时反应非常迟钝(一次显示很多标记)。我没有看到这个问题的解决方案,除非我弄清楚如何在地图缩小时减少地图上标记的数量...考虑以某种方式对它们进行分组...目前正在研究这个...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

地图上大量标记的问题 的相关文章

  • 服务如何在后台运行 - Android

    今天的采访中我被问到了这个问题 什么是服务 我对此的回答是 Service 是 Android 的基本组件 它没有 UI 并且在后台运行 Service 是否在主线程上运行 不 那么它是如何在后台运行的呢 我心里一片空白 有人可以解释一下如
  • Android Widget ID 是否持久

    在从桌面删除该 Widget 实例之前 您从操作系统收到的用户桌面上特定 Widget 实例的 Widget ID 是否一致 我找不到任何明确说明这一点的文档 但我假设这是因为文档说您可以使用小部件 id 来存储任何实例配置信息 我想将一些
  • 如何以编程方式判断蓝牙设备是否已连接?

    我了解如何获取已配对设备的列表 但如何判断它们是否已连接 这一定是可能的 因为我看到它们列在我手机的蓝牙设备列表中 并且它说明了它们的连接状态 将蓝牙权限添加到您的AndroidManifest中
  • AIRPLANE_MODE 的广播接收器无法与 SDK 26 一起使用

    通常 我使用简单的代码来放置Toast当用户改变AIRPLANE MODE 并且它可以使用targetSdkVersion 25 我的 AirPlaneModeReceiver public class AirPlaneModeReceiv
  • 升级到 Proguard 4.8 后无法导出应用程序

    我刚刚将我的 Android SDK ADT 和 Proguard 升级到最新最好的版本 我的项目在调试模式下编译并运行良好 但是当我尝试导出它的签名版本 APK 时 我收到来自导出向导的错误Eclipse 控制台上没有任何错误日志消息 如
  • 如何在 Android 中创建始终位于顶部的全屏覆盖 Activity

    我希望能够创建一个始终位于 Android 显示前面的 Activity 它不应该接收任何输入 只需将其传递到其下面的任何应用程序即可 像平视显示器之类的东西 我能够研究我需要将底层窗口类型设置为 TYPE SYSTEM ALERT 但看起
  • 无法接收UsbManager.ACTION_USB_DEVICE_ATTACHED/UsbManager.ACTION_USB_DEVICE_DETACHED的广播Intent

    我最近正在编写一个 USB 主机应用程序 但它被卡住了 因为我无法检测到设备连接 分离事件 我遵循了编码说明http developer android com guide topics connectivity usb host html
  • 将项目添加到 android 框架的设置中

    我正在 android 框架中工作 我想向 android 操作系统中的现有设置添加一个项目 您能告诉我如何执行此操作吗 首先阅读有关偏好活动 http developer android com reference android pre
  • 如何连接到Google Play服务并加载排行榜

    我想将我的游戏与 Google Play 服务连接 我已阅读有关 Android 开发人员的文档 并尝试遵循输入数字示例 但仍然无法加载排行榜 我有导入baseGameUtils 但我使用andengine 所以我没有使用来自谷歌的exte
  • 如何从画布中删除路径区域(Android)

    我需要裁剪角落ImageView 不要将它们弄圆 而是擦除每个角上的三角形 似乎唯一的方法就是覆盖onDraw方法并使用从画布上删除这些区域Path 问题是我没有纯色背景 所以我需要擦除这些区域 但不要用某种颜色填充它们 我为此使用以下代码
  • 何时调用 glMatrixMode()

    我所关注的大多数 Android OpenGL ES 教程都有其 onSurfaceChanged 函数 如下所示 public void onSurfaceChanged GL10 gl int width int height gl g
  • 添加 play-services-maps 依赖项自动添加 glEsVersion 2.0 要求

    我想融入Google Play Services Maps module 由于地图清单声明
  • 本地管理的广播接收器泄漏?

    当应用程序被系统杀死时 本地 即使用 LocalBroadcastManager 管理 BroadcastReceiver 是否有可能泄漏 我需要它的具体用例是我想在活动的 onCreate onDestroy 中注册 注销 Broadca
  • Android 5 Lollipop 阴影方向或 y 偏移

    是否有可能改变 Y 偏移的阴影方向 现在我有以下布局
  • DialogFragment 关闭事件

    我需要处理 DialogFragment 的结尾 在调用 dismiss 之后 例如 我会在关闭后 包含 片段的活动内显示一个 toast 我该如何处理该事件 覆盖onDismiss 在你的DialogFragment中 或者使用setOn
  • 如何获取Android中的所有主屏幕?

    我是安卓开发新手 我知道每个主屏幕都是启动器中的一个工作区 我想获取屏幕上所有应用程序图标的所有位置信息 那么有没有办法获取这些屏幕对象及其图标信息的列表 ADD 我更期待的是应用程序图标和屏幕之间的关系 例如 我想要某个应用程序图标的位置
  • onStart() 到底做了什么? - 安卓[重复]

    这个问题在这里已经有答案了 一段时间以来 我一直想知道 onStart 函数在 android 生命周期中的确切作用 网上的大多数资源只是说 它在您的活动在屏幕上可见之前被调用 但到目前为止我所做的应用程序我从未使用过onStart 我在
  • 带有工具提示的搜索栏 android

    Hi All 我正在尝试使用工具提示自定义 android 搜索栏 如给定的图像 有没有办法在搜索栏中添加带有拇指的文本视图 或任何其他想法 Thanks 我们可以通过拇指的界限来做到这一点 并在seekbar的progressChange
  • 片段中的 SavedInstanceState 始终为 null

    我使用 XML 以及活动中的 setContentView 将片段附加到活动 A 有一个问题 因为我的片段中有非常动态的视图 所以当方向改变时 我必须恢复所有的观点状态 我有问题 因为我正在使用类似的东西 public void onSav
  • FCM 主题是否适合更多用户?

    我对使用主题消息有点困惑 我的场景是根据通知触发一些作业 请帮助我更多地了解这一点 如果我们正在处理大量用户 则可以使用 FCM 主题向用户发送通知 我们可以只使用数据消息和主题消息吗 使用主题发送的消息是否保证送达 我在 FCM 文档中看

随机推荐

  • Java 内部类可见性难题

    考虑以下情况 public class A public A b new B B b private class B 我引用 Eclipse 中的警告 java 编译器通过合成访问器方法模拟构造函数 A B 我想编译器现在会继续为 B 创建
  • Python:构建 LRU 缓存

    我身边有6 00 000 entries in MongoDB采用以下格式 feature category count where feature可以是任何词 category为正或负 并且 count告诉某个功能在该类别的文档中出现了多
  • Android:如何防止图像在ImageView或ImageButton中缩放?

    如果使用 fill parent 或 weight 拉伸视图或按钮 如何防止我的位图在 ImageView 或 ImageButton 中自动缩放 这将很有用 例如 在屏幕顶部创建一个 4 按钮工具栏 其中按钮间距相等 但即使我使用scal
  • 完全合理地证明 li 元素[重复]

    这个问题在这里已经有答案了 我们有一个自适应布局 其中一些列表元素水平显示 Li1 Li2 Li 3 Li4 显然我可以设置 ul width 100 ul li width 25 让 li 的大小随着浏览器大小的变化而变化 然而 我们希望
  • TensorFlow:生成随机常数

    在 ipython 中我导入了tensorflow as tf and numpy as np并创建了一个 TensorFlowInteractiveSession 当我使用 numpy 输入运行或初始化一些正态分布时 一切运行正常 som
  • Android 检测屏幕键盘的完成按键

    Is it possible to detect when the Done key of onScreen keyboard was pressed 对的 这是可能的 editText EditText findViewById R id
  • 在 PKCS#1 OAEP 加密/解密中交换公钥/私钥

    我对RSA只有一些非常基础的理论知识 在阅读有关如何在实践中使用它的不同来源时 PKCS 1 OAEP 似乎是一件好事 对于测试实现 我使用 Python 和 PyCrypto 例如 this是使用 PKCS 1 OAEP 的示例 使用公钥
  • 为什么这个函数执行了两次?

    我有一个树结构 这里是 JSBIN 在指令中 scope add child task function scope add task scope path child of scope member name if scope has c
  • 一个包含初始数据的 Neo4j 容器(docker)

    我使用过的其他数据库泊坞窗 如 Postgres 有一种机制 可以在容器第一次启动时将一些初始数据导入到其空实例中 这通常是将 SQL 文件放在特定文件夹中 我需要对 Neo4j 做同样的事情 我想编写一个 Neo4j docker 镜像
  • 有哪些实现半监督(约束)聚类的软件包?

    我想对半监督 约束 聚类进行一些实验 特别是作为实例级成对约束 必须链接或无法链接约束 提供的背景知识 我想知道有没有好的开源包实现半监督聚类 我尝试查看 PyBrain mlpy scikit 和 Orange 但找不到任何约束聚类算法
  • Java 泛型:List> = new LinkedList>() 被禁止?

    为什么在Java中我可以写 List gt list new LinkedList
  • 在 C# 中调用基本构造函数

    如果我从基类继承并希望将某些内容从继承类的构造函数传递给基类的构造函数 我该怎么做 例如 如果我继承 Exception 类 我想做这样的事情 class MyExceptionClass Exception public MyExcept
  • 具有不同类型表达式的三元运算符[重复]

    这个问题在这里已经有答案了 我正在玩三元运算符并注意到一些奇怪的事情 我有下面的代码 class Main static void foo int a System out println int static void foo Strin
  • Web 应用程序未在 Firebase 项目控制台中注册

    在我的项目控制台中 我收到此消息 FancyProject 项目中目前没有应用程序 然后 我收到将 Firebase 包含在我的应用程序的脚本标记中的说明 但是 我已经将其包含在我的 React 应用程序中 如下所示 并且我已检查以确保它注
  • 为什么运行 hadoop (或 dfs 命令)时不断显示已弃用的错误

    我已经安装了hadoop 2 0 0 alpha 但是每当我执行命令时 它都会给我弃用错误 尽管它看起来运行没有问题 hadoop bin hadoop dfs copyFromLocal input input DEPRECATED Us
  • JSDoc UML 图

    问题 我正在编辑和使用一个开源 JavaScript 库 该库的代码中包含 JSDoc 标签 我想知道是否有人知道 JSDoc 插件 它可以让我从 JSDoc 标签生成类图 编辑 我决定尝试一下js uml并发现以下内容 JS UML ec
  • SQL 查询语法错误 - 字段名称中存在空格

    我的应用程序使用的数据库的字段名称包含空格 我相信这是我的问题的原因 这是一个典型的查询 SELECT FROM OV2 BAS AS bas INNER JOIN OV2 RefID AS ids ON bas Ref ID ids Re
  • Spring boot 字段需要一个无法找到的类型的 bean

    我正在阅读 Spring Boot 的 JPA 入门教程 但我正在努力 我知道这个问题有时在这里被问到 字段需要一个无法找到的类型的 bean 使用 mongodb 的 spring Restful API 错误 但这些问题和我遇到的有点不
  • 在不知道属性类型的情况下从属性和列表值获取属性值

    我想传入属性名称并返回值 这将位于通用实用程序中 并且它不知道属性类型 Update如果有人需要这样做 这就是实际的工作代码 我需要一种方法让核心代码解析属性而不知道它们是什么 public void LoadPropertiesToGri
  • 地图上大量标记的问题

    我正在开发一款 iPhone 上已经存在的 Android 应用程序 在应用程序中 有一个 Map 活动 它有 我数过 大约 800 个标记 分为四组 并用四种不同颜色的可绘制标记进行标记 每个组都可以打开或关闭 有关我在列表中的标记的信息