我正在使用第三方应用程序,该应用程序允许用户将自定义地图图层添加到 Leaflet 地图中。 我能够输入的只是地图图层的网址。我查看了源代码,他们正在使用这种方法:
https://developers.arcgis.com/esri-leaflet/api-reference/layers/feature-layer/
我的 GIS 文件不是通过 arcGIS 系统托管的。 有没有办法可以提供我自己的文件,以便此方法可以将它们正确加载到地图上?
我尝试了几个网址,但我看到不一致的行为:
输入: https://foo.blob.core.windows.net/gis/roads.geojson
这也是它对典型的 arcgis url 所做的事情,这对它们来说效果很好,但不适用于普通的静态文件。
输入: https://foo.blob.core.windows.net/gis
网站获取此内容: https://foo.blob.core.windows.net/gis/?f=json
各种 url 是真正让我着迷的,因为 https://foo.blob.core.windows.net/gis/query is geoJson,所以我想这可能是一个成功的解决方法。
也就是说,我不确定这个方法是否会加载 geoJSON 或者它是否必须是 esri 格式之一。
ArcGIS 要素服务协议的工作原理如下:
假设“https://foo.blob.core.windows.net/gis”是您的“基本 URL”。
首先,它请求
<base_url>?f=json
,这将返回有关您请求的空间数据的元数据。 它使用它来决定请求空间数据的格式。
如果您从真实的 ArcGIS 要素服务查看这些页面之一,那么您可以看到基本 URL 提供了各种人类可读的信息,例如数据的物理范围和格式(例如 geoJSON、esri JSON) [刚刚被服务调用 JSON]),数据可用。将 '?f=json' 附加到基本 URL 将导致服务以 JSON 格式返回此数据,以便可以通过编程方式读取它。
第二,它会向
<base_url>/query?<...query params...>
提出请求。 它将发出多个此类请求,尤其是当您缩放和平移地图时,因为它仅在需要时请求每个数据块。
如果您想向仅接受此协议的客户端提供 GIS 数据,请执行以下操作:
type
、properties
、geometry
,现在是 id
。 如果没有这个非标准 ID,esri-leaflet 将不会显示数据。 您现在可以执行此操作或让您的服务器添加它。 id 可以是从 0 或 1 开始的简单整数索引。{ 'supportedQueryFormats': 'geoJSON' }
<base_url>/query
返回您的 GIS 数据。如果您想读取客户端发送给您的查询字符串参数并据此调整您的响应,祝您玩得开心。
最后注意:如果您在控制台中收到“无效的 geoJSON”消息,则可能是 esri-leaflet 正在尝试将传入数据转换为 geoJSON。 如果您的 URL 与模式匹配
.*\.arcgis\.com.*FeatureServer
,则 esri-leaflet 将假定传入数据是 geoJSON 并且不会尝试对其进行转换。