首页 / 浏览问题 / 三维GIS / 问题详情
Cesium.Geocoder未提供geocoderServices
95EXP 2020年07月27日

Cesium.Geocoder在Cesium API (https://www.cesium.com/docs/cesiumjs-ref-doc/Geocoder.html) 提供了geocoderServices让我们可以指定自己的一到多个geocoder服务。

而在iClient3D的在Cesium API (http://support.supermap.com.cn:8090/webgl/Build/Documentation/Geocoder.html)中,貌似这换成了url,文档中也未提及指定这个url后会如何带入查询参数、响应的格式是怎样

1个回答

1,545EXP 2020年07月27日
示例代码也显示iClient3D的Cesium.Geocoder改变了原有的功能、只能使用supermap online的服务、功能也减少了,不符合期望的需求

您好,如果您需要自己设定查询参数来响应,可以调用二维接口的GeoCodingParameter类,具体用法可参考API文档https://iclient.supermap.io/9.0.0/web/libs/iclient8c/apidoc/files/SuperMap/Cloud/Location/GeocodingParameter-js.html以及示例代码https://iclient.supermap.io/examples/classic/editor.html#addressMatchService

期望达到的效果是:

  1. 用户在键入字符时,实时检索指定的geocoding服务(而非supermap online上的)
  2. 将服务响应中包含的地址列表作为建议选项供用户选择
  3. 当建议选项被选中,飞到该地址

这需求使用Cesium较新版本的Cesium.Geocoder可以实现。iClient3D可能基于较早版本的Cesium,能否合并较新版本的Cesium.Geocoder代码到iClient3D中?

您好,如果您需要更换更高版本的cesium,可至官网下载最新的webgl包支持cesium1.67版本。下载好后将包里的Build文件夹替换原始包。
您指的官网下载最新的webgl包是iClient3D还是Cesium官网上的Build? 如果是后者,它又不包含iClient3D中有的功能,比如对S3M的支持。

iClient3D的包哦,在supermap官网上下载http://support.supermap.com.cn:8090/webgl/download.html

测试了iClient3D 10.0.1, Cesium.Geocoder的功能问题依旧如上述。看上去该类或其依赖没有升级到Cesium1.67哦。

同时也测试了Cesium 1.67,Cesium.Geocoder工作正常如期望。
您打印一下cesium呢,看看您心下的版本是1.54还是1.67
新下载的Cesium 1.67 2020.3.2 build的

之前使用的Cesium 1.69 2020.5.1 build的

另外,iClient3D 10.0.1中的Cesium.Geocoder options指定了url也无用,依然在点击图标后才访问http://www.supermapol.com/iserver/services/localsearch/rest/searchdatas/China/poiinfos.jsonp?keywords=

与API文档,http://support.supermap.com.cn:8090/webgl/Build/Documentation/Geocoder.html?classFilter=Geocoder,中所述不符

您好,我不太理解您指定url的意思,方便的话能把代码私信发给我吗我帮您确认一下。

按Cesium API(https://www.cesium.com/docs/cesiumjs-ref-doc/Geocoder.html),在options的参数中指定我封装的geocoderServices数组就可以让Geocoder来访问我的geocoding service。

按iClient3D的API(http://support.supermap.com.cn:8090/webgl/Build/Documentation/Geocoder.html)在options的参数中有个url似乎可以指定来访问我的geocoding service,但实际上不起任何作用,依然是http://www.supermapol.com/iserver/services/localsearch/rest/searchdatas/China/poiinfos.jsonp?keywords=。可以假定iClient3D源码中的Geocoder.js和GeocoderViewModel.js与Cesium 1.37是不同实现。

创建的Geocoder的部分代码:

        var options = {
            url: "http://localhost:/geocoder",
            container : container,
            geocoderServices: services,
            scene: scene,
            viewer: viewer

        };
        new Cesium.Geocoder(options);

您好这个Url是用作访问BingMaps的路径,不是访问geocoding service的路径,目前GeocoderService接口只能通过外部服务访问地理编码,暂不支持自行封装地理编码服务,很抱歉给您带来的不便。

解决方案可不可以是:

  1. 将这个功能需求的实现加入到新版本
  2. 提供iClient3D的源码,用户做相应的修改后,自行Make Build
您好您提出的解决方案可行性不太高,因为加入这个功能不仅需要修改webgl包中的cesium.js,里面牵扯的东西会很多,这个问题我会尽快上报需求。
...