全国高分辨率土地利用数据服务 土地利用数据服务 土地覆盖数据服务 坡度数据服务 土壤侵蚀数据服务 全国各省市DEM数据服务 耕地资源空间分布数据服务 草地资源空间分布数据服务 林地资源空间分布数据服务 水域资源空间分布数据服务 建设用地空间分布数据服务 地形、地貌、土壤数据服务 分坡度耕地数据服务 全国大宗农作物种植范围空间分布数据服务
多种卫星遥感数据反演植被覆盖度数据服务 地表反照率数据服务 比辐射率数据服务 地表温度数据服务 地表蒸腾与蒸散数据服务 归一化植被指数数据服务 叶面积指数数据服务 净初级生产力数据服务 净生态系统生产力数据服务 生态系统总初级生产力数据服务 生态系统类型分布数据服务 土壤类型质地养分数据服务 生态系统空间分布数据服务 增强型植被指数数据服务
多年平均气温空间分布数据服务 多年平均降水量空间分布数据服务 湿润指数数据服务 大于0℃积温空间分布数据服务 光合有效辐射分量数据服务 显热/潜热信息数据服务 波文比信息数据服务 地表净辐射通量数据服务 光合有效辐射数据服务 温度带分区数据服务 山区小气候因子精细数据服务
全国夜间灯光指数数据服务 全国GDP公里格网数据服务 全国建筑物总面积公里格网数据服务 全国人口密度数据服务 全国县级医院分布数据服务 人口调查空间分布数据服务 收入统计空间分布数据服务 矿山面积统计及分布数据服务 载畜量及空间分布数据服务 农作物种植面积统计数据服务 农田分类面积统计数据服务 农作物长势遥感监测数据服务 医疗资源统计数据服务 教育资源统计数据服务 行政辖区信息数据服务
Landsat 8 高分二号 高分一号 SPOT-6卫星影像 法国Pleiades高分卫星 资源三号卫星 风云3号 中巴资源卫星 NOAA/AVHRR MODIS Landsat TM 环境小卫星 Landsat MSS 天绘一号卫星影像
图 9 “Hello World”的工程目录结构
从Eclipse中展开“AgsSampleHelloWorld”工程,我们就可以看到图 9这样的目录结构。在这个目录结构中,最扎眼的就是“src”目录和其中的“HelloWorld.java”,这让我们马上意识到这是一个Java程序。没错,Android系统虽然是基于Linux内核的,但是在Android开发应用程序却是使用Java语言,Java代码编译出来的字节码将运行在Linux系统中的一个虚拟机中,这个虚拟机名为Dalvik[1]。
在工程的根目录下有两个配置文件,“default.properties”和“AndroidManifest.xml”。这两个配置文件在这么“根”的位置,当然是对整个工程有提纲挈领的作用,先看这个“default.properties”,打开只有一行实际内容(和很多行注释):
target=android-8
从这个文件的注释中知道,你既无需修改这个文件,也从中得不到很多信息,这个文件只是告诉了Android的编译系统,这个工程的目标平台是“android-8”,也就是Android 2.2。
图 10 Android平台版本和API版本的关系
但是,“AndroidManifest.xml”就不一样了,从名字就可以知道,这是Android工程的清单文件,直接用文本编辑器打开它可能是如下的内容:
"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android"
package="com.esri.arcgis.android.samples"
android:versionCode="1"
android:versionName="1.0">
"@drawable/icon" android:label="@string/app_name">
".HelloWorld"
android:label="@string/app_name">
"android.intent.action.MAIN" />
"android.intent.category.LAUNCHER" />
"android.permission.INTERNET">
android:name="android.permission.WRITE_EXTERNAL_STORAGE">
android:name="android.permission.ACCESS_FINE_LOCATION">
"7" />
在这个清单文件的下方,有一些元素,它包含了这个工程正常运行所需要的权限,比如“AgsSampleHelloWorld”运行时会显示一个在线的地图,那么显然,它运行时需要一个Internet连接,所以,这里需要配置“android.permission.INTERNET”这个用户权限。这样,在这个应用程序被安装的时候,Android就会询问用户:“你是不是允许这个程序访问Internet?”,如果用户允许了,你的应用程序才能正常地获取地图。当然,不要担心编写配置文件是一件很麻烦的事情,Android开发工具提供了“Android Manifest Editor”帮助你可以比较方便地编辑清单文件,比如用户权限就可以如图 11这样地修改。
图 11 使用Android开发插件配置工程权限
再往上看,清单文件中的元素中包含的是对应用程序包含组件的描述。首先,让我们把元素本身的属性值挑出来看看:
"@drawable/icon" android:label="@string/app_name">
“@drawable/icon”显然是这个程序的图标,但是具体对应到哪个图片呢?这还得继续看当前工程的目录结构,在工程目录下有个“res”文件夹,其中主要存放应用程序的各种资源,而以“drawable-”打头的几个目录就是存放图片的目录,不同目录后面会跟着“hdpi”[2]、“mdpi”[3]、“ldpi”[4]之类不同的内容,这些目录下对应的是不同尺寸屏幕下的不同图片,因为小屏幕可能只需要小图片,大屏幕可能就需要更大更精细的图片。
图 12 res目录下的资源
“@string/app_name”则对应了一段字符串,这个字符串是在“res/values”目录下的“strings.xml”文件中定义的,打开这个文件是如下的内容:
"1.0" encoding="utf-8"?>
"hello">Hello World, HelloWorld!
"app_name">HelloWorld Sample
想必,等会应用程序运行起来后,它的标题栏上应该会显示“HelloWorld Sample”这一行内容,对吧。
为什么我们在一些目录和XML文件中配置一些内容,Android程序就能知道从哪里去获取真实的资源呢?因为Android开发工具会帮助我们生成一个“R.java”源文件,这个源文件定义了一个名为“R”的类,这个类中不同的静态变量指示了各种资源的不同位置,在后面你可以看到,在程序的Java代码中,我们可以直接通过R.xxx.xxx指代一个资源。
图 13 自动生成的R.java
清单文件的元素内还有元素,这对应了Android程序中的Activity。由于本次广告插播时间过长,这些内容留待后续再说,不过,现在起码你对一个Android工程中大概包含的内容应该有所了解了吧?