GeocoderViewModel 是 CesiumJS 提供的用于管理地理编码器相关操作的模块。地理编码器是一个用于将地址或者地名转化为经纬度坐标的工具。 GeocoderViewModel 通过管理用户输入和组织相应的请求,可以在地球仪上快速找到用户所需位置的经纬度坐标。
新建 GeocoderViewModel 对象,需要通过传入包含参数的配置对象。
const geocoder = new Cesium.GeocoderViewModel({
    geocoderService: new Cesium.BingMapsGeocoder({
        key: 'your_bingmaps_key'
    })
});
new Cesium.GeocoderViewModel(options: Object)
| 名称 | 使用 | 类型 | 默认值 | 
|---|---|---|---|
| geocoderService | 设置或获取地理编码器的实例 | BingMapsGeocoderorGoogleMapsGeocoderorOpenStreetMapGeocoder | undefined | 
| isSearchInProgress | 获取当前是否正在进行编码操作 | Boolean | false | 
| searchText | 设置或获取当前待编码的文本信息 | String | "" | 
| 名称 | 使用 | 参数 | 返回值 | 
|---|---|---|---|
| search | 执行地理编码操作。 | text- 指定进行编码的文本信息。 | [Promise]<GeocoderService~Result> | 
| cancelSearch | 取消地理编码操作。 | 无 | 无 | 
| 名称 | 使用 | 返回值 | 
|---|---|---|
| searchStarted | 在编码开始时触发。 | 无 | 
| searchCompleted | 在编码成功完成后触发。 | result- 编码结果。 | 
| searchFailed | 在编码失败时触发。 | error- 编码操作失败时抛出的错误信息。 | 
const geocoder = new Cesium.GeocoderViewModel({
    geocoderService: new Cesium.BingMapsGeocoder({
        key: 'your_bingmaps_key'
    })
});
Sandcastle.addToolbarButton('Geocode New York City', function() {
    geocoder.search('New York City');
});
GeocoderViewModel 不是一个实际的实体对象,所以不存在与实体对象相关的状态。但是,GeocoderViewModel 中包含了一些属性和方法,可以表示在编码操作中不同的状态,这个会在下面阐述。
对于使用 BingMapsGeocoder 地理编码器,需要申请自己的 Bing Maps API key。但是如果使用 OpenStreetMapGeocoder,这个限制就不存在。但使用时需要注意该操作限制了请求频率,因为该操作需要调用 OpenStreetMap 公开的 API 进行数据查询,过于频繁的查询操作可能会被 API 系统拦截限制。
GeocoderViewModel 模块会抛出 DataSourcesError 和 DeveloperError 两种类型的错误,在下面会分别介绍。
new Cesium.DataSourceError(options: Object);
| 名称 | 当前状态 | 类型 | 描述 | 
|---|---|---|---|
| name | 任一 | String | DataSourcesError | 
| message | 任一 | String | 明确错误信息 | 
| originalError | 任一 | Object | 说明发生错误的原因 | 
new Cesium.DeveloperError(message: String);
| 名称 | 当前状态 | 类型 | 描述 | 
|---|---|---|---|
| name | 任一 | String | DeveloperError | 
| message | 任一 | String | 明确错误信息 | 
Ctrl-A 来快速选中整个文本。Esc 键来取消操作。