ArcGIS API For JS 加载KML数据
这里KML数据不能简单的使用KMLLayer进行加载。不然会报如下的错误
message: "File not found. Wrong url or out of memory
我们去看一下KMLLayer官方文档
The KMLLayer uses a utility service from ArcGIS.com, therefore your kml/kmz files must be publicly accessible on the internet. If the kml/kmz files are behind a firewall, you must set the esriConfig.kmlServiceUrl to your own utility service (requires ArcGIS Enterprise).
这里面提到一下几点
- KML/KMZ数据必须是公开的(指权限是public)
- 需要设置esriConfig.kmlServiceUrl指向我们的自己的工具服务地址
第一点很好解决,在portal里面设置一下权限,第二点的意思就是。kml需要提供一个解析的服务才能够加载出来。而由于我们的使用的arcgis enterprise,所以需要在程序中设置一下enterprise提供的服务地址。我们看一下esriConfig.kmlServiceUrl的内容是什么。如图
根据上面所描述的,我们需要在代码中进行下面的配置
require(["esri/config"], function(esriConfig) {
esriConfig.kmlServiceUrl = "http://servername.domain.suffix/arcgis/sharing/kml";
});
那我们的地址是什么呢?查了很久enterprise没有找到kml解析工具的地址是什么,后来想到一个办法。在我们的portal中打开kml文件,然后按F12,点击network,在filter那一栏输入kml。可以看到如下所示的图。这个url的组成是由
url = kml解析服务的地址?url=kml数据地址
这里的前面那部分地址就是我们解析kml服务的地址了
因此在我们的程序中应该填入如下地址
require(["esri/config"], function(esriConfig) {
esriConfig.kmlServiceUrl = "https://domain/portal/sharing/kml"
});
地址中 domain是我自己enterprise的域名
我们在网页中打开这个解析kml服务的地址,如下图证明该地址正确
在程序中配置好了以后就可以在程序中使用KMLLayer加载了。
官方已说明:KML无法在3D视图中使用。