arcgis for android 空间查询

arcgis for android空间查询 点击某点,选中该点所在区域 arcgis for android空间查询 点击某点,选中该点所在区域,然后高亮显示选中的区域 立即下载

arcgis for android 参数设置:


//查询点击地图上任意点判断是否在一个范围内(地图坐标用的大地坐标)

Point point = mapView.toMapPoint(x, y);
//投影坐标转换成经纬度
Point wgsPoint = (Point) GeometryEngine.project(point, mapView.getSpatialReference(), SpatialReference.create(4326));

QueryParameters qParameters = new QueryParameters();    //创建查询参数对象
SpatialReference sr = SpatialReference.create(4326);//设置空间参考坐标系
Envelope envelope = new Envelope(wgsPoint);//后面2个参数指的是点的高和低
qParameters.setGeometry(envelope);//设置识别位置
qParameters.setOutSpatialReference(sr);//设置输出坐标系
qParameters.setReturnGeometry(true);//指定是否返回几何对象

qParameters.setSpatialRelationship(SpatialRelationship.WITHIN);  //需要指定关系



//显示一个面的中心

Polygon polygon = (Polygon) feature.getGeometry();
Polygon poly = new Polygon();//创建多边形对象
//获取面的中心
Point pyPoint = GeometryEngine.getLabelPointForPolygon(polygon, mapView.getSpatialReference());
//经纬度转换成投影坐标
pyPoint = (Point) GeometryEngine.project(pyPoint, SpatialReference.create(4326), mapView.getSpatialReference());
for (int i = 0; i < polygon.getPointCount(); i++) {
    Point wgsPoint = polygon.getPoint(i);
    Point point = (Point) GeometryEngine.project(wgsPoint, SpatialReference.create(4326), mapView.getSpatialReference());
    if (i == 0) {
        poly.startPath(point);
    } else if (i == polygon.getPointCount() - 1) {
        poly.lineTo(poly.getPoint(0));//多边形是闭合的因此最后我们还要添加初始点的位置
    } else {
        poly.lineTo(point);
    }
}
SimpleFillSymbol symbol = new SimpleFillSymbol(Color.RED);
Graphic graphic = new Graphic(poly, symbol, feature.getAttributes());
mPoythLayer.addGraphic(graphic);


//********************************************************根据地名搜索******************************************************************* 

/**

     * 根据地名查询经纬度
     */
    private void searchPlace() {
        String address = etSearch.getText().toString().trim();
//
        LocatorFindParameters findParams = new LocatorFindParameters(address);
        // Use the centre of the current map extent as the find location point
        findParams.setLocation(mapView.getCenter(), mapView.getSpatialReference());
        // Calculate distance for find operation
        Envelope mapExtent = new Envelope();
        mapView.getExtent().queryEnvelope(mapExtent); // assume map is in metres, other units wont work, double current envelope double distance = (mapExtent != null && mapExtent.getWidth() > 0) ? mapExtent.getWidth() * 2 : 10000; findParams.setDistance(distance); findParams.setMaxLocations(2);
        // Set address spatial reference to match map
        findParams.setOutSR(mapView.getSpatialReference());
//                    executeLocatorTask(findParams);
        if (task != null && AsyncTask.Status.RUNNING == task.getStatus()) {
            task.cancel(true);
        }
        new LocatorAsyncTask().execute(findParams);

    }


