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的更多相关文章

  1. iOS开发UI篇—UIScrollView控件实现图片缩放功能

    iOS开发UI篇—UIScrollView控件实现图片缩放功能 一.缩放 1.简单说明: 有些时候,我们可能要对某些内容进行手势缩放,如下图所示 UIScrollView不仅能滚动显示大量内容,还能对 ...

  2. iOS开发UI篇—UIScrollView控件介绍

    iOS开发UI篇—UIScrollView控件介绍 一.知识点简单介绍 1.UIScrollView控件是什么? (1)移动设备的屏幕⼤大⼩小是极其有限的,因此直接展⽰示在⽤用户眼前的内容也相当有限 ...

  3. iOS开发UI篇—UITableview控件简单介绍

    iOS开发UI篇—UITableview控件简单介绍 一.基本介绍 在众多移动应⽤用中,能看到各式各样的表格数据 . 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView,UIT ...

  4. iOS开发UI篇—UITableview控件基本使用

    iOS开发UI篇—UITableview控件基本使用 一.一个简单的英雄展示程序 NJHero.h文件代码(字典转模型) #import <Foundation/Foundation.h> ...

  5. iOS开发UI篇—UITableview控件使用小结

    iOS开发UI篇—UITableview控件使用小结 一.UITableview的使用步骤 UITableview的使用就只有简单的三个步骤: 1.告诉一共有多少组数据 方法:- (NSInteger ...

  6. iOS开发UI篇—UIScrollView控件实现图片轮播

    iOS开发UI篇—UIScrollView控件实现图片轮播 一.实现效果 实现图片的自动轮播            二.实现代码 storyboard中布局 代码: #import "YYV ...

  7. 【转】 iOS开发UI篇—UIScrollView控件实现图片轮播

    原文:http://www.cnblogs.com/wendingding/p/3763527.html iOS开发UI篇—UIScrollView控件实现图片轮播 一.实现效果 实现图片的自动轮播 ...

  8. WPF 精修篇 用户控件

    原文:WPF 精修篇 用户控件 增加用户控件 数据绑定还是用依赖属性 使用的事件 就委托注册一下 public delegate void ButtonClick(object b,EventArgs ...

  9. iOS开发——基本常识篇&各种控件默认高度

    各种控件默认高度   1.状态栏 状态栏一般高度为20像素,在打手机或者显示消息时会放大到40像素高,注意,两倍高度的状态栏在好像只能在纵向的模式下使用.如下图 用户可以隐藏状态栏,也可以将状态栏设置 ...

  10. 【转】iOS开发——基本常识篇&各种控件默认高度

    原文:http://www.cnblogs.com/iCocos/p/4595614.html 各种控件默认高度   1.状态栏 状态栏一般高度为20像素,在打手机或者显示消息时会放大到40像素高,注 ...

随机推荐

  1. python Django 进阶篇

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  2. *HDU2147 博弈

    kiki's game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 40000/10000 K (Java/Others)Total ...

  3. *CF2.D(哥德巴赫猜想)

    D. Taxes time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...

  4. SQL Server 2012基本知识

    1:图形化界面设置外键 解决:table->选中表->design->选中需要设置外键的字段->选择"关系"->选择"添加"-&g ...

  5. 订单支付成功后存储过程 - MYSQL

    BEGIN SET @userId = (SELECT user_id FROM t_shoporder WHERE id = orderId); /*修改订单状态,改成已支付*/ ,update_t ...

  6. Javascript外部对象

    Window 浏览器: - location:地址 - history:历史 - Document:文档 - screen:窗口 - navigator:帮助 > 1.外部对象就是浏览器提供的A ...

  7. 搬-Android - Wi-Fi Tutorial[转]

    http://www.tutorialspoint.com/android/android_wi_fi.htm Android allows applications to access to vie ...

  8. [转]Tesseract 3.02中文字库训练

    下载chi_sim.traindata字库下载tesseract-ocr-setup-3.02.02.exe 下载地址:http://code.google.com/p/tesseract-ocr/d ...

  9. iOS在线更新framework,使用NSBundle动态读取

    官方文档:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/LoadingCode/Tasks/Loadin ...

  10. Linux新手扫盲(转载)

    一. Linux特点 1.免费/开源: 2.支持多线程/多用户: 3.安全性好: 4.对内存和文件管理优越. Linux最小只需4M ——> 嵌入式开发 二. 文件目录 Linux系统所有软硬件 ...