【问题标题】:Google geojsonlayer polygons with hover effects using android使用 android 具有悬停效果的 Google geojsonlayer 多边形
【发布时间】:2018-09-10 11:17:39
【问题描述】:

我很困惑使用 android google map 为 geojson 层中的多边形制作悬停效果。我已经从 Web 服务器恢复了 geojson 详细信息以显示地图上的内容。我想为多边形制作悬停效果当用户手指在geojson层上移动时,在geojson层中。下面我发布了我的代码,我是如何使用谷歌地图实现geojson层的。提前谢谢你。

强文本 类 DownloadGeoJsonFile 扩展 AsyncTask {

    protected void onPreExecute() 
    {
        super.onPreExecute();
        progressBar.setVisibility(View.VISIBLE);
    }

    @Override
    protected GeoJsonLayer doInBackground(String... params)
    {
        try
        {
            // Open a stream from the URL
            InputStream stream = new URL(params[0]).openStream();
            String line;
            StringBuilder result = new StringBuilder();
            BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
            while ((line = reader.readLine()) != null)
            {
                // Read and save each line of the stream
                result.append(line);
            }
            // Close the stream
            reader.close();
            stream.close();
            return new GeoJsonLayer(mMap, new JSONObject(result.toString()));
        } catch (IOException e) {
            Log.e(mLogTag, "GeoJSON file could not be read");
        } catch (JSONException e) {
            Log.e(mLogTag, "GeoJSON file could not be converted to a JSONObject");
        }
        return null;
    }

    @Override
    protected void onPostExecute(GeoJsonLayer layer) {
        Log.e("sundar","success");
        progressBar.setVisibility(View.GONE);
        if (layer != null) {
            Log.e("sundar","successsuccess");
            addGeoJsonLayerToMap(layer);
        }
    }
}
private void retrieveFileFromUrl()
{
    new DownloadGeoJsonFile().execute(getString(R.string.geojson_url2));
}
private void addGeoJsonLayerToMap(final GeoJsonLayer layer)
{
    if (layer != null)
    {
        try
        {
            Log.e("sundar", "successsuccess");
            layer.addLayerToMap();
            final GeoJsonPolygonStyle style =layer.getDefaultPolygonStyle();
            style.setStrokeColor(Color.BLACK);
            style.setStrokeWidth(3F);
            mMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(20.593683, 78.962883)));

            layer.setOnFeatureClickListener(new GeoJsonLayer.GeoJsonOnFeatureClickListener() {
                @Override
                public void onFeatureClick(Feature feature)
                {
                    Log.e("type",feature.getGeometry().getGeometryType().toString());

                }
            });
        }
        catch(Exception e)
        {
            Log.e("exception","exception occured");
        }
    }
}

【问题讨论】:

    标签: android google-maps hover polygon geojson


    【解决方案1】:

    最后我用下面的代码做到了。

    private void addGeoJsonLayerToMap(final GeoJsonLayer layer)
    
    {
    
        if (layer != null)
    
        {
    
            try
    
            {
    
                Log.e("sundar", "successsuccess");
    
                layer.addLayerToMap();
    
                /*polygon style*/
    
                final GeoJsonPolygonStyle style = layer.getDefaultPolygonStyle();
                style.setStrokeColor(Color.BLACK);
                style.setFillColor(Color.GRAY);
    
              /*  style.setFillColor(R.drawable.map_hover_button);*/
                style.setStrokeWidth(3F);
    
            /*its for setting markers with infowindow*/
                for (GeoJsonFeature feature : layer.getFeatures())
                {
                    GeoJsonPointStyle pointStyle=new GeoJsonPointStyle();
                    pointStyle.setTitle(feature.getProperty("Name"));
                    pointStyle.setIcon(BitmapDescriptorFactory.fromResource(R.mipmap.locpin));
                    feature.setPointStyle(pointStyle);
                }
                layer.setOnFeatureClickListener(newGeoJsonLayer.GeoJsonOnFeatureClickListener()
    
                {
                    @Override
                    public void onFeatureClick(Feature feature)
                    {
    
                Log.e("type",feature.getGeometry().getGeometryType().toString());
    Toast toast=Toast.makeText(getApplicationContext(),feature.getProperty("Name"),Toast.LENGTH_SHORT);
    
                            toast.show();
                            Handler handler = new Handler();
    
                            handler.postDelayed(new Runnable()
    
                            {
    
                                @Override
    
                                public void run()
    
                                {
    
                                    toast.cancel();
    
                                }
    
                            }, 500);
                            if(feature.getGeometry().getGeometryType().equalsIgnoreCase("Polygon")||feature.getGeometry().getGeometryType().equalsIgnoreCase("MultiPolygon")) {
    
                                if (coloredfeature != null)
    
                                {
                                    GeoJsonPolygonStyle lineStringStyle = new GeoJsonPolygonStyle();
    
                                    coloredfeature = (GeoJsonFeature) feature;
    
                                    lineStringStyle.setFillColor(Color.GRAY);
    
                                    lineStringStyle.setStrokeColor(Color.BLACK);
    
                                    lineStringStyle.setStrokeWidth(3f);
    
                                    lineStringFeature.setPolygonStyle(lineStringStyle);
    
                                }
    
                                GeoJsonPolygonStyle lineStringStyle = new GeoJsonPolygonStyle();
    
                                lineStringFeature = (GeoJsonFeature) feature;
    
                                coloredfeature = (GeoJsonFeature) feature;
    
                                lineStringStyle.setFillColor(Color.parseColor("#991A6659"));
    
                                lineStringStyle.setStrokeColor(Color.WHITE);
    
                                lineStringStyle.setStrokeWidth(2f);
    
                                lineStringFeature.setPolygonStyle(lineStringStyle);
    
                            } 
    
                    }
    
                });
    
            }
    
            catch(Exception e)
    
            {
    
                Log.e("exception","exception occured");
    
    
            }
    
        }
    
    }
    

    一个问题是当我们单击它时我无法获取多个多边形的属性。任何帮助将不胜感激。

    【讨论】:

      猜你喜欢
      • 2015-09-10
      • 2011-04-16
      • 1970-01-01
      • 2021-09-11
      • 2015-04-25
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 2017-10-16
      相关资源
      最近更新 更多