/**
     * 根据地名搜索市政府的地理位置
     */
    private class LocatorAsyncTask extends AsyncTask<LocatorFindParameters, Void, List<LocatorGeocodeResult>> {
        private Exception mException = null;




        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            dialog.show();
        }


        @Override
        protected List<LocatorGeocodeResult> doInBackground(LocatorFindParameters... params) {
            Locator locator = Locator.createOnlineLocator();
            List<LocatorGeocodeResult> results = null;
            try {
                results = locator.find(params[0]);
            } catch (Exception e) {
//              e.printStackTrace();
                mException = e;
            }


            return results;
        }


        @Override
        protected void onPostExecute(List<LocatorGeocodeResult> result) {
            dialog.dismiss();
            if (mException != null) {
                Log.e("PlaceSearch", "LocatorSyncTask failed with:");
                mException.printStackTrace();
                ToastUtils.show(MapQueryActivity.this, "地址搜索失败.");
                return;
            }
            if (result.size() == 0) {
                ToastUtils.show(MapQueryActivity.this, "没有搜索出结果.");
            } else {
                // Use first result in the list
                LocatorGeocodeResult geocodeResult = result.get(0);
                // get return geometry from geocode result
                Point resultPoint = geocodeResult.getLocation();
                // create marker symbol to represent location
                SimpleMarkerSymbol resultSymbol = new SimpleMarkerSymbol(Color.RED, width, SimpleMarkerSymbol.STYLE.DIAMOND);
                // create graphic object for resulting location
                Graphic resultLocGraphic = new Graphic(resultPoint, resultSymbol);
                // add graphic to location layer
                mLocationLayer.addGraphic(resultLocGraphic);




                // create text symbol for return address
//                String address = geocodeResult.getAddress();
//                TextSymbol resultAddress = new TextSymbol(20, address, Color.BLACK);
//                resultAddress.setOffsetX(-4 * address.length());
//                resultAddress.setOffsetY(10);
//                Graphic resultText = new Graphic(resultPoint, resultAddress);
//                // add address text graphic to location graphics layer
//                mLocationLayer.addGraphic(resultText);
//                mLocationLayerPoint = resultPoint;




                // Zoom map to geocode result location
                mapView.zoomToScale(geocodeResult.getLocation(), 5);
                //投影坐标转换经纬度
                //  Point wgsPoint = (Point) GeometryEngine.project(resultPoint ,mapView.getSpatialReference(),SpatialReference.create(4326));
                screenPoint = mapView.toScreenPoint(resultPoint);//投影坐标换屏幕坐标
//                Log.e("Log.e","================X========"+wgsPoint.getX()+"===YYY==="+wgsPoint.getY()+"==="+mapView.getSpatialReference());
            }
        }
    }

//*********************************************************************end**************************************************************************


//*******************************************************根据字段检索**********************************************************************


   /**
     * 查询图层属性Task
     */
    private void QueryFereatureTask(String param) {
        if (queryTask != null && AsyncTask.Status.RUNNING == queryTask.getStatus()) {
            queryTask.cancel(true);
        }
        queryTask = new QueryFeatureLayer(param);
//        CompatibleUtils.executeTask(queryTask);
//        queryTask.execute(param);
        CompatibleUtils.executeTask(queryTask);
        if (dialog == null) {
            dialog = CustomProgressDialog.createDialog(this);
        }
        dialog.show();
    }
  * 要素查询(查询层中的字段)
     */
    private class QueryFeatureLayer extends AsyncTask<Object,Void, FeatureResult> {

        private Exception mException;
        private String whereClause;
        public QueryFeatureLayer(String param){
            whereClause=param;
        }

        @Override
        protected FeatureResult doInBackground(Object... objects) {
//            String whereClause = "d_shi_mc ='" + params[0] + "' or d_shi_mc ='"+params[0]+"' or x_qi_mc ='"+params[0]+"' or x_zheng_mc ='"+params[0]+"'";
            // Define a new query and set parameters
            QueryParameters mParams = new QueryParameters();
            mParams.setWhere(whereClause);
            mParams.setReturnGeometry(true);
            mParams.setOutFields(new String[]{"ttcode","yjz","qd","yxl","dmlx","dxzzzd","fldj","dkmj","d_shi_mc","x_qi_mc","x_zheng_mc","cunmc,nhmc","dkmc"});
            QueryTask queryTask = new QueryTask(URL_PLOT + "/0");
            FeatureResult results;
            try {
                results = queryTask.execute(mParams);
                return results;
            } catch (Exception e) {
                mException = e;
//                e.printStackTrace();
            }
            return null;
        }



        @Override
        protected void onPostExecute(FeatureResult results) {
            if (dialog != null) {
                dialog.dismiss();
            }
            if (mException != null || results == null || results.featureCount() <= 0) {

                Toast.makeText(MapQueryActivity.this, "沒有搜索到该地块信息.", Toast.LENGTH_SHORT).show();
                return;
            }
            loadQueryPoint(results);

            //设置地图中心点
//            mapView.centerAt(point, true);
//            MapOptions mapOptions = new MapOptions(MapOptions.MapType.OSM);
//            mapOptions.setZoom(13);
//            mapView.setMapOptions(mapOptions);

        }
    }

