如何将UTM Ghana meter Grid的坐标转换为Latitude Longitude,反之亦然从传单js
how convert coordinates from UTM Ghana meter Grid to Latitude Longitude and vice versa from leaflet js
我正在处理传单 Js,我希望用户输入 X、Y 形式的坐标。即 Ghana meter Grid,我需要将 X、Y 转换为纬度和经度,以便它们可以作为标记绘制在传单 Js 上。
您可以使用这个在线转换器:http://epsg.io/?q=Ghana
使用 API 参数,当用户通过您的应用输入要转换的坐标时,您可以执行 GET 请求。
由于您正在使用 Javascript,我建议使用 proj4js (the Javascript implementation of OSGeo's proj 来解决这个问题,这是在坐标参考系统之间转换坐标的行业标准)。
首先,抓取一个 release of proj4js, or use a CDN-hosted release,例如:
<script src='https://unpkg.com/proj4@2.6.2/dist/proj4.js'></script>
Proj4js 没有提供 CRS(坐标参考系统)的完整定义列表,因此您必须定义要使用的 CRS。在你的情况下,它将是 EPSG:25000 AKA "Ghana Metre Grid" and EPSG:4326 又名“Equirectangular WGS84”又名“纬度-经度”:
proj4.defs("EPSG:4326","+proj=longlat +datum=WGS84 +no_defs");
proj4.defs("EPSG:25000","+proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.51 +y_0=0 +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +units=m +no_defs");
您可以在 PROJ 发布的数据文件或 epsg.io.
等网站中找到 CRS 的 PROJ 定义
定义 CRS 后,调用 proj4js 并使用它们的名称和要转换的坐标,例如从 EPSG:4326 转换为 EPSG:25000...
console.log( proj4("EPSG:4326", "EPSG:25000", [-0.187, 5.6037]) );
...或从 EPSG:25000 到 EPSG:4326...
console.log( proj4("EPSG:25000", "EPSG:4326", [364346.57, 103339.95]) );
看到一个working example here。
注意坐标顺序(lat-lon vs lon-lat,或 x-y 与 y-x)。 Leaflet 使用 lat-lng,但 proj 使用 x-y 和 lng-lat,所以你必须翻转坐标,例如
var accraLngLat = proj4("EPSG:25000", "EPSG:4326", [364346.57, 103339.95]);
L.marker([accraLngLat[1], accraLngLat[0]]).addTo(map);
或
var accraLngLat = proj4("EPSG:25000", "EPSG:4326", [364346.57, 103339.95]);
var accraLatLng = L.GeoJSON.coordsToLatLng(accraLngLat);
L.marker(accraLatLng).addTo(map);
看到一个working example here。
另请注意,proj4js 会完成所有重投影工作,并且不涉及 API 调用。
由于您专门使用 Leaflet,因此您可能也对 proj4leaflet 感兴趣,尽管您可能不需要它。如果您想使用 Leaflet 在不同的投影中显示栅格数据(或地图图块),这将很有用。
我正在处理传单 Js,我希望用户输入 X、Y 形式的坐标。即 Ghana meter Grid,我需要将 X、Y 转换为纬度和经度,以便它们可以作为标记绘制在传单 Js 上。
您可以使用这个在线转换器:http://epsg.io/?q=Ghana
使用 API 参数,当用户通过您的应用输入要转换的坐标时,您可以执行 GET 请求。
由于您正在使用 Javascript,我建议使用 proj4js (the Javascript implementation of OSGeo's proj 来解决这个问题,这是在坐标参考系统之间转换坐标的行业标准)。
首先,抓取一个 release of proj4js, or use a CDN-hosted release,例如:
<script src='https://unpkg.com/proj4@2.6.2/dist/proj4.js'></script>
Proj4js 没有提供 CRS(坐标参考系统)的完整定义列表,因此您必须定义要使用的 CRS。在你的情况下,它将是 EPSG:25000 AKA "Ghana Metre Grid" and EPSG:4326 又名“Equirectangular WGS84”又名“纬度-经度”:
proj4.defs("EPSG:4326","+proj=longlat +datum=WGS84 +no_defs");
proj4.defs("EPSG:25000","+proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.51 +y_0=0 +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +units=m +no_defs");
您可以在 PROJ 发布的数据文件或 epsg.io.
等网站中找到 CRS 的 PROJ 定义定义 CRS 后,调用 proj4js 并使用它们的名称和要转换的坐标,例如从 EPSG:4326 转换为 EPSG:25000...
console.log( proj4("EPSG:4326", "EPSG:25000", [-0.187, 5.6037]) );
...或从 EPSG:25000 到 EPSG:4326...
console.log( proj4("EPSG:25000", "EPSG:4326", [364346.57, 103339.95]) );
看到一个working example here。
注意坐标顺序(lat-lon vs lon-lat,或 x-y 与 y-x)。 Leaflet 使用 lat-lng,但 proj 使用 x-y 和 lng-lat,所以你必须翻转坐标,例如
var accraLngLat = proj4("EPSG:25000", "EPSG:4326", [364346.57, 103339.95]);
L.marker([accraLngLat[1], accraLngLat[0]]).addTo(map);
或
var accraLngLat = proj4("EPSG:25000", "EPSG:4326", [364346.57, 103339.95]);
var accraLatLng = L.GeoJSON.coordsToLatLng(accraLngLat);
L.marker(accraLatLng).addTo(map);
看到一个working example here。
另请注意,proj4js 会完成所有重投影工作,并且不涉及 API 调用。
由于您专门使用 Leaflet,因此您可能也对 proj4leaflet 感兴趣,尽管您可能不需要它。如果您想使用 Leaflet 在不同的投影中显示栅格数据(或地图图块),这将很有用。