在地图D3 JavaScript中绘制点
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在地图D3 JavaScript中绘制点,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2660字,纯文字阅读大概需要4分钟。
内容图文
![在地图D3 JavaScript中绘制点](/upload/InfoBanner/zyjiaocheng/691/8acda8f2941647ee9e81ffcf0b448e02.jpg)
我想在我使用图像的地图上,基于名为tree.csv的csv文件中的经度和纬度绘制地图.
我的csv文件包含很多行,因此我将在此处放几行
经纬度
37.7295482207565 122.392689419827
37.8030467266869 122.425063628702
……
这是我的代码
d3.csv("/trees.csv", function(data) {
dataset=data.map(function(d) { return [+d["Longitude"],+d["Latitude"] ];});
console.log(data)
var width = 750,
height = width;
// Set up projection that map is using
var projection = d3.geo.mercator()
.center([-122.433701, 37.767683])
.scale(225000)
.translate([width / 2, height / 2]);
var path=d3.geo.path().projection(projection);
var svgContainer=d3.select("body").append("svg")
.attr("width",width)
.attr("height",height);
svgContainer.append("image")
.attr("width", width)
.attr("height", height)
.attr("xlink:href", "/Ilu.svg");
var trees=svgContainer.selectAll("circles")
.data(data).enter()
.append("circles")
var treesAttributes=trees
.attr("cx",function(d) { return projection(d["Longitude"])[0];})
.attr("cy",function(d) { return projection(d["Latitude"])[1];})
.attr("r","100px")
.style("fill","red");
我可以看到地图,但是看不到地图上的任何点.当我检查网络时.我看到cx是Nan数,而cy是相同的数.我想也许我的数组还没有读过.但是我不确定这些问题.我被困住了.你们能解决我的问题吗?谢谢
解决方法:
您的问题在于您没有提供要投影的坐标.
d3 geoProjection采用经度纬度对并将其投影到x,y svg坐标(投影返回的坐标为:[x,y],这就是为什么在代码中使用此形式的原因:projection(coord)[0]以获取cx值).您正在尝试仅投影经度,然后投影纬度:
.attr("cx",function(d) { return projection(d["Longitude"])[0];})
.attr("cy",function(d) { return projection(d["Latitude"])[1];})
在这种情况下,投影不会返回svg坐标,因为您没有为投影提供地理坐标.您需要同时投影经度和纬度,因为投影中产生的x和y值通常(并非总是)是相互依赖的-例如,在任何圆锥形投影中,输出y(或x)值都取决于纬度和经度.此外,随着projection()返回[x,y],每个投影都需要经度和纬度.
而是尝试:
.attr("cx",function(d) { return projection([d["Longitude"],d["Latitude"]])[0];})
.attr("cy",function(d) { return projection([d["Longitude"],d["Latitude"]])[1];})
请记住,d3地理投影应采用以下形式:projection([longitude,latitude]),更改经度和纬度的顺序将产生意外的结果.
var data = [
{longitude:1,latitude:1},
{longitude:-1,latitude:1},
{longitude:1,latitude:-1},
{longitude:-1,latitude:-1}
]
var svg = d3.select("body")
.append("svg")
.attr("width",200)
.attr("height",200);
var projection = d3.geoMercator()
.translate([100,100]);
var circles = svg.selectAll("circle")
.data(data)
.enter()
.append("circle")
.attr("cx",function(d) { return projection([d.longitude,d.latitude])[0];
})
.attr("cy",function(d) { return projection([d["longitude"],d["latitude"]])[1];
})
.attr("r",2)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.10.0/d3.min.js"></script>
内容总结
以上是互联网集市为您收集整理的在地图D3 JavaScript中绘制点全部内容,希望文章能够帮你解决在地图D3 JavaScript中绘制点所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。