A. 移动gis平台ucmap for android有哪些功能哪位大神详细列举一下
UCMap for Android是当前主流的移动GIS开发组件,拥有业界最快的地图显示性能,依托庞大的接口体系为开发者提供强大且丰富的定制功能,UCMap for Android从2009年第一版推出至今,经历了多次的版本升级,其稳定性得到众多实际项目的检验,在GIS各行业得到广泛应用,例如,土地确权、国土监察、电力踏勘、林业调查、林业消防、管线巡检、部件采集、城市管理、房产测绘、农业测图配方、单兵通、航迹管理、室内导航、智慧景区、公安应急等
1、数据格式
UCMap for Android支持通用的矢量地图格式SHP,支持各种遥感影像格式Geotiff、Img、BMP、JPG、PNG等,同时还支持离线的Google地图和影像,或者自定义瓦片图;
2、数据加密
地图数据是重要的保密信息,为了在数据丢失或未授权的情况下,外界无法解读出数据本身的内容,这就要求数据以密文的形式存在;为此,UCMap for Android支持地图数据的加密,经过加密的地图是以密文的形式存在,只有输入正确的口令才能解密;
3、数据更新
地图数据是有现势性的,即经过一段时间,由于地理自然环境的变化,地图数据也应及时更新,这样才能让地图数据更加准确地反映现实情况,所以,地图数据的更新就显得尤为重要;UCMap for Android不但支持离线地图,同时也支持地图在线更新,即可以在线更新替换整个地图数据,也可以更新替换地图中的某些图层;
4、符号化
地图是将地理数据通过符号化的方式予以展现的,UCMap for Android除了支持常规预定义的点、线、面符号外,还支持自定义的SVG矢量符号,用户可以自定义各种矢量符号来渲染地图,实现地图强大的直观表现力;
5、地图显示
地图是由各个专题的图层叠加而成,图层的性质有两种,即矢量图层和影像图层,在坐标一致的前提下,可以将影像图层作为背景图,将矢量图层叠加在影像图层之上;UCMap for Android拥有业界最高的地图浏览性能,支持矢量图和影像图叠加显示,支持地图的缩小、放大、平移、双指旋转,支持滑动的动画效果,支持地图比例尺&指北针等小部件;
6、地图与图层管理
装载地图、设置\获取地图范围、设置\获取地图比例尺、设置\获取地图单位、获取地图图层,添加图层、删除图层、调整图层顺序、修改图层标注字段、修改图层样式、查询图层等;
7、地图查询
地图查询分属性查询和空间查询,属性查询是以地图要素的某些属性值为条件进行SQL查询,查询返回要素的属性或几何信息;空间查询是以地图要素之间的空间拓扑关系为条件进行扩展型的SQL查询;UCMap for Android支持各种类型的SQL查询,尤其是空间查询,能覆盖要素之间各种空间拓扑关系,如Disjoint、Touches、Crosses、Within、Overlaps、Contains、Intersects、Equals、DWithin等空间谓词;
8、要素编辑
一个要素对应数据库表中的一条记录,记录里有属性字段和几何字段,所谓编辑就是对这些属性字段和几何字段进行增加、删除、修改等动作,于是,添加要素、删除要素、更新要素、导出shp是UCMap for Android最基础的功能;为了适应移动端手指或触笔来编辑几何图形,UCMap for Android设计了人性化的编辑交互模式,如点选或框选要素、捕捉节点、移动节点、添加节点、删除节点、移动要素、编辑动作的Redo\Undo(可以无数次)、信息查询info等;UCMap for Android还提供了更高级的编辑,如线或图斑的裁剪、合并等拓扑编辑;针对测量成图的需求,还提供了根据测图过程中测得的长度和角度自动绘制图形的功能;
9、专题图渲染
UCMap for Android支持多种专题图渲染,根据所给定的属性条件,可定制各种专题渲染,甚至可以隐藏图层中的要素;
10、坐标系转换
UCMap for Android支持2个任意投影类型之间的坐标转换,支持四参数、七参数坐标转换;
11、地图量算
UCMap for Android支持地图测距、测面积、测角度;
12、定位监控和轨迹显示
UCMap for Android能实时对若干监控点进行实时显示并快速刷新,能查询并绘制某个监控点的历史轨迹;
13、地图标注
UCMap for Android提供了一个特殊的图层,即装饰图层,用户可以在这个图层上对地图进行标绘,下面要重点介绍的地图标绘就绘制在这个图层上,除了能标绘军标以外,还能绘制矩形、直线、圆、椭圆、路径、文字等;
14、等值线绘制
UCMap for Android支持对离散高程点(或气象点)进行插值,并生成高程等值线或气象等值线图;
15、路径规划与导航
UCMap for Android支持特定场所的简单道路的路径规划,例如,室内地图、景区地图、港口码头等特定场所的路径规划;
16、地图标绘
针对军事作战、应急等行业,协同标绘是其基本需求,UCMap for Android是支持矢量标绘,能对标绘的符号进行组合、拆分、移动、缩放、拉伸、旋转等等操作;标绘是在装饰图层上进行的,一个标绘就是一个装饰对象,装饰对象可以是任意的SVG符号,也可以是预定义的图形;对于测绘行业,地图标绘也为测绘草图的绘制提供了完美的解决方案;
17、集成功能
UCMapfor Android还可以将手机拍照、录音、录像、GPS定位等功能集成在一起,在地图上记录这些多媒体信息采集的时空信息;
UCMapfor Android为开发人员提供了强大的GIS基础平台,用户根据自身项目的需求、通过二次开发来实现所需要的应用产品;UCMap接口庞大、结合本人近几年移动GIS开发经验,以上只是UCMap基础功能的节略,更深入细致的使用还需要开发者阅读UCMap的开发教程和API文档!
B. 安卓开发如何入门
我干了3年Androidsdk开发,觉得到了瓶劲没法更进一步,于是誉信花了一年多点时间,大概摸到点门径。根据前辈的经验,Android底层完全入门需要两年。
先说下我的入门过程:
第零步,下载源码,我下的4.2的,框架层源码10G,内核2G多,ctags给框架层建的标签文件都有600M,当时让我有点震撼,用的vimctagscscope来阅读,还算不错,架构挺清晰的。
第一步,我找到了一本好书《Android的设计与实现第一卷》它讲了Android框架层的启动,初始化,服务框架初始化,Binder,消息循环,。据作者说后面会出讲UI子系统的第二卷,拭目以待。其实这本书看了几十页我就发现需要第二步的知识,否则看不下去,于是跳去第二步。
第二步,学习Linux系统编程,在看《Android的设计与实现》的时候我发现,框架层的Native部分,全是Linux编程。为了掌握这部分知识,我花了4个月学习了《Linux系统编程手册》(TLPI)这本1000多页的书,我以前是搞WIndows文件系统这块的,所以C语言还比较熟,TLPI的习题很有意思,量也比较大,坚持下来还是收获很多。
第三步,花了4个月学习了一些Linux内核的知识,看了LKD,PLKA看了一半多。越学越没底,觉得不懂得越来越多,不过这个也正常,只有靠慢慢磨,估计以后要不断的磨这块。
第四步,回头看Android源码,这次一口气看完了《Android的设计与实现第一卷》,终于对框架层有了谱。同时真的数次把我看晕,前面看Linux内核源码都没这么晕,不断在Java层和Native层之间跳有点磨脑浆。其中我又觉得Java的基础没有打太牢,回去补了一个月的《CoreJava》第八版。但是这书没有涉及UI子系统,于是又看了《Android内核剖析》
第五步,《Android内核剖析》(这本书实际上是讲框架层的,作者也是个搞嵌入式的,所以他在写框架层的时候文笔不太好,很罗嗦,不过还是有很多看点,到他后来写做ROM,玩开发板时估计是说到了搭渗他的本行,一下子遛起来了看得出还是挺有水平的,这本书知识有点旧毕竟讲的是2.3很多代码已经过时,但是作者很多点子很有参考价值)这本书讲UI子系统和按键/触摸消息处理系统还是很有分量的,尤其13章View绘制那里,结合源码研究很有收获。而后面他讲编译框架和ROM相关的东西都是挺宝贵的资料。
第六步,为了再补一下其他诸如电源管理模块等子系统的知识看了,《深入理解android》系列,个人认为这个系列看起来有点不太舒服,不过作为补充印证还是比较有价值。
第七步,《Android系统源代码情景分析》,罗升阳的源码分析大作,比《Android的设计与实现》分析得更细致,但缺点是涉及到模块比较少,选用的源码也比《Android的设计与实现》更旧一点。看完书后需要去研究作者的博客,东西挺多的,一定让你满意。
第八步,买块开发板自己玩。这步我还没走到,原因是我觉得我还差点准备知识。可能要再几个月,到时准备入块6410或者树莓派。
最后,由于我11年以前都是搞Windows这块的,所以对Linux知识不是很了解,不得已看了这么些书,如果是一直知虚脊做Linux的人,很多步骤估计可以省掉了。直接上源码才是正道。
我本身做着移动GIS开发的工作,学框架层全是因为兴趣,但招聘平台Android框架层开发人员还是蛮有竞争力的有不少定制ROM,智能电视的工作都处于人才难求状态,毕竟有一定的门槛,现在各种ios培训,让奔着钱干开发的人纷纷涌入,而ios只能干sdk开发的缺点就暴露出来了,一堆新手老手,菜鸟大牛全挤在SDK开发这块,我觉得不太妙。反观Android这边,虽然入门菜鸟没有搞ios来钱,但是可持续性很好,从sdk-》框架》驱动》内核这样干下去。干着干着发现自己渐渐变成了Linux开发者/嵌入式开发者的人也不少,新人,老手,菜鸟大牛各居其位,层次性很好。
C. android百度地图怎么开发
一、基本概念:
(一)、网络地图:
网络地图 Android SDK是一套基于Android 2.1及以上版本设备的应用程序接口。 您可以使用该套 SDK开发适用于Android系统移动设备的地图应用,通过调用地图SDK接口,您可以轻松访问网络地图服务和数据, 构建功能丰富、交互性强的地图类应用程序。
网络地图Android SDK提供的所有服务是免费的,接口使用无次数限制。您需申请密钥(key)后, 才可使用网络地图Android SDK。
(二)、LBS:(Location based Service)基于位置的服务
基于位置的服务,它是通过电信移动运营商的无线电通讯网络(如GSM网、CDMA网)或外部定位方式(如GPS)获取移动终端用户的位置信息(地理坐标,或大地坐标),在地理信息系统(外语缩写:GIS、外语全称:Geographic Information System)平台的支持下,为用户提供相应服务的一种增值业务。
二、网络地图使用步骤:【参照(http://developer..com/map/sdk-android.htm)】
(一)、HelloBaiMap:
1、第一步:申请网络地图密钥(API_KEY):
http://developer..com/map/sdk-android.htm
2、第二步:在工程里新建libs文件夹,将开发包里的mapapi_vX_X_X.jar拷贝到libs根目录下,将libBaiMapSDK_vX_X_X.so拷贝到libs\armeabi目录下(官网demo里已有这两个文件,如果要集成到自己的工程里,就需要自己添加),拷贝完成后的工程目录如下图所示;
注:liblocSDK3.so和locSDK_3.1.jar为网络定位SDK所使用资源,开发者可根据实际需求自行添加。
3、第三步:在AndroidManifest中添加开发密钥、所需权限等信息;
<application
<meta-data
android:name="com..lbsapi.API_KEY"
android:value="P3G69b5s87YG5M31f8A7oyLW"/>
</application>
<uses-permissionandroid:name="android.permission.GET_ACCOUNTS"/>
<uses-permissionandroid:name="android.permission.USE_CREDENTIALS"/>
<uses-permissionandroid:name="android.permission.MANAGE_ACCOUNTS"/>
<uses-permissionandroid:name="android.permission.AUTHENTICATE_ACCOUNTS"/>
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permissionandroid:name="android.permission.INTERNET"/>
<uses-permissionandroid:name="com.android.launcher.permission.READ_SETTINGS"/>
<uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permissionandroid:name="android.permission.BROADCAST_STICKY"/>
<uses-permissionandroid:name="android.permission.WRITE_SETTINGS"/>
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>
4、第四步:在布局文件中添加地图控件:
<com..mapapi.map.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"/>
5、第五步:在应用程序创建时初始化 SDK引用的Context 全局变量:
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 在使用SDK各组件之前初始化context信息,传入ApplicationContext
// 注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
// 装载布局文件
setContentView(R.layout.activity_main);
}
6、第六步:创建地图Activity,管理地图生命周期:
publicclass MainActivity extends Activity {
private MapView mapView;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 在使用SDK各组件之前初始化context信息,传入ApplicationContext
// 注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
// 装载布局文件
setContentView(R.layout.activity_main);
mapView = (MapView) findViewById(R.id.mapView);
}
@Override
protectedvoid onResume() {
super.onResume();
mapView.onResume();
}
@Override
protectedvoid onPause() {
super.onPause();
mapView.onPause();
}
@Override
protectedvoid onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
}
(二)、基础地图:
1、实现基础地图的操作步骤:
布局文件中使用MapView;
初始化SDK,并检查Key的合法性;
SDKInitializer.initialize(getApplicationContext());
checkKEY();
初始化BaiMap对象;
对MapView进行findViewById();
MapView对象调用getMap(),返回BaiMap;
设置BaiMap;
setMapType();
setTrafficEnabled();
(三)、POI搜索:
1、实现POI搜索的操作步骤:
布局文件中使用fragment,用来实现对BaiMap的加载;
class="com..mapapi.map.SupportMapFragment"
当前Activity继承于FragementActivity;
初始化SDK,并检查Key的合法性;
SDKInitializer.initialize(getApplicationContext());
checkKEY();
备注:该两句话必须放在setContentView()之前。
初始化BaiMap对象;
Map = ((SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.fragment_poi_map)).getBaiMap();
初始化PoiSearch对象;
PoiSearch.newInstance();
给PoiSearch对象设置监听器;
(),重写onGetPoiResult()方法;
自定义PoiOverlay类,实现对每个标记的单击监听;
通过onPoiClick()方法,获取每个PoiInfo中的信息。如果这个对象中包含有明细,可以打开一个新页面来展示兴趣点的详细介绍。
在AndroidManifest.xml文件中配置PlaceCaterActivity页面;
该页面是Bai提供的POI的明细介绍页面。
PoiSearch对象调用searchInBound()、searchInCity() 、 searchNearby()方法实现兴趣点查询。
【总结:】核心步骤:
实例化BaiMap,PoiSearch对象;
PoiSearch对象设置OnGetPoiSearchResultListener()监听;
PoiSearch对象调用searchInCity()方法触发监听。
(四)、线路规划:
1、实现路线规划的操作步骤:
布局文件中使用MapView,用来实现对BaiMap的加载;
初始化SDK,并检查Key的合法性;
SDKInitializer.initialize(getApplicationContext());
checkKEY();
初始化MapView;
调用findViewById()
初始化BaiMap对象;
Map = MapView对象.getMap();
初始化RoutePlanSearch对象;
RoutePlanSearch.newInstance();
给RoutePlanSearch对象设置监听器;
(),重写onGetWalkingRouteResult()、onGetTransitRouteResult()、onGetDrivingRouteResult()方法;
自定义三种RouteOverlay类(WalkingRouteOverlay、TransitRouteOverlay、DrivingRouteOvelray);
调用RoutePlanSearch对象的三种方法(drivingSearch()、transitSearch()、walkingSearch())实现路线规划。
【总结:】核心步骤:
实例化BaiMap,RoutePlanSearch对象;
RoutePlanSearch对象设置OnGetRoutePlanResultListener监听;
RoutePlanSearch对象调用drivingSearch()、transitSearch()、walkingSearch()方法触发监听。
(五)、公交查询:
1、实现公交查询的操作步骤:
布局文件中使用fragment,用来实现对BaiMap的加载;
class="com..mapapi.map.SupportMapFragment"
初始化SDK,并检查Key的合法性;
SDKInitializer.initialize(getApplicationContext());
checkKEY();
当前Activity继承于FragementActivity;
初始化BaiMap对象;
Map = ((SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.fragment_poi_map)).getBaiMap();
初始化PoiSearch对象/初始化BusLineSearch对象;
PoiSearch.newInstance();
BusLineSearch.newInstance();
给BusLineSearch对象设置监听器;
(),重写onGetBusLineResult()方法;
给PoiSearch对象设置监听器;
(),重写onGetPoiResult()方法;
在这个监听器中调用BusLineSearch对象的searchBusLine()方法;
给按钮增加单击监听事件,实现PoiSearch对象的searchInBound()、searchInCity() 、 searchNearby()方法实现兴趣点查询。
【总结:】核心步骤:
实例化BaiMap、PoiSearch对象及BusLineSearch对象;
PoiSearch对象设置OnGetPoiSearchResultListener()监听;BusLineSearch对象设置监听;
在PoiSearch对象的监听回调方法onGetPoiResult()中调用busLineSearch对象的searchBusLine()方法;
PoiSearch对象调用searchInCity()方法触发整个监听。
【备注:】
整体思路:先调用POI查询,在POI查询中的监听器中执行BusLine查询。