Проблема в том, что ваши данные спроецированы - Leaflet ожидает, что ваши данные не будут спроецированы (состоят из пар долгая / широта или «спроецированы» в WGS84 / EPSG 4326). Есть несколько решений, здесь на ум приходят два:
В QGIS экспортируйте данные, чтобы они состояли из пар координат долгая / широта.
Используйте proj4.js для перепроецирования ваших координат при отображении geojson.
Для номера два вам нужно будет установить опцию coordsToLatLng при добавлении geojson в качестве слоя:
var geojson = L.geoJSON(states, {
coordsToLatLng: function (p) {
// return get lat/lng point here.
})
Тело этой функции примет координату в системе координат (CRS) geojson и вернет ее в WGS84 с помощью proj4.
Кроме того, функция coordsToLatLng ожидает, что вы вернете пары широта / долгота. Поскольку ваши geojson и proj4 представляют данные [x, y], нам нужно поменять местами наши значения перед возвратом новой точки.
Это могло выглядеть так:
var geojson = L.geoJSON(states, {
coordsToLatLng: function (p) {
p = proj4(fromProjection,toProjection,p); // reproject each point
p = [p[1],p[0]] // swap the values
return p; // return the lat/lng pair
}
}).addTo(map);
Конечно, нам нужно определить наши CRS. Я просмотрел вашу CRS (она указана в самом geojson) на spacereference.org и использовал предоставленное описание для этого CRS и EPSG4326 (WGS84), чтобы установить мои fromProjection и toPojection:
var fromProjection = '+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs ';
var toProjection = "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs ";
В целом это дает нам что-то вроде этого. Имейте в виду, что если у вас есть большие файлы, перепроецирование их в javascript займет больше времени, чем при их экспорте в надлежащую CRS.
person
Andrew Reid
schedule
02.12.2017