GeocoderViewModel
是 CesiumJS 提供的用于管理地理编码器相关操作的模块。地理编码器是一个用于将地址或者地名转化为经纬度坐标的工具。 GeocoderViewModel
通过管理用户输入和组织相应的请求,可以在地球仪上快速找到用户所需位置的经纬度坐标。
新建 GeocoderViewModel
对象,需要通过传入包含参数的配置对象。
const geocoder = new Cesium.GeocoderViewModel({
geocoderService: new Cesium.BingMapsGeocoder({
key: 'your_bingmaps_key'
})
});
new Cesium.GeocoderViewModel(options: Object)
名称 | 使用 | 类型 | 默认值 |
---|---|---|---|
geocoderService |
设置或获取地理编码器的实例 | BingMapsGeocoder or GoogleMapsGeocoder or OpenStreetMapGeocoder |
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
键来取消操作。