gpt4 book ai didi

javascript - 将 csv 加载到传单中并使用 proj4 转换坐标

转载 作者:行者123 更新时间:2023-11-30 20:44:22 25 4
gpt4 key购买 nike

本题涉及使用:

  • leaflet.js(用于创建我的 map )
  • leaflet 杂食插件(用于加载我的 csv 数据文件)
  • 和 proj4(用于将东距/北距转换为纬度/经度)

我下面的代码加载了带有传单的雄蕊图,然后使用 omnivore 加载了我的 csv 文件。

为了在我的 map 上显示 csv 地理数据,我需要先将东/北坐标转换为纬度/经度。接下来的代码部分包含执行此操作的逻辑,它成功地用于底部 console.log 中的单个坐标示例。

但我不知道如何在我的完整 csv 文件中使用此逻辑。文件中有一列用于东向,一列用于北向 - 最终我希望我的代码将所有这些转换为经纬度,并将它们绘制为我的 map 上的点。

var map = L.map('map').setView([51.44, -1.01], 8);

L.tileLayer('https://stamen-tiles-{s}.a.ssl.fastly.net/toner-background/{z}/{x}/{y}.{ext}',
{
subdomains: 'abcd',
minZoom: 8,
maxZoom: 20,
ext: 'png'
}).addTo(map);

var dataset = omnivore.csv('assets_cwy_new simple.csv');

var osgb = '+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +units=m +no_defs ';
var wgs84 = '+proj=longlat +datum=WGS84 +no_defs ';

console.log(proj4(osgb,wgs84,[514545.49,215008.4]));

最佳答案

如您所知,您可以使用 Proj4Leaflet插件 Proj4js将您的东坐标/北坐标转换为 WGS84 lng/lat。不要忘记将 Leaflet 的坐标恢复为纬度/经度。

现在有leaflet-omnivore使用 CSV 文件中的正确列,您必须使用 parser_options (调用 omnivore.csv 的第二个参数),实际上传递给底层库 csv2geojson .这些options让您指定 CSV 文件的纬度和经度字段。现在你只有东/北,但我们可以稍后转换它们:

var csv2geojsonOptions = {
latfield: 'northing',
lonfield: 'easting',
delimiter: ','
}

omnivore.csv('./assets_cwy_new_simple.csv', csv2geojsonOptions);

接下来,您需要使用 proj4leaflet 将东距/北距坐标转换为 WGS84 经纬度坐标。要让 omnivore 在你的每一行上执行此转换,你必须使用 customLayer (调用 omnivore.csv 的第三个参数)。它实际上只是一个预配置的 Leaflet GeoJSON Layer Group .对于这个组,您可以使用它的 coordsToLatLng使用 proj4leaflet 实现转换的选项:

var customLayer = L.geoJSON(null, {
coordsToLatLng: projCoordsToLatLng
});

function projCoordsToLatLng(coords) {
return lngLatToLatLng(proj4(osgb, wgs84, coords));
}

function lngLatToLatLng(lngLat) {
return [lngLat[1], lngLat[0]];
}

omnivore.csv('./assets_cwy_new_simple.csv', csv2geojsonOptions, customLayer);

实例:https://plnkr.co/edit/Dj9Mukig8PAHUYinsapJ?p=preview

关于javascript - 将 csv 加载到传单中并使用 proj4 转换坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48890144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com