2013-10-29 15 views
5

我想根據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); 

但當然,他們不發怎麼樣,因爲參考系統不匹配。點使用像素座標,但我的地圖使用地理座標。

有沒有辦法在加載它們時「解除」點?

任何幫助非常感謝和提前感謝!

回答

5
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); 
    } 
}); 

這是你的情況下,如何使用你沒弄明白呢。看到座標是倒置的,我在選項中改變了它們。適合我的完美作品。

+0

它的工作原理,謝謝。我只需要指定'geojsonMarkerOptions' – DeEgge

0

L.GeoJSONcoordsToLatLng()這對映射座標應該很有用。

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

+0

感謝您的反饋,但我對如何使用該方法感到困惑。如果我循環遍歷每個座標,我仍然不能添加任何標記。或者我必須使用onEachFeature調用該方法嗎? (for terraPoints){latLng = coordsToLatLng(i.geometry.coordinates); L.marker(的latLng).addTo(地圖); }' – DeEgge

相關問題