Cesium应用篇:3控件(4)Geocoder
Geocoder是一个非常简单的控件,但也是非常常用且实用的控件,顾名思义,Geocoder就是地理编码的意思,而平常我们经常会查询一些地物,也就是常用的POI搜索,就是Geocoder的功劳。
首先,该控件支持经纬度定位,比如如下,是北京京洲世家小区的经纬度,输入后可以定位至该点,如上图所示。但是在天朝,有一种坐标叫做火星坐标。换句话说,如果你是在高德,百度等国内数据中获取的POI经纬度,该经纬度是经过偏移的,而我们的三维球通常都是用Bing,天地图等没有偏移的影像,这样就会导致地物的不匹配,还要,我们只需要纠偏POI就可以。范例里面有惊喜,自己看geocoder范例吧。
另外,Cesium采用的是Bing的地理编码和POI检索,需要Key,而且国内的数据,毕竟是中文检索,Bing在这点上有些水土不服的,所以,下面我们试着用SuperMap的POI服务来替代(当然,你也可以用其他的,比如高德,百度等,但需要申请Key,我申请了也不知道为何说我的plat不支持,想到范例的简单性,发现只有SuperMap的最简单易用,也算一个无奈之举吧。)
一个很不幸的事实是,Cesium没想到用户想要更换Geocoder的服务,所以并没有提供对应的接口来方便我们的扩展,不过,毕竟是JavaScript吗,只要深挖掘,什么都能替换之。
如上图,我们需要改写的就是searchCommand函数,尽管geocoder只提供了get接口。这里有两个逻辑,第一个就是geocode,就是POI的查询,另一个是正在查询的状态下,则会中断正在进行的查询操作。我们直接把GeocoderViewModel中的cancelGeocode函数拿来重用即可。而geocode则是需要重写的重点函数。
直接输入经纬度定位是很不错的功能,所以要保留,这段代码就留着。下面,就要开始替换Bing的POI检索了。先看看超图的POI检索服务:
输入京洲世家,为什么总要输入这个?总比输一个故宫博物院好吧。点击查询,我们就可以获取其对应的url和json结果。
知道了url的规范后,通过Cesium构造一个Promise来发送请求:
返回的结果如下:
有了返回值,我们就需要解析里面的内容,并讲这些POI信息构造成Entity,保存到Viewer中。同样,这里的经纬度是偏移后的,我们需要做一个纠偏处理。
这里还有一个小技巧,我们每次查询时,都需要清除上一次查询的对象,所以我们需要在Geocoder中保存一份当前查询POI的Entity对象,方便下次查询后的删除,而删除是通过id的,所以需要付给一个唯一的ID值,我觉得通过Clock获取当前时间是一个不错的方式。
另外,为了能够让Entity在点击时获取其描述信息,我们也需要指定Entity的description,在geocoder.html范例中,采用了最简单的ConstantProperty,如果对这一块不清楚的,可以参考InfoBox控件篇,里面对Property有一个较为详细的介绍。具体代码如下:
至此,我们对Geocoder有了一个较为详细的认识,同时也扩展Geocoder控件,能够指定其他的POI服务来满足自己的需要,并实现了对查询后的POI构造并管理Entity的功能,更好的展现查询后的结果。另外,由于火星坐标的原因,会有匹配不准确的情况,这里通过纠偏也解决了这一实际应用的问题。奉上一个范例的效果图,Geocoder的介绍就到这里。
Cesium应用篇:3控件(4)Geocoder的更多相关文章
- iOS开发UI篇—UIScrollView控件实现图片缩放功能
iOS开发UI篇—UIScrollView控件实现图片缩放功能 一.缩放 1.简单说明: 有些时候,我们可能要对某些内容进行手势缩放,如下图所示 UIScrollView不仅能滚动显示大量内容,还能对 ...
- iOS开发UI篇—UIScrollView控件介绍
iOS开发UI篇—UIScrollView控件介绍 一.知识点简单介绍 1.UIScrollView控件是什么? (1)移动设备的屏幕⼤大⼩小是极其有限的,因此直接展⽰示在⽤用户眼前的内容也相当有限 ...
- iOS开发UI篇—UITableview控件简单介绍
iOS开发UI篇—UITableview控件简单介绍 一.基本介绍 在众多移动应⽤用中,能看到各式各样的表格数据 . 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView,UIT ...
- iOS开发UI篇—UITableview控件基本使用
iOS开发UI篇—UITableview控件基本使用 一.一个简单的英雄展示程序 NJHero.h文件代码(字典转模型) #import <Foundation/Foundation.h> ...
- iOS开发UI篇—UITableview控件使用小结
iOS开发UI篇—UITableview控件使用小结 一.UITableview的使用步骤 UITableview的使用就只有简单的三个步骤: 1.告诉一共有多少组数据 方法:- (NSInteger ...
- iOS开发UI篇—UIScrollView控件实现图片轮播
iOS开发UI篇—UIScrollView控件实现图片轮播 一.实现效果 实现图片的自动轮播 二.实现代码 storyboard中布局 代码: #import "YYV ...
- 【转】 iOS开发UI篇—UIScrollView控件实现图片轮播
原文:http://www.cnblogs.com/wendingding/p/3763527.html iOS开发UI篇—UIScrollView控件实现图片轮播 一.实现效果 实现图片的自动轮播 ...
- WPF 精修篇 用户控件
原文:WPF 精修篇 用户控件 增加用户控件 数据绑定还是用依赖属性 使用的事件 就委托注册一下 public delegate void ButtonClick(object b,EventArgs ...
- iOS开发——基本常识篇&各种控件默认高度
各种控件默认高度 1.状态栏 状态栏一般高度为20像素,在打手机或者显示消息时会放大到40像素高,注意,两倍高度的状态栏在好像只能在纵向的模式下使用.如下图 用户可以隐藏状态栏,也可以将状态栏设置 ...
- 【转】iOS开发——基本常识篇&各种控件默认高度
原文:http://www.cnblogs.com/iCocos/p/4595614.html 各种控件默认高度 1.状态栏 状态栏一般高度为20像素,在打手机或者显示消息时会放大到40像素高,注 ...
随机推荐
- myBatis中 collection 或 association 联合查询 中column 传入多个参数值
下面是一个树形结构表自连接 联合查询 Demo <resultMap id="BaseResultMap" type="com.maidan.daas.entit ...
- spark 大数据 LR测试
#!/bin/bash size="120Y*10W"date1=`date +%F_%H-%M-%S`config="spark-submit \ --jars /da ...
- *HDU 1007 计算几何
Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- Struts 2的数据校验
既然说到了Struts 2的数据校验,我们该怎么去实现呢?又是通过什么来实现呢? 就让我带着大家一起来走进Struts 2的数据校验吧. 首先我们会想到在Stuts 2的登录案例中我们定义了一个Act ...
- 【转】POJ题目分类推荐 (很好很有层次感)
OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094)初期: 一. ...
- SQLite vs MySQL vs PostgreSQL:关系型数据库比较
自1970年埃德加·科德提出关系模型之后,关系型数据库便开始出现,经过了40多年的演化,如今的关系型数据库种类繁多,功能强大,使用广泛.面对如此之多的关系型数据库,我们应该如何权衡找出适合自己应用场景 ...
- ABP理论学习之通知系统
返回总目录 本篇目录 介绍 订阅通知 发布通知 用户通知管理者 实时通知 通知存储 通知定义 介绍 通知(Notification)用于告知用户系统中的特定事件.ABP提供了基于实时通知基础设施的发布 ...
- 循序渐进做项目系列(5):制作安装包,谁人都可以!——VS制作安装包简明教程
一开始让我做安装包的时候,其实我是拒绝的.因为我根本就不会做安装包.查了资料之后,我很懵,很晕,很乱,因为不清晰,不简明,不直白.然而经过一番彷徨的挣扎,我终于发现:制作安装包,谁人都可以!故挥狼毫, ...
- UI控件(UIButton)
@implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // UIButtonTypeCustom = 0, ...
- 相识HTML5 canvas
Canvas是HTML的API,我们可以用它在网页中实时的来生成图像. 文章导读 1.必备技能 2.用于画图的函数 例子: -会话气泡- -心形- -钟表- -星球里的星星- - ...