//****************************************************android离线查询(.geoDatabase)**************************************************


 /**
     * 加载geodatabase文件图层
     *
     * @param featureLayerPath
     */
    private void updateFeatureLayer(String featureLayerPath) {

        try {
            localGdb = new Geodatabase(featureLayerPath);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        if (localGdb != null) {
            gdbFeautureTable = localGdb.getGeodatabaseFeatureTableByLayerId(0);

            //如果有多个图层这需要这样,否则不需要
//            for(GeodatabaseFeatureTable gdbFeautureTable:gdb.getGeodatabaseTables()){
//                if(gdbFeautureTable.hasGeometry()){
//                    mapView.addLayer(new FeatureLayer(gdbFeautureTable)); //地块
//                }
//            }

            FeatureLayer feautreLayer = new FeatureLayer(gdbFeautureTable);
            mapView.addLayer(feautreLayer); //地块
//            localGdb.dispose();//释放资源如果放開ze 不能查詢
        }


    }

private void inputSearch() {
    InputUtil.getInstance(MapQueryActivity.this).hide();
    if (etSearch.getText().toString().equals("")) {
        Toast.makeText(MapQueryActivity.this, "请输入要查询的地名.", Toast.LENGTH_SHORT).show();
        return;
    }
    String param = etSearch.getText().toString().trim();
    String whereClause = "s_shi_mc like '%" + param + "%' or d_shi_mc like '%" + param + "%' or d_shi_mc like '%" + param + "%' or x_qi_mc like '%" + param + "%' or x_zheng_mc like '%" + param + "%'";
    if (this.gdbFeautureTable != null) {//离线查询
        QueryParameters mParams = new QueryParameters();
        mParams.setWhere(whereClause);
        mParams.setReturnGeometry(true);
        //要返回的字段
        mParams.setOutFields(new String[]{"s_shi_mc", "ttcode", "yjz", "qd", "yxl", "dmlx", "dxzzzd", "fldj", "Area", "d_shi_mc", "x_qi_mc", "x_zheng_mc", "cunmc", "nhmc", "dkmc", "area_code"});
        gdbFeautureTable.queryFeatures(mParams, callbackPointListener);
        if (dialog == null) {
            dialog = CustomProgressDialog.createDialog(this);
        }
        dialog.show();
        // feautreLayer.selectFeatures(mParams, FeatureLayer.SelectionMode.NEW,callbackPointListener);

    } 
}

/**
 * 根据字段查询回调
 */
CallbackListener<FeatureResult> callbackPointListener = new CallbackListener<FeatureResult>() {

    @Override
    public void onCallback(final FeatureResult result) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (dialog != null) {
                    dialog.dismiss();
                }
                if (result != null && result.featureCount() > 0) {
                    loadQueryPoint(result);
                } else {
                    Toast.makeText(MapQueryActivity.this, "沒有搜索到该地块信息.", Toast.LENGTH_SHORT).show();
                }
            }
        });

    }

    @Override
    public void onError(Throwable throwable) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (dialog != null) {
                    dialog.dismiss();
                }
                Toast.makeText(MapQueryActivity.this, "沒有搜索到该地块信息.", Toast.LENGTH_SHORT).show();
            }
        });
    }
};
//*******************************************end***************************************************



ArcGIS For Android Runtime100使用说明文档 ArcGIS For Android Runtime100使用说明文档.从10.x版本升级至100.x版本必看 立即下载

相关推荐

SPSS因子分析实战:从数据清洗到结果解读的完整流程

本文提供了一份详尽的SPSS因子分析实战指南,涵盖从数据清洗、适用性检验(KMO与巴特利特检验)、公因子提取、因子旋转到结果解读与报告撰写的完整流程。通过具体案例,手把手教你如何利用SPSS进行探索性因子分析,实现数据降维并提炼核心公共因子,适用于市场研究、心理学等多变量数据分析场景。

weixin_29055699的博客 329

ArcGIS for Android 10.2.9(7):坐标转化

在我们的GIS应用项目里,常常遇见坐标转换的问题。最常见的就是WGS84坐标转其他坐标系,原因是WGS84坐标系是目前GPS数据采集所用的坐标系,而我国实际生产项目里常用的地图却是北京54坐标系,西安80坐标系以及中国大地2000坐标系等。所以当我们用设备采集到GPS经纬度以后,需要将其进行坐标转换才可以正确显示到我们使用的地图上。 坐标转化api: GeometryEngine类的方法: p...

qq_36699930的博客 1670

模电实验室:手把手教你调试共射放大电路静态工作点(避免波形失真)

本文详细介绍了共射放大电路静态工作点的调试方法,帮助避免波形失真问题。从实验准备、电路搭建到静态工作点测量,提供了实用的电阻选值策略和常见波形失真解决方案,适合电子相关专业学生和硬件工程师参考学习。

