ArcGIS API For JS 加载KML数据

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的内容是什么。如图

gj8MdDwW4IHCOcu

根据上面所描述的,我们需要在代码中进行下面的配置

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服务的地址了

AexwPEUlKfVpiO3

因此在我们的程序中应该填入如下地址

require(["esri/config"], function(esriConfig) {
    esriConfig.kmlServiceUrl = "https://domain/portal/sharing/kml"
});

地址中 domain是我自己enterprise的域名

我们在网页中打开这个解析kml服务的地址,如下图证明该地址正确

YA4pTgw3V9zyDqE

在程序中配置好了以后就可以在程序中使用KMLLayer加载了。

RqTXDtwJh1U4dkp

官方已说明:KML无法在3D视图中使用。

你可能感兴趣的:(ArcGIS API For JS 加载KML数据)