D3地图上如何标注坐标点

部署运行你感兴趣的模型镜像

原文地址 http://blog.youkuaiyun.com/lzhlzz/article/details/46385299,部分引用,重点关注坐标点的投影转换方法。

1. 标注是什么

标注,是指地图上只需要一个坐标即可表示的元素。例如,在经纬度(116, 39)处画一个圆,在(108, 30)处画一个符号,这些都属于标注,也可以将标注理解为“点元素”。

我们知道,只知道经纬度是不能直接在地图上作图的,需要先用投影函数将其转换成像素坐标。例如,如果要在中国地图上标出“北京”的位置,但是不知道北京的像素坐标。北京的经纬度可通过查询得知是(116.3, 39.9),将此值作为投影函数的参数即可得到像素坐标。其实,GeoJSON文件的地理信息也是经纬度,也是经过投影函数转换后得到了像素坐标。因此,如果使用同一个投影函数,那么转换后的北京坐标即可直接在地图上绘制。

2. 在D3的地图上如何标注

首先,定义一个投影函数如下。

  1. var projection = d3.geo.mercator()  
  2.             .center([107, 31])  
  3.             .scale(600)  
  4.             .translate([width/2, height/2]);  

其次,使用此投影定义地理路径生成器 d3.geo.path,用于绘制地图。

[javascript]  view plain copy
  1. var path = d3.geo.path()  
  2.                 .projection(projection);  

然后,以北京的经纬度作为投影的参数,得到北京的像素坐标。

[javascript]  view plain copy
  1. var peking = [116.3, 39.9];  
  2. var proPeking = projection(peking);  

最后,用上面得到的像素坐标绘制一个圆,该圆就正好位于北京的位置。

[javascript]  view plain copy
  1. svg.append("circle")  
  2.     .attr("class","point")  
  3.     .attr("cx",proPeking[0])  
  4.     .attr("cy",proPeking[1])  
  5.     .attr("r",8);  


您可能感兴趣的与本文相关的镜像

Qwen-Image

Qwen-Image

图片生成
Qwen

Qwen-Image是阿里云通义千问团队于2025年8月发布的亿参数图像生成基础模型,其最大亮点是强大的复杂文本渲染和精确图像编辑能力,能够生成包含多行、段落级中英文文本的高保真图像

### 如何在地图上显示经纬度点 为了实现在地图上的经纬度点可视化,通常会采用多种技术栈和方法来完成这一目标。下面介绍几种常见的实现方式。 #### 使用百度地图API显示经纬度点 通过调用百度地图JavaScript API,可以在网页中轻松嵌入带有标注地图。创建一个简单的HTML页面并引入必要的库文件之后,可以通过如下代码片段设置中心位置以及添加标记: ```javascript // 创建Map实例 var map = new BMap.Map("container"); // 替换为容器ID map.centerAndZoom(new BMap.Point(116.404, 39.915), 11); // 设置中心点坐标及缩放级别 // 添加标记 function addMarker(point){ var marker = new BMap.Marker(point); map.addOverlay(marker); } addMarker(new BMap.Point(116.404, 39.915)); // 示例:北京天安门广场的位置 ``` 此段代码展示了如何初始化一张以指定经度纬度为中心的地图,并向其中加入一个新的标记[^1]。 #### 利用OpenLayers进行地理数据可视化 另一种流行的选择是使用OpenLayers库来进行更复杂的GIS应用开发。它支持丰富的功能特性,适用于需要高级定制的应用场景。以下是基于OpenLayers的一个简单例子,用于展示单个地理位置: ```javascript import 'ol/ol.css'; import { Map, View } from 'ol'; import TileLayer from 'ol/layer/Tile'; import VectorSource from 'ol/source/Vector'; import VectorLayer from 'ol/layer/Vector'; import Feature from 'ol/Feature'; import Point from 'ol/geom/Point'; import OSM from 'ol/source/OSM'; const vectorSource = new VectorSource({ features: [ new Feature({ geometry: new Point([0, 0]), }), ], }); new Map({ target: 'map', layers: [ new TileLayer({ source: new OSM(), }), new VectorLayer({ source: vectorSource, }), ], view: new View({ center: [0, 0], zoom: 2, }), }); ``` 这段代码构建了一个包含底图层(来自开放街道地图服务)和矢量覆盖物的新地图对象,在这里我们放置了一组预定义好的特征点作为示例[^3]。 #### 结合D3.js增强视觉效果 当涉及到更加精细的数据呈现需求时,可以考虑集成像D3这样的强大工具包。例如,如果想要根据具体数值动态调整颜色深浅,则可通过配置相应的色彩比例尺达到理想的效果。这不仅限于静态图像渲染;还可以配合动画过渡等手段进一步提升用户体验质量[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值