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像素高,注 ...
随机推荐
- Python之路Day18-正则及Django
一. 正则表达式 1.定义正则表达式 /.../ 用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m 表示多行匹配JS正则匹配时本身就是支持多行,此处多行匹 ...
- 关于c++的 vector 容器的使用及创建方法
1.vector向量容器的使用,vector具有自动管理的功能,可以进行元素的查找删除 创建方法: (1) vector<int > v; 创建了一个v的容器,没指定容量: (2) v ...
- 发现meta有个刷新页面的办法。
meta是html中不可缺少的一个标签,它的应用以方便浏览器搜索并分类当前网页的内容. meta总是放在head标签的第一个位置.今天我在复习前端知识的时候,在网上发现了用meta刷新网页的好办法. ...
- matlab 中 eps 的分析
eps(a)是|a|与大于|a|的最小的浮点数之间的距离,距离越小表示精度越高.默认a=1: 这里直接在matlab中输入:eps == eps(1)(true). 我们知道浮点数其实是离散的,有限的 ...
- 在iOS中使用ZXing库[转]
前言 ZXing(Github镜像地址)是一个开源的条码生成和扫描库(开源协议为Apache2.0).它不但支持众多的条码格式,而且有各种语言的实现版本,它支持的语言包括:Java, C++, C#, ...
- 一起来测试天兔Lepus3.8 Beta版本的MSSQL部分
一起来测试天兔Lepus3.8 Beta版本的MSSQL部分 产品介绍:http://www.lepus.cc/下载地址:http://www.lepus.cc/soft/18手册地址:http:// ...
- 基于腾讯手Q样式规范Frozen UI
Frozen UI是一个开源的简单易用,轻量快捷的移动端UI框架.基于手Q样式规范,选取最常用的组件,做成公用离线包减少请求,升级方式友好,文档完善,目前全面应用在腾讯手Q增值业务中. css组件包括 ...
- Windows安装和使用zookeeper
之前整理过一篇文章<zookeeper 分布式锁服务>,本文介绍的 Zookeeper 是以 3.4.5 这个稳定版本为基础,最新的版本可以通过官网 http://hadoop.apach ...
- ASP.NET Core 1.0中的管道-中间件模式
ASP.NET Core 1.0借鉴了Katana项目的管道设计(Pipeline).日志记录.用户认证.MVC等模块都以中间件(Middleware)的方式注册在管道中.显而易见这样的设计非常松耦合 ...
- CSS调试小技巧 —— 调试DOM元素hover,focus,actived的样式
最近学习html5和一些UI框架,接触css比较多,就来跟大家分享一下css中的一些调试技巧.之前做页面,css都是自己写的,所以要改哪里可以很快的找到,现在使用了UI框架,里面的样式是不可能读完的, ...