查看传单geojson时失真

Distortion when viewing leaflet geojson

我一直在尝试在浏览器中查看一些带有传单的 gis 文件。当我在 http://lsi.iiit.ac.in:8095/lsiviewer or http://mapshaper.org/ 等其他页面中查看它们时,它们显示正确。但是,当我在传单中查看它们时,文件没有按应有的方式显示 - 它们被扭曲了。

这是 shapefile 档案: https://drive.google.com/drive/folders/0BxYlN9E2saSzSnEwMHVoRGhBYTQ?usp=sharing

这是 "good" 和 "bad" 形状显示方式的 2 个屏幕截图: https://drive.google.com/drive/folders/1eH89girZ7uGEos87SCY-t26IaWdauSc3?usp=sharing

我的代码:

import { Component } from '@angular/core';
import { NavController, NavParams } from 'ionic-angular';
import * as shp from 'shpjs';
import * as L from 'leaflet';

@Component({
  selector: 'page-oportunidaddetalles',
  templateUrl: 'oportunidaddetalles.html',
})
export class OportunidaddetallesPage {

  constructor(public navCtrl: NavController, public navParams: NavParams) {
  }

  ionViewDidLoad() {

    var map = L.map('map', {
        center: [51.505, -0.09],
        zoom: 13
    });


    shp("./assets/my/RETINA").then(function(geojson){
      L.geoJSON(geojson).addTo(map);
   });


    }

}
#map{
    position: relative !important;
    height: 1200px;
    width: 900px;
  }
<!--this is from the ionic page, so it's just a div-->
<div id="map">

</div>

使用像 https://mygeodata.cloud/converter/shp-to-geojson 这样的转换工具检查您的 SHP 文件,它似乎使用 Belge 1972 / Belgian Lambert 72 (EPSG:31370) 坐标系。

您使用的库 Shapefile.js (i.e. npm package "shpjs") 似乎需要 *.dbf 文件中的此投影信息,而您的数据中缺少该信息。

一旦您的 SHP 文件被转换为 WGS 84 (EPSG:4326),它在 Leaflet 中显示良好:

您可以使用上面链接的工具将您的文件直接转换成GeoJSON和WGS 84坐标系,这样您就不再需要Shapefile.js.