如何投影传单中的像素坐标?

时间:2013-10-29 08:55:58

标签: javascript leaflet geojson tms

我正在尝试基于16384x16384像素的图像创建地图,但我还想使用此给定图像的像素坐标在特定位置添加标记。

我创建了一个图块层,一个地图元素并设置了最大边界,这样我就无法使用以下代码滚出图像:

    var map = L.map('map', {
        maxZoom: 6,
        minZoom: 2,
        crs: L.CRS.Simple
    }).setView([0, 0], 2);
    var southWest = map.unproject([0,16384], map.getMaxZoom());
    var northEast = map.unproject([16384,0], map.getMaxZoom());
    map.setMaxBounds(new L.LatLngBounds(southWest, northEast));

    L.tileLayer('tiles/{z}/{x}/{y}.png', {
        tms: true
    }).addTo(map);

我想要添加到地图中的点存储在外部文件中作为GeoJSON,它们看起来像http://www.de-egge.de/maps/terranigma/terraPoints.js

我使用以下代码片段加载它们:

var terraPoints = new L.geoJson(points, {
        onEachFeature: function (feature, layer) {
            layer.bindPopup(
                "<b>Ort: </b>" + feature.properties["points[, 1]"] 
            );
        }
    });

    map.addLayer(terraPoints);

但当然,他们没有出现,因为参考系统不匹配。这些点使用像素坐标,但我的地图使用地理坐标。

有没有办法在加载点时“取消项目”?

非常感谢任何帮助,并提前致谢!

2 个答案:

答案 0 :(得分:6)

    var geoJsonTest = new L.geoJson(geojsonFeature, {
    coordsToLatLng: function (newcoords) {
        return (map.unproject([newcoords[1], newcoords[0]], map.getMaxZoom()));
    },
    pointToLayer: function (feature, coords) {      
        return L.circleMarker(coords, geojsonMarkerOptions);
    }
});

如果您还没有弄明白,请使用此方法。看到坐标被反转,我在选项中改变了它们。适合我的工作。

答案 1 :(得分:0)

L.GeoJSONcoordsToLatLng(),它对映射坐标非常有用。

http://leafletjs.com/reference.html#geojson-coordstolatlng