当前位置:  编程技术>移动开发
本页文章导读:
    ▪深入显出空间索引:2        深入浅出空间索引:2 第一篇讲到了传统的索引如B树不能很好的支持空间数据,比如点(POI等)、线(道路、河流等)、面(行政边界、住宅区等)。本篇将对空间索引进行简单分类,然后.........
    ▪ UIView无限旋旋动画的实现        UIView无限旋转动画的实现今天需要实现一个搜狐新闻中“加载中”的效果,里面需要实现一个无限转圈的动画,在网上搜了一下,在这里把源码分享给大家:) 需要实现的效果如下: 实现U.........
    ▪ 应用程序基础之03Manifest文件(1)       应用程序基础之03Manifest文件(一)Manifest文件(The Manifest File)(清单文件) *************************************************************         Android系统在启动一个应用组件之前必须通过查看应用程序的.........

[1]深入显出空间索引:2
    来源: 互联网  发布时间: 2014-02-18
深入浅出空间索引:2

第一篇讲到了传统的索引如B树不能很好的支持空间数据,比如点(POI等)、线(道路、河流等)、面(行政边界、住宅区等)。本篇将对空间索引进行简单分类,然后介绍网格索引。(深入浅出空间索引1:http://blog.csdn.net/zhanlijun/article/details/13171539)

一、空间索引有哪几种?

  传统索引使用哈希和树这两类最基本的数据结构。空间索引虽然更为复杂,但仍然发展于这两种数据结构。因此可以将空间索引划分为两大类:1)基于哈希思想,如网格索引等;2)基于树思想,有四叉树、R树等。

 

二、网格索引

  哈希是通过一个哈希函数将关键字映射到内存或外存的数据结构,如何扩展到空间数据呢?

2.1. 网格索引原理

  扩展方法:对地理空间进行网格划分,划分成大小相同的网格,每个网格对应着一块存储空间,索引项登记上落入该网格的空间对象。

  举个例子,我们将地理空间进行网格划分,并进行编号。该空间范围内有三个空间对象,分别是id=5的街道,23的河流和11的商圈。这时候我们可以按照哈希的数据结构存储,每个网格对应着一个存储桶,而桶里放着空间对象,比如对2号网格,里面存储着id=5的空间对象,对35号网格,桶里放着id=5和id=23的空间对象。

 

  假如我们要查询某一空间范围内有哪些空间对象,比如下面的红框就表示空间范围,我们可以很快根据红框的空间范围算出它与35号和36号网格相交,然后分别到35号和36号网格中查找空间对象,最终找出id=5和id=23的空间对象。

 

2.2. 网格索引缺点

1)索引数据冗余

  网格与对象之间多对多关系在空间对象数量多、大小不均时造成索引数据冗余。比如11号商圈这个空间对象在68,69,100,101这4个网格都有存储,浪费了大量空间。

2)网格的大小难以确定

  网格的划分大小难以确定。网格划分得越密,需要的存储空间越多,网格划分的越粗,查找效率可能会降低。对于图a,这个查询需要查询4个网格,由于4个网格覆盖了整个空间,因此这个查找其实是将空间范围内所有的点数据都遍历一遍,失去了索引的意义。

 

3)很多网格没有数据

  空间数据具有明显的聚集性,比如POI只在几个热点商贸区聚集,在郊区等地方很稀疏,这将导致很多网格内没有任何空间数据。

 

 

 

下一节将介绍四叉树。


    
[2] UIView无限旋旋动画的实现
    来源: 互联网  发布时间: 2014-02-18
UIView无限旋转动画的实现

今天需要实现一个搜狐新闻中“加载中”的效果,里面需要实现一个无限转圈的动画,在网上搜了一下,在这里把源码分享给大家:)

需要实现的效果如下:


实现UIView无限旋转的代码如下:

// an ivar for your class:
BOOL animating;

- (void) spinWithOptions: (UIViewAnimationOptions) options {
    // this spin completes 360 degrees every 2 seconds
    [UIView animateWithDuration: 0.3f
                          delay: 0.0f
                        options: options
                     animations: ^{
                         view.transform = CGAffineTransformRotate(view.transform, M_PI / 2);
                     }
                     completion: ^(BOOL finished) {
                         if (finished) {
                             if (animating) {
                                 // if flag still set, keep spinning with constant speed
                                 [self spinWithOptions: UIViewAnimationOptionCurveLinear];
                             } else if (options != UIViewAnimationOptionCurveEaseOut) {
                                 // one last spin, with deceleration
                                 [self spinWithOptions: UIViewAnimationOptionCurveEaseOut];
                             }
                         }
                     }];
}

- (void) startSpin {
    if (!animating) {
        animating = YES;
        [self spinWithOptions: UIViewAnimationOptionCurveEaseIn];
    }
}

- (void) stopSpin {
    // set the flag to stop spinning after one last 90 degree increment
    animating = NO;
}


如果大家觉得对自己有帮助的话,还希望能帮顶一下,谢谢:)
个人博客:http://blog.csdn.net/zhaoxy2850
本文地址:http://blog.csdn.net/zhaoxy_thu/article/details/14058139
转载请注明出处,谢谢!



    
[3] 应用程序基础之03Manifest文件(1)
    来源: 互联网  发布时间: 2014-02-18
应用程序基础之03Manifest文件(一)
Manifest文件(The Manifest File)(清单文件)

*************************************************************

        Android系统在启动一个应用组件之前必须通过查看应用程序的AndroidManifest.xml文件(即“清单”文件)来知道组件的存在。因此你的应用程序必须在该文件中声明所有的组件,并且该文件必须被放置在应用程序项目的根目录下。

除了声明应用组件之外,manifest文件还要做许多事情,比如:
        *识别应用程序所需要的任何用户权限,例如联网权限、对用户通讯信息的阅读权限。
        *指出应用程序所需的最小API Level,应用程序使用的就是这个版本的API。
        *声明应用所用到的硬件和软件特性,比如相机、蓝牙服务或者多点触控屏幕等。
        *应用程序需要连接的API类库(而不是Android系统的底层APIs),比如Google Maps的类库。
        *等等。

声明组件
--------------
manifest文件的主要任务是通知系统应用程序的组件。例如,一个manifest文件可以像下边一样声明一个activity:
<?xml version="1.0" encoding="utf-8" ?>
<manifest ...>
	<application android:icon="@drawable/app_icon.png" ...>
		<activity android:name="com.example.project.ExampleActivity"
        	android:label="@string/example_label" ... >
        </activity>
	</application>
</manifest>
在<application>元素中,android:icon属性指向一个识别应用的图标资源。
在<activity>元素中,android:name属性指定了Activity子类的全类名(译者注:所谓全类名,就是包名+类名)。android:label属性指定了一个字符串被用作该activity的用户可见的标签。

你必须像下边这样声明所有的应用程序组件:

       *为所有的activity声明<activity>元素

       *为所有的service声明<service>元素

       *为所有的receiver声明<receiver>元素

       *为所有的provider声明<provider>元素

在你的Activity应用中出现的所有的Activity、service、content provider如果没有在manifest文件中声明那么它们对于系统是不可见的,因此也从不会运行。然而,broadcast receiver可以在manifest文件中声明,也可以在代码中(作为BroadcastReceiver对象)被动态创建,通过调用registerReceiver()方法动态注册进系统。

想了解更多关于如何为你的应用组织manifest文件,请看The AndroidManifest.xml File文档资料。


转发请表明:大飞_Rflyee:http://blog.csdn.net/rflyee/article/details/14088857


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
.net/c#/asp.net iis7站长之家
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3