- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在开发一个项目,该项目使用 D3.js 根据来自 JSON 文件的地理数据绘制 map 。
现在我有另一个包含位置的 JSON 文件,我想将这些位置绘制为 map 上的点。
我是这样做的:
svg.selectAll('circle')
.data(redCrossLocations.features)
.enter()
.append('circle')
.attr('cx', function(d) {
var x = d.geometry.x
var y = d.geometry.y
return projection([x.toString(), y.toString()])[0]
})
.attr('cy', function(d) {
var x = d.geometry.x
var y = d.geometry.y
return projection([x.toString(), y.toString()])[1]
})
.attr('r', 10)
.attr('text',function(d) {
return d.attributes.DienstSt
})
.style('fill', 'yellow')
但是当我用 Firebug 查看圆圈时,这些圆圈的 cx
和 cy
值非常高,根本不符合 map 坐标。因此,这些点未定位且在 map 上不可见。
这是使用 Firebug 调查 html 时的样子:
<svg id="chart-330a29bc-10a6-422f-b7a4-b79213e63a0f" viewBox="0 0 1700 850">
<g transform="">
<svg width="425" height="425">
<rect width="850" height="850" style="stroke: black; fill: none;">
<path d="M406.7479670817884,199.90340867304621L407.06008919224314,199.57933852526912L407.7100188308723,198.8568991193315L408.1015443102342,198.34893921523326L408.14613950961393,198.29087863446694L408.68509042962614,197.6062181990019L408.79620200385034,197.4452283080136L409.08485295673836,197.0327872268681L409.31646456821454,196.6144688478962L409.62291817269215,195.96797874850017L409.78145919928556,195.49428734522007L409.912011977608,194.9738064907906L409.986809685407,194.39973754590756L410.0058080374765,193.7122278...00837217,205.1538807821671L401.9104729365481,204.65327053784495L402.62461611946765,203.79979531967183L403.17787116003547,203.1799602826395L403.20639083074093,203.1993550356201L403.308689649577,203.08799997778988L403.42697542668066,202.95942665539405L403.5903878256004,202.78322302641755L405.8101836239257,200.80217267343687L405.8688615178462,200.74629337105216L405.89149125655877,200.7271611214237L405.95836191302715,200.66712537209605L406.1133158381808,200.52594198620864L406.3833670058257,200.28190447086672Z" style="fill: red; stroke-width: 1; stroke: black;">
<circle cx="189993884.995462" cy="-29942.633406634715" r="10" text="Salzburg Stadt" style="fill: yellow;">
<circle cx="186702567.5263016" cy="6214.613271863014" r="10" text="Lamprechtshausen" style="fill: yellow;">
<circle cx="191422937.49531066" cy="NaN" r="10" text="Mattsee" style="fill: yellow;">
<circle cx="196518708.70128453" cy="NaN" r="10" text="Straßwalchen" style="fill: yellow;">
希望对大家有所帮助,贴出 map 生成代码:
const svg = d3.select(`#${chartId}`)
svg
.append("svg")
.attr("width", width / 2).attr("height", height / 2)
var center = d3.geo.centroid(salzburg)
var scale = 1;
var offset = [width / 2, height / 2];
var projection =
d3.geo.mercator()
.scale(scale)
.center(center)
.translate(offset);
// create the path
var path = d3.geo.path().projection(projection);
// using the path determine the bounds of the current map and use
// these to determine better values for the scale and translation
var bounds = path.bounds(salzburg);
var hscale = scale * width / (bounds[1][0] - bounds[0][0]);
var vscale = scale * height / (bounds[1][1] - bounds[0][1]);
var scale = (hscale < vscale) ? hscale : vscale;
var offset = [width - (bounds[0][0] + bounds[1][0]) / 2.1,
height - (bounds[0][1] + bounds[1][1]) / 2.4];
projection = d3.geo.mercator().center(center)
.scale(scale).translate(offset);
path = path.projection(projection);
svg.append("rect").attr('width', width).attr('height', height)
.style('stroke', 'black').style('fill', 'none');
svg.selectAll("path").data(salzburg.features).enter().append("path")
.attr("d", path)
.style("fill", "red")
.style("stroke-width", "1")
.style("stroke", "black")
redCrossLocations
看起来像这样:
"features": [{
"attributes": {
"OBJECTID": 1,
"DienstSt": "Salzburg Stadt",
"Art": "Bezirksstelle",
"Ort": "Salzburg",
"Strasse": "Sterneckstraße",
"Hnr": "32",
"Bezirk": "Stadt Salzburg und Flachgau",
"Typ": null
},
"geometry": {
"x": 429395.48199999984,
"y": 296716.59500000067
}
}, {
"attributes": {
"OBJECTID": 2,
"DienstSt": "Lamprechtshausen",
"Art": "Ortsstelle",
"Ort": "Lamprechtshausen",
"Strasse": "Schulstraße",
"Hnr": "1",
"Bezirk": "Stadt Salzburg und Flachgau",
"Typ": null
},
"geometry": {
"x": 421963.38900000043,
"y": 317197.9179999996
}
},
...
有谁知道,为什么我得到这个绝对错误的点坐标?
最佳答案
首先,当搜索从您的 redCrossLocations
获取的详细信息时,它似乎是从这个 source 下载的.检查完整文件会发现您的地理输入数据存在两个问题:
您的 JSON 似乎是 Esri 的 JSON format ,而 D3 期望 GeoJSON 作为其输入。由于您的 JSON 与 GeoJSON 不兼容,因此您必须对其进行转换。
该文件具有 "spatialReference":{"wkid":31258,"latestWkid":31258}
的定义,它指的是投影坐标系 MGI_Austria_GK_M31 (EPSG::31258) 对于 D3,这也不适合使用。为了使其可用于 D3,您需要将其转换为地理坐标系统 WGS 84 (EPSG::4326)。
幸运的是,您可以使用 ogr2ogr在一次运行中完成两种转换的工具:
ogr2ogr -f "GeoJSON" -t_srs "EPSG::4326" "RotesKreuz_Dienststellen.json"
此外,还有一个选项 -s_srs
可用,用于明确指定源坐标系 (-s_srs "EPSG:31258"
),这在您的情况下不需要,因为这将从输入文件派生。
还有一个ogr2ogr web client可以在线进行转换和转换。使用该表单,您可以上传文件并将“目标 SRS”指定为 EPSG:4326
,这将转换坐标系并将其转换为 GeoJSON。
关于javascript - D3.js - 由于投影错误,在 map 上绘制点失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34497878/
我在使用以下代码时遇到问题: function http_file_exists($url){ $f=fopen($url,"r"); if($f){ fclose($f); retu
我已经通过 Git 部署到 Azure 几个月了,没有出现重大问题,但现在我似乎遇到了一个无法克服的错误。 我创建了一个新的 Azure 网站,为正在开发的项目创建单独的预览链接。我在新站点上设置了
我已经通过flutter创建了一个App并完成了它,我想在flutter文档中阅读时进行部署。 我收到此错误: FAILURE: Build failed with an exception. * W
我在Windows 10中使用一些简单的Powershell代码遇到了这个奇怪的问题,我认为这可能是我做错了,但我不是Powershell的天才。 我有这个: $ix = [System.Net.Dn
我正在尝试使用 RapidJSON 解析从服务器接收到的数据。以下是收到的确切字符串: [ { "Node": "9478149a08f9", "Address": "172.17
我尝试为 ios 编译 OpenCV。我总是收到这些错误。我用不同版本的opencv试了一下,结果都是一样的。 我运行这个:python 平台/ios/build_framework.py ios_o
我在一台机器上做基本的发布/订阅,我的客户端是 StackExchange-Redis 的 C# 客户端,我在同一台机器上运行基于 Windows 的 Redis 服务器(服务器版本 2.8.4) 当
我有这段代码,但无法执行,请帮我解决这个问题 连接 connect_error) { die ("connection failed: " . $terhubung->connect_erro
我在 tomcat 上运行并由 maven 编译的 Web 应用程序给出了以下警告和错误。我可以在本地存储库中看到所有 JAR,但有人可以帮忙吗。 WARNING: Failed to scan JA
我正在 Windows 8 上使用 Android Studio 开发一个 android 应用程序,我正在使用一些 native 代码。突然间我无法编译我的 C 文件。当我运行 ndk-build
下面的代码对类和结构的成员进行序列化和反序列化。序列化工作正常,但我在尝试使用 oarch >> BOOST_SERIALIZATION_NVP(outObj); 反序列化时遇到了以下错误; 代码中是
如果我运行此命令“rspec ./spec/requests/api/v1/password_reset_request_spec.rb”,此文件中的所有测试都会通过。 但是,当我运行“rspec”时
我在尝试执行测试以使用 Protractor 上传文件时出错,我的代码是这个 it('it should be possible to upload a file', function() {
System.loadLibrary("nativefaceswap"); 当我运行我的应用程序时,我在 Android Studio 中发现了此类错误。在logcat中显示: java.lang.U
我希望有人能帮助我!使用任何方法或命令行的任何 SSL/HTTPS 调用均无效。 我在 Windows 10 中使用 Ubuntu Server 18.04 作为子系统。我的问题是昨天才开始出现的,因
通过删除这两个值将日期字段从 null=True 和 Blank=True 更改为 required 时,使用 db.alter 命令时遇到问题。 当以下行被注释掉时,迁移运行不会出现问题。
我第一次使用 Heroku 尝试创建应用程序(使用 SendGrid 的 Inbound Parse Webhook"和 Twilio SMS 通过电子邮件发送和接收 SMS 消息)。通过 Virtu
我正在将我的 swift 项目更新到 Xcode 7 上的 Swift 2.0。xcode 在构建项目时报告了以下错误: 命令/Applications/Xcode.app/Contents/Deve
在我的代码中,SSL 库函数 SSL_library_init() 没有按预期返回 1。我如何才能看到它返回了什么错误? 我在 SSL_library_init() 之后调用了 SSL_load_er
我正在尝试运行在以下链接中找到的答案: Asynchronously Load the Contents of a Div 但是当我这样做时,我会遇到我不太理解的错误。 我的代码: $(documen
我是一名优秀的程序员,十分优秀!