weixin_42531128的博客 375

arcgis for android地图控件的5大常见操作,ArcGIS for Android Runtime100 基本操作(二)——地图控件的常见操作...

以前我刚开始学习ArcGIS时候,看得最常见的一篇博客是Ersi中国官方写的一篇《ArcGIS for Android地图控件的5大常见操作》,地址是http://blog.csdn.net/arcgis_mobile/article/details/7801467。不过不知道啥原因后来这篇博客删掉了,但是网络上还是能看到到处转的这篇博文。这篇博文特别对于MapView的常见用法做了比较详细的描述...

weixin_42517607的博客 1315

特征金字塔网络(Feature Pyramid Network, FPN)

特征金字塔网络(FPN)是计算机视觉领域的一个里程碑式工作,通过高效的多尺度特征融合,显著提升了目标检测和分割任务的性能。其核心在于自底向上路径、自顶向下路径和横向连接的协同工作,兼顾了高分辨率和强语义信息。FPN的通用性和高效性使其成为许多现代检测框架的标配模块。

Rhett_Butler0922的博客 1726

惊呆了!Oracle 11g从入门到放弃的保姆级指南(新手必看)

本文为Oracle 11g数据库新手提供了一份详尽的入门指南。内容涵盖从安装配置、SQL*Plus工具使用、核心的SQL增删改查操作,到事务、索引等进阶概念的解析。文章旨在帮助初学者避开常见陷阱,快速掌握这一经典关系型数据库管理系统的基本操作与核心技能,实现从入门到上手。

ooo22的博客 265

arcgis runtime for android 100.14.0 入门系列,八、featureLayer要素符号化与标注表达式

这一章节我们来实现如何在要素上显示标注和各种酷炫图标,不然单单只是一个红色的点和一根有颜色的线不太美观和不够见名知意。图标资源读者可以在ArcgisAndroid源码主目录可以看到,在程序启动的时候在文件管理器ArcgisAndroid中会生成一个叫 图标资源 目录,你需要把这些图标资源复制进去就可以进行下一步操作了。首先回到图层配置中可以看到新增了两个可以下拉的选项,标注字段就是把选中的字段作为该图层的标注字段,例如我选中的是名称字段,我在录入要素的时候输入的是 红绿灯 它就会把这个红绿灯内容作为标签显示

weixin_40807433的博客 2318

Multisim14.0仿真(五十九)基于74LS161的24进制计数器应用设计

