【问题标题】:Search box to search marker (Google Map)搜索框搜索标记(谷歌地图)
【发布时间】:2015-07-01 08:52:32
【问题描述】:

我想问一下我在我的应用程序中使用谷歌地图开发的安卓应用程序。我已经在我的地图上制作了多个标记(1323 数据所以 1323 标记)。所以问题是:

我想制作搜索框以在我的地图上查找特定标记。我不知道如何找到。是否可以在marker中使用title或sn-p找到

c = myDbHelper.query("Landslide", null, null, null, null,null, null);
if(c.moveToFirst()) {
    do {
        String loc = c.getString(3);
        Double lat = c.getDouble(4);
        Double lng = c.getDouble(5);
        String date = c.getString(1);
        //Integer death = c.getInt(6);

        mMap.addMarker(new MarkerOptions()
            .position(new LatLng(lat, lng))
            .title(loc + "")
            .snippet("Latitude:" + lat + " " + "Longitude:" + lng + " " + "Date:" + date + "")
            .icon(BitmapDescriptorFactory.fromResource(R.drawable.red1)));
        } while (c.moveToNext());
    }
}

在此先感谢帮助我的人, 问候, 哈菲祖尔·雷扎

【问题讨论】:

    标签: android sqlite google-maps-markers google-maps-android-api-2 search-box


    【解决方案1】:

    创建标记的全局列表/地图/数组:

    private HashMap<String, Marker> markers = new HashMap<String,Marker>();
    

    并用标记填充它:

    //...
    Marker marker = mMap.addMarker(new MarkerOptions()
                .position(new LatLng(lat, lng))
                .title(loc + "")
                .snippet("Latitude:" + lat + " " + "Longitude:" + lng + " " + "Date:" + date + "")
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.red1)));
    markers.put("Name1", marker);
    //add more and more markers
    

    现在您可以轻松找到并获取任何标记:

    Marker marker = markers.get("Name1");
    

    作为标记 HashMap 的第一个参数,您可以将 Marker title/sn-p/coordinates/... .

    【讨论】:

      【解决方案2】:

      我猜你的标记数据存储在你设备上的 SQLite 中。 您可以尝试在布局 xml 中添加搜索框,例如 EditText:

      <EditText android:id="@+id/edit_textt_d"  android:layout_width="wrap_content" android:layout_height="wrap_content"/>
      

      然后执行 onChange :

          yourEditText = (EditText) findViewById(R.id.yourEditTextId);
          yourEditTextaddTextChangedListener(new TextWatcher() {
              @Override
              public void afterTextChanged(Editable s) {}
              @Override
              public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
              @Override
              public void onTextChanged(CharSequence s, int start, int before, int count) {
                  changeMarker(s)
              } 
       });
      

      在每次更改时,您都应该: 删除地图的当前标记, 仅查询与搜索框值匹配的标记:

      public void changeMarker(String searchString) {
          ...
          myGoogleMap.clear();
          c=myDbHelper.getReadableDatabase().rawQuery("SELECT * FROM marker WHERE marker.name LIKE '"+searchString+"%'");
          ...
      }
      

      然后像您在问题中所做的那样,将您的标记重新添加到地图上。希望对您有所帮助...

      【讨论】:

      • 亲爱的 Lary,我很困惑在哪里放置 onchange 以及什么是“youredittext”。感谢您的回复先生。这是我的完整代码pastebin.com/qG3rJKtm。我很困惑。先生,你能指导我吗?谢谢;)
      • 嘿,抱歉回复晚了。你可以把你的MapsActivityonCreate(){...&lt;EditText .. &gt;的onchange放在文件R.layout.activity_maps的xml中。
      • 这个错误出来了.. 分配给 'c' 的值 myDbHelper.getReadableDatabase().rawQuery("SELECT * FROM marker WHERE marker.name LIKE '"+searchString+"%'") 永远不会使用较少... 该检查指出了变量值在赋值后从未使用过的情况,即: - 变量在赋值后永远不会被读取或 - 在读取下一个变量之前,该值总是被另一个赋值覆盖或 -变量初始化器是多余的(出于上述两个原因之一)或者 - 变量从未使用过。
      • 我的代码先生。我真的需要你的帮助。 pastebin.com/mD84cJgA 。你能检查我的编码吗?是否正确。先生,我跟着你的脚步。我已经评论了哪一行错误。谢谢顺便说一句拉里。感谢您努力帮助我
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-29
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      • 2014-01-22
      相关资源
      最近更新 更多