将数据(d3)投影到传单地图时遇到问题

时间:2019-03-01 09:05:23

标签: javascript d3.js leaflet

我正在一个项目中尝试将数据库中的数据可视化到传单地图上。数据包含长/纬距的coodrinates,但是当我尝试将其绘制到地图上时,位置全错或根本没有显示。

我读到纬度/经度坐标与传单地图上使用的坐标不同,因此我尝试翻译它们但没有运气。

日期数据库具有以下结构(.csv文件):

datetime,city,state,country,shape,durationSeconds,durationHours,comments,date_posted,latitude,longitude
10/10/1949 20:30,san marcos,tx,us,cylinder,2700,45 minutes,"This event took place in early fall around 1949-50. It occurred after a Boy Scout meeting in the Baptist Church. The Baptist Church sit",4/27/2004,29.8830556,-97.9411111
10/10/1949 21:00,lackland afb,tx,,light,7200,1-2 hrs,"1949 Lackland AFB&#44 TX.  Lights racing across the sky & making 90 degree turns on a dime.",12/16/2005,29.38421,-98.581082

,到目前为止的代码如下:

 var map = L.map('mapid').setView([10, 15], 2.2);   L.tileLayer('https://api.mapbox.com/styles/v1/josecoto/civ8gwgk3000a2ipdgnsscnai/'
        +'tiles/256/{z}/{x}/{y}?access_token=pk.eyJ1Ijoiam9zZWNvdG8iLCJhIjoiY2l2OGZxZWNuMDAxODJ6cGdhcGFuN2IyaCJ9.7szLs0lc_2EjX6g21HI_Kg', {
        maxZoom: 18,
        id: 'mapbox.streets',
        accessToken: 'your.mapbox.access.token'
    }).addTo(map);

    var w = $("#mapid").width();
    var h = $("#mapid").height();     

    var projection = d3.geoMercator()
        .scale(w / 2 / Math.PI)
        .translate([w / 2, h / 2])

    function latLong(x,y)
    {      
        //console.log(x + ' and ' + y);
        var point = map.latLngToLayerPoint(new L.LatLng(y, x));
        return point;
    }  

    var svg_map = d3.select(map.getPanes().overlayPane)
            .append("svg")
            .attr("width", w)
            .attr("height", h);

    svg_map.selectAll("circle")
        .data(data)
        .enter()
        .append("circle")
        .attr("cx", function(d) {
            var coords = projection([d.longitude, d.latitude]);
            return coords[0];
            //var coords = latLong(d.longitude, d.latitude);
            //return coords.x;    
            })
        .attr("cy", function(d) {
            var coords = projection([d.longitude, d.latitude]);
            return coords[1];
            //var coords = latLong(d.longitude, d.latitude);
            //return coords.y;        
            })
        .attr("r", function(d) {
            return 2;
         })

当我使用geoMercator()函数时,我可以看到地图上显示的点,但是它们被错误地投影到了地图上(因为它们从函数中弯曲了)。而且,当我尝试使用latLong()函数时,它们根本没有显示(但调试器中没有错误)。

我可以补充一点,就是我从数据库中正确获取了值,但是问题出在可视化上。你们能发现什么吗?

提前谢谢!

编辑:这是我使用geoMercator时的外观图像:

Map

0 个答案:

没有答案