它具有同步预置、异步清零功能,支持并行数据加载,并可在计数使能控制下进行二进制计数。:低电平时,在下一个时钟上升沿加载输入数据(A, B, C, D)。(多个 74LS161D 串联构成 8 位、12 位等更长计数器)。低电平时,下一个时钟上升沿加载输入数据(A, B, C, D)。:低电平有效,立即清零计数器(不受时钟控制)。均为高电平时,每个时钟上升沿计数。:两者均为高电平时,计数器才能递增。:立即清零计数器(不受时钟控制)。(通过预置初始值控制计数范围)。(计数范围:0 ~ 15,即。

corlin6688的博客 4760

ArcGIS for Android 100.3.0(15):GeometryEngine类的常用方法介绍

GeometryEngine 定义用于对几何执行各种操作的静态方法。例如坐标转化,计算距离,面积等。 API https://developers.arcgis.com/android/latest/api-reference/reference/com/esri/arcgisruntime/geometry/GeometryEngine.html#boundary(com.esr...

qq_36699930的博客 5798

越野换了逐飞的ips200pro的屏幕后代码烧录中报错: “Cannot initialize device connection” 和 “Flashing failed” ...如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1150

DeepSeek揭秘:构建高效反洗钱智能监控系统的全流程与代码实例

在金融领域,反洗钱(AML)是一项至关重要的任务。随着金融交易的复杂性和规模不断增长,传统的手工监控方法已无法满足现代金融系统的需求。因此,开发一个智能监控系统来自动识别和报告可疑交易变得尤为重要。本文将详细介绍如何使用DeepSeek技术构建一个高效的反洗钱智能监控系统,并提供相关的代码实例。

理论都是虚的,代码才是王道。 884

ArcGIS for Android 离线数据空间查询--I查询

空间查询

卡小基的博客 9802

python实现下载和离线安装包环境

导出当前电脑python安装的所有包列表requirement.txt。

m0_60352504的博客 1676

安卓智能地图开发与实施十三:空间查询与展示 - ArcGIS Runtime SDK for Android(Version 100.0.0)

空间查询与展示空间查询需要入口(屏幕触摸、文字输入,甚至绘制个Geometry进行查询),也需要展示容器,如果查询仅仅返回一条记录,在地图中弹出窗口展示信息足矣。当返回多条记录,特别是多个图层的多条记录便需要类似AnimatedExpandableListView的容器来放置查询结果。

3712

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

arcgis属性查询android,Arcgis runtime for Android 100.5 (九) 空间查询

查询方法MapView 的 identifyLayerAsync方法:查询指定图层MapView 的 identifyLayersAsync方法:查询所有图层MapView 的 identifyGraphicsOverlayAsync方法:查询指定图层GraphicMapView 的 identifyGraphicsOverlaysAsync方法:查询所有图层GraphicFeatureTable...

weixin_34055902的博客 1044

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ArcGIS for Android示例解析之空间查询-----QueryTask

QueryTask 查询功能在GIS中是一个不可或缺的重要功能,示例中提供了一个属性查询的Demo,下面来看一下在Android中我们怎样实现一个查询功能, 1、我们在布局文件中添加了一个按钮,并且在代码中添加了这个按钮的点击事件监听; 2、自定义一个 AsyncTask的扩展类,在此类中我们实现了查询功能。 3、在按钮的事件监听类中执行我们自定义的异步类。 相关代码如下:

hupuxiang的专栏 974

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

ArcGIS for Android Runtime100 基本操作(三)——离线数据空间查询

空间查询是地理信息中的一个概念,指的是通过空间数据进行空间数据库的查询操作。       在ArcGIS for Android里,通常采用FeatureTable类来展示空间数据,每个空间表包含了一系列的字段,一个图形和一个空间参考系。而空间数据的来源主要包括在线获取,离线的geodatabase数据、VTPK数据和MMPK数据的读取等。       目前来说离线数据还是以geodataba

卡小基的博客 1万+

安卓智能地图开发与实施十二:空间查询与模糊搜索 - ArcGIS Runtime SDK for Android(Version 100.0.0)

空间查询与模糊搜索对空间查询的使用每个人都有自己的见解。从项目的角度,一般会进行单图层查询和多图层查询。移动端查询方式主要为触摸查询和文字搜索查询。

2609

ArcGIS Runtime SDK For Android 10.2.x版本空间查询和属性查询

arcgis查询包括空间查询和属性查询,其中空间查询包括点击查询、多边形查询等。

骑行大地的专栏 2278

android ayntask原理,ArcGIS for Android示例解析之空间查询-----QueryTask

转自:http://blog.csdn.net/wozaifeiyang0/article/details/7331450QueryTask查询功能在GIS中是一个不可或缺的重要功能,示例中提供了一个属性查询的Demo,下面来看一下在Android中我们怎样实现一个查询功能,1、 我们在布局文件中添加了一个按钮,并且在代码中添加了这个按钮的点击事件监听;2、...

weixin_32236693的博客 332

arcgis for android空间查询 点击某点,选中该点所在区域,高亮显示

修改mail.xml <com.esri.android.map.MapView android:id="@+id/map" android:layout_width="fill_parent" android:layout_height="fill_parent" url="http://www.arcgis.com/home/web

li641808825的博客 6031

arcgis for android 空间查询 - 点击某点,选中该点所在单位区域。

编码过程: 1.注册 mapView的单击事件   mMapView.setOnSingleTapListener(mOnSingleTapListener); 2.实现单击的时间的监听器   OnSingleTapListener mOnSingleTapListener = new OnSingleTapListener() {     @Override     p

爱吃肉的熊猫 2004

《ArcGIS Runtime SDK for Android开发笔记》——(3)、ArcGIS Runtime SDK概述

1、前言 ArcGIS Runtime SDK是一整套用于构建原生及跨平台的地图应用程序的开发包,包括移动设备的Android、iOS、Windows Phone,针对桌面的.Net、Java、OSX,以及跨平台的QT。这所有的API基于一个共同的C++内核,并在不同平台上做了对应的封装,使得在多平台下的接口风格和编程模型相一致。当我们在一个平台上学会了对应sdk的开发流程,在其他平台上如果...

weixin_34311757的博客 193
上一篇: android 中怎么获取对象的值
下一篇: EditText setfocusable 无效
CiderVL
博客等级 码龄16年 4粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值