Javascript 单张导入GeoJson

Javascript 单张导入GeoJson,javascript,angular,leaflet,geojson,Javascript,Angular,Leaflet,Geojson,我正在开发一个带有传单的角度应用程序,我必须向许多城市展示我的国家: 为了做到这一点并提高导航效率,我需要将json文件拆分为多个文件,并将它们放在assets文件夹中: 为了在mai中显示层,我以以下方式使用angular HttpClient: this.http.get('assets/shp/Comuni.geojson').subscribe((json: any) => { L.geoJSON(this.json).addTo(map); }); 我的资产文件夹的大小几乎

我正在开发一个带有传单的角度应用程序,我必须向许多城市展示我的国家:

为了做到这一点并提高导航效率,我需要将json文件拆分为多个文件,并将它们放在assets文件夹中:

为了在mai中显示层,我以以下方式使用angular HttpClient:

this.http.get('assets/shp/Comuni.geojson').subscribe((json: any) => {
 L.geoJSON(this.json).addTo(map);
});

我的资产文件夹的大小几乎达到了千兆字节,我需要将这些文件存储在外部存储库中,就像服务器一样。有什么建议吗?处理这种情况的正确方法是什么

您可以将geoJSON文件转换为比geoJSON小得多的topoJSON,这种转换允许您逐步简化数据集

要转换,可以安装topojson

npm安装-g topojson

并将其转换如下

topojson -o topo.json geoJSON.json

这将为您节省大量空间。

我敢打赌您的geoJson文件有问题。也许他们太过分了。 例如,整个世界第二大国家的大小接近400KB。 您可以尝试像服务一样简单地保存您的数据

我需要将这些文件存储在外部存储库中,比如服务器。有什么建议吗

[……]


我知道我的文件太复杂了,但我需要显示更小的文件 城市的一部分,我需要了解这个细节

嗯,有两种方法。它主要与您希望在前端接收的数据类型有关。您想要矢量数据,例如GeoJSON?或者光栅瓷砖,例如WMS

第1种方法-矢量数据

您绝对不能一次存储/加载所有数据。您应该将它们存储在外部服务器上,并通过适当的请求获取更多数据。例如,最初只能在低缩放级别为所有城市加载简化的GeoJSON,当用户选择/平移到某个城市时,从服务器请求更详细的GeoJSON。然而,为多个缩放级别等开发类似金字塔的结构并不容易。所以,你必须考虑这种方法是否适用于你的情况。

2st方法-光栅数据

您可以忘记GeoJSON,开发一个GeoServer。
您将把所有空间数据放在后端,并选择仅在前端使用光栅图块,例如使用WMS。这听起来可能很麻烦,但另一方面,您不必担心过大的geoJSON等。

我尝试使用geo2topo-o topo.json geoJSON.json转换我的所有文件,我已经减小了大小,但我仍然有大约500MB,这对于我的webappI来说是一个很大的挑战。然后,我们可能需要像您提到的那样在服务器中托管。因为500太多了:但我希望topoJSON能帮到你更多。你建议使用什么类型的服务器?我知道我的文件太复杂了,但我需要显示一个城市的较小部分,我需要了解这个细节。第一种方法就是我所做的,但在这一刻,我将文件存储/加载到资产文件夹中,我的webapp变得太大了。我可以使用GeoServer也存储geoJson文件吗?是否有其他服务器可以使用,或者我必须创建一个自制服务器?感谢如果第一种方法对您有效,那么您应该将文件存储在外部服务器中,而不是应用程序资产文件夹中。然后,使用AJAX请求请求必要的文件。使用GeoServer,您可以存储JSON文件或其他空间格式,在您的情况下,最好将其作为光栅分幅进行服务器—请考虑加载OpenStreetMap的方式。