将 kml 多边形转换为 svg 路径

2024-01-31

我有一个带有地标的 KML 文件,每个地标都有多边形坐标。我想根据我从 json 文件读取的值动态更改多边形的填充颜色。我的理解是谷歌缓存了kml文件,所以你不能轻易地动态改变多边形的填充颜色。

所以我试图将我的 kml 多边形转换为 svg 路径,以便我可以使用 Raphael 将我的多边形放置在我的 Google 地图上。然后我可以用 javascript 更改填充颜色。

但是如何将多边形坐标转换为 svg 路径,有人知道吗?

一组样本坐标为:

 <Polygon><outerBoundaryIs><LinearRing><coordinates>-80.098181,40.42127 -80.096479,40.421262 -80.096464,40.421409 -80.096448,40.421551 -80.096444,40.421583 -80.096434,40.421666 -80.096406,40.421931 -80.096389,40.422087 -80.096353,40.422423 -80.09583,40.426101 -80.095525,40.428234 -80.095315,40.429714 -80.095276,40.429989 -80.092585,40.428593 -80.092273,40.428431 -80.09069,40.430519 -80.090384,40.430924 -80.08989,40.430618 -80.089699,40.4305 -80.089499,40.430359 -80.088738,40.429886 -80.088418,40.429688 -80.088254,40.429585 -80.087931,40.429384 -80.087086,40.428859 -80.086867,40.428722 -80.086658,40.428592 -80.086493,40.42849 -80.08617,40.428282 -80.086177,40.428265 -80.08621,40.428188 -80.0864,40.427742 -80.086397,40.42749 -80.086394,40.427125 -80.08631,40.426427 -80.086335,40.425887 -80.086235,40.425409 -80.085776,40.425327 -80.085442,40.42527 -80.084993,40.424585 -80.085076,40.42448 -80.085542,40.423842 -80.085679,40.423125 -80.085659,40.423011 -80.085626,40.422827 -80.085191,40.421758 -80.08467,40.420859 -80.084258,40.420336 -80.083828,40.4201 -80.083078,40.420005 -80.082504,40.420072 -80.081444,40.420196 -80.080888,40.420181 -80.080775,40.420178 -80.080604,40.420173 -80.080122,40.420161 -80.079753,40.420151 -80.07947,40.420144 -80.079287,40.420139 -80.078239,40.420296 -80.077661,40.420418 -80.076213,40.420726 -80.075673,40.420766 -80.075298,40.420719 -80.075127,40.420625 -80.074909,40.420307 -80.075028,40.419779 -80.07539,40.419028 -80.07583,40.41836 -80.076065,40.418108 -80.076528,40.417616 -80.077217,40.417124 -80.077503,40.417002 -80.077725,40.416907 -80.078391,40.416622 -80.078614,40.416528 -80.078657,40.41651 -80.078693,40.416491 -80.078755,40.416457 -80.079174,40.416233 -80.079205,40.416217 -80.079292,40.416128 -80.079439,40.415977 -80.079456,40.41596 -80.079614,40.415473 -80.079604,40.415377 -80.079584,40.415179 -80.07958,40.415168 -80.079539,40.415042 -80.079499,40.414915 -80.079407,40.414785 -80.079742,40.414965 -80.08086,40.415568 -80.081458,40.415889 -80.081535,40.41593 -80.082292,40.416343 -80.08238,40.416392 -80.082597,40.41651 -80.082624,40.416525 -80.082787,40.416614 -80.083508,40.417007 -80.083934,40.417239 -80.084422,40.417505 -80.084622,40.417432 -80.084852,40.417348 -80.085329,40.417179 -80.085419,40.417141 -80.085948,40.41695 -80.086252,40.417184 -80.088463,40.418885 -80.088964,40.418631 -80.089036,40.418595 -80.089145,40.418539 -80.089173,40.418525 -80.089346,40.418438 -80.089376,40.418457 -80.089398,40.418471 -80.089964,40.418827 -80.090299,40.419055 -80.091306,40.419739 -80.091642,40.419967 -80.091803,40.420088 -80.091966,40.420043 -80.092445,40.419915 -80.092561,40.419885 -80.096792,40.418748 -80.098853,40.41815 -80.098868,40.418242 -80.09943,40.421273 -80.098181,40.42127</coordinates></LinearRing></outerBoundaryIs></Polygon>

免责声明:我对大地测量学有点生疏,但我认为你的第一个问题是坐标系 - lat、lng 是依赖于投影的数据点,而你的屏幕是平面像素点。您需要做的就是首先将它们转换为北距点和东距点。

有一个投影转换库叫做proj.4- 用它来转换你的坐标。如果需要,它有一个 javascript 端口,您可以轻松地适应您的使用:https://trac.osgeo.org/proj/ https://trac.osgeo.org/proj/

通用转换过程如下(LAT、LNG 是实际坐标。)

var source = new Proj4js.Proj('WGS84');
var dest = new Proj4js.Proj('GOOGLE');
var p = new Proj4js.Point( LATITUDE, LONGITUDE ); // replace with actual coords!
var pdest = Proj4js.transform(source, dest, p);

此时,pdest.x 和 pdest.y 将包含您的 SVG 兼容坐标。

将坐标转换为像素单位后,只需绘制它们 - 并注意范围和单位。北向和东向坐标将在 800,000 范围内,因此您可能会应用一些转换,例如平移和缩放。

最终结果应该如下所示(生锈了,我可能搞砸了并翻转了纬度/经度等)

这是一个工作jsfiddle带有转换和绘图:http://jsfiddle.net/LPzKV/1/ http://jsfiddle.net/LPzKV/1/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 kml 多边形转换为 svg 路径 的相关文章

  • 将 D3 svg 保存为高质量图像

    有没有办法将 D3 SVG 图像保存为高质量图像 如果是的话请解释一下 截至目前 我正在使用以下代码将 svg 保存为图像 但我得到的图像质量不高 var canvas1 document createElement canvas canv
  • D3 数据对象内的循环数组

    data name c1 id 4690 day 1 3 start 8 00 end 10 00 name c3 id 5283 day 3 4 start 8 00 end 17 00 name c4 id 4862 day 4 sta
  • d3 转换改变了哪些属性?

    我试图了解 d3 中到底发生了什么转换 例如 var bars svg selectAll null data my values enter append rect statement before transition attr x 1
  • 如何在 CSS 中用 SVG 图标替换 Web 字体(Font Awesome)?

    我注意到在我的 CSS 文件中 有一些使用 Font Awesome Web 字体的规则 如下所示 ul fancy li before category page ul li before display none font style
  • d3.forcesimulation() 链接距离

    我在堆栈上查看了不同的链接距离 似乎为了改变链接距离 您需要实现一个函数 然后传递它来动态分配链接距离 如下所示 function linkDistance d return d distance 然后我认为我可以传递给 svg 但返回函数
  • 按位置获取元素?

    我正在研究 SVG 脚本 有 getElementById 或 getElementsByTagName 但我找不到任何方法来按位置获取元素 比如获取位置为x 10 y 10的元素 有什么办法可以实现这个目标吗 var yourElemen
  • 每 x 秒对 SVG 元素进行动画处理

    介绍 我了解一些基本的动画技术SVG两者同时使用Javascript和 DOM
  • 使用 d3 在两个节点之间绘制多条边

    我一直在关注 Mike Bostock 的代码这个例子 http bl ocks org 1153292学习如何在 d3 中绘制有向图 并且想知道如何构建代码 以便可以在图中的两个节点之间添加多个边 例如 如果上例中的数据集定义为 var
  • 哪个 SVG/SMIL DOM 元素具有“beginElement”方法?

    最终 这是针对将在 Firefox 中运行的 Kiosk 风格的应用程序 使用 jQuery 1 6 4 因此答案可能是特定于 Firefox 的 我正在尝试制作动画 SVG 但我正在尝试通过动态插入 SMIL 来为其设置动画 我没有看到任
  • 如何在 Firefox 中缩放 SVG 背景图像而不考虑宽高比?

    我有一个CSSbackground image设置在具有流体高度和宽度的元素上 它是一个 SVG 预期的行为是让它向任何必要的方向拉伸以覆盖整个元素的区域 在 Chrome Safari 甚至是糟糕的 Internet Explorer 9
  • 在 SVG 中绘制 DOM 对象时如何在 Canvas 中使用 Google 字体?

    根据 Mozilla 的文档 您可以在 Canvas 上绘制复杂的 HTML 例如this https developer mozilla org en US docs Web API Canvas API Drawing DOM obje
  • 使用 CSS 更改悬停时的 SVG 链接对象填充

    我的页面上有一个 SVG 对象链接 a href target blank gmail a 我正在尝试使用 SVG 文件中的以下代码更改悬停时的填充颜色 问题是 悬停效果仅在我删除
  • 使用 D3.js 解析时间序列数据

    是时候寻求帮助了 我已经学习 D3 js 几个星期了 我才开始觉得我理解了其中的 10 哈哈哈 我正在尝试生成一个非常简单的线图 只要数据非常简单 我就可以做到这一点 但我的原始数据源具有 UTC 时间戳和实数 小数 这会导致任何超出简单范
  • 更改svg中半圆的背景颜色

    我想在此 svg 代码上创建上弦月和第三弦月
  • Qt 支持在 QIcon 中为 SVG 着色

    看来 Qt 不支持 SVG 中路径标签上的描边 填充选项
  • 仅当现有填充颜色为特定值时才填充 SVG

    我正在使用此代码来更改 SVG 对象的填充颜色 它可以工作 function g mouseenter function path rect circle this attr fill 00C8C8 但是 我只想在现有填充颜色具有特定值时更
  • 无法在 Firefox 中显示我的 svg 图像?

    我无法在 Firefox 中显示我的 svn image 它在 Safari 和 Chrome 中工作正常 没有 IE 所以还没有测试过 它在我的html中是这样实现的 img 类 logo1 src images logo6 svg 其中
  • SVG 捕获鼠标坐标

    我知道之前已经有人问过有关 svg 鼠标坐标的问题 但我对我当前遇到的行为感到非常困惑 而且似乎没有一个线程能够解决它 我用于捕获坐标的方法 var pt svg createSVGPoint Created once for docume
  • SVG 中三角形的圆角

    我正在尝试制作一个具有圆角的三角形 三角形将如下所示 左下角是唯一看起来相当容易制作的角 主要是因为这是一个 90 度的 转弯 该转弯是使用QSVG 中的命令具有以下参数 Q x y height x y height RADIUS从我正在
  • 414 请求 URI 太大错误 Google 地图 v3

    当我调用构造函数来创建具有超过 15 个不同 KMZ 文件的新 KmlLayer 时 似乎会发生此错误 构造函数的调用是 var layer new google maps KmlLayer http 我每次都可以使用 15 个不同的 KM

随机推荐

  • 将复合 java 对象转换为 CSV

    我有一个对象 例如 Response java 如下所示 class Response private User user has firstName lastName age etc private Address address has
  • 警告(不合时宜):将 void(*)(int) 分配给 extern "C" void(*)(int)

    我在使用 Sun 的 C 编译器时遇到问题 我读过甲骨文的使用函数指针 来自 C http www oracle com technetwork articles servers storage dev mixingcandcplusplu
  • TFS - 从本地工作副本创建分支

    我正在尝试从已签出项目的本地工作区创建一个分支 基本背景 我从项目的 主干 中签出并进行了很多更改 我现在想将这些更改签入新分支 我从源代码管理中创建了一个新分支 但我的工作区仍然映射到主干 我按照我在这里找到的一篇文章中的步骤进行操作 从
  • 如何根据给定的视频 url 从 Youtube API 获取 Youtube 视频 ID?

    我有一个页面 用户可以在其中粘贴 Youtube 视频网址 然后我需要提取视频的 ID 才能获取视频的缩略图 困难的部分是找到一种从视频 URL 中提取视频 ID 的可靠方法 这里有很多正则表达式解决方案 但对我来说 这些都不是 100 可
  • 如何正确声明 Font 变量? [复制]

    这个问题在这里已经有答案了 我有一个简单的问题 谁能告诉我这行有什么问题 Font printFont gcnew System Drawing Font Arial 10 我的编译器说 标识符 printFont 无法识别 我还包含命名空
  • 在 Windows 上获取鼠标光标位置和按钮状态

    在 Windows Windows 7 及更高版本 上获取鼠标光标位置或按钮状态的最合适方法是什么 我以前使用过 DirectInput 但我不再使用它并且不想使用它 我看到有 GetCursorPos 但是 我没有看到任何用于获取鼠标按钮
  • NetworkX 中的图排列和旋转

    l 与 Networkx 合作生成某种类型的图表 现在我想排列节点并旋转图形 80 90 120 度 我怎样才能申请排列 and rotation在带有 NetworkX 的图表上 Edit 1 给定图的邻接矩阵 我希望以保留边和顶点链接的
  • 如何从模型中获取 Zend\Db\Adapter 实例? (ZF2)

    我正在创建用于管理数据库实体的抽象模型 我已经有了EntityAbstract EntitySetAbstract and a ManagerAbstract楷模 在我的 ManagerAbstract 模型中 我需要一个Zend Db A
  • 显示键盘后离开应用程序时出现快照错误(需要 afterScreenUpdates:YES)

    我目前正在启动一个新的测试项目 用于通过单独的 模式 视图导入客户端证书 该应用程序始终以 主视图 视图开始 主视图 https i stack imgur com xtFsC png 我有一些虚拟元素来测试连接是否有效 一旦用户将文件添加
  • 如何正确授权对 Google Cloud Storage API 的请求?

    我正在尝试使用 Google Cloud Storage JSON API 通过 http 调用从存储桶中检索文件 我从与存储桶相同的项目中的 GCE 容器中进行卷曲 并且服务帐户具有对该存储桶的读取访问权限 以下是请求的模式 https
  • java.lang.NoSuchMethodError:没有为 HttpClientResponse 执行虚拟方法

    当我在启动后尝试运行该应用程序时 它在 logcat 中显示异常 如下所示 java lang NoSuchMethodError No virtual method execute Lorg apache http client meth
  • 显示和隐藏 Windows 10 屏幕键盘 (osk.exe) 时遇到问题

    我一直在尝试获取屏幕键盘 osk exe 在 Windows 10 上从我的应用程序中出现 和消失 我的应用程序在 Windows 7 中运行良好 ShellExecute on osk exe会在那里显示键盘 但尝试在 Windows 1
  • 确定字符串是否是有效的地理位置

    我有一堆 位置 有些是准确的 哈博罗内 博茨瓦纳 有些是地理编码 40 75 73 997 有些是完全无用的 siliconcape 我需要找到一种方法来运行列表并确定每个字符串和地理编码的城市和国家 地区 并为无效位置返回空值 是否有某种
  • RequireJS:多个 main.js?

    我一直在使用 requireJS 构建一个单页应用程序 到目前为止我很喜欢它 我已经到了在主应用程序之外开发网站其他部分的阶段 但我不太确定如何 或是否 为此使用 requireJS 在我的主应用程序中 一切都是由这个脚本标签触发的
  • python 字典理解如何与内部的 lambda 函数一起工作

    我的目标是使用以下方法聚合 pandas DataFrameGroupBy 对象agg https pandas pydata org pandas docs stable reference api pandas core groupby
  • 组合器可以处理多个映射器的结果吗?

    如果在同一个节点上执行多个映射器 combiner 会合并多个映射器的结果吗 我在文档或书籍中找不到这个问题的答案 我可以找到的组合器示例似乎都产生了影响 即使它只能聚合来自一个映射器的结果 来自雅虎的Hadoop教程 http devel
  • 实体框架 DataContext 问题 - 它是否在我的控制器中得到正确处理?

    我已经收到了一些代码 并且在控制器类中有一个属性保存初始化的数据库上下文 public class MyController Controller protected AssetManagerContext db new AssetMana
  • 传播不可迭代实例的无效尝试

    将不胜感激这里的任何帮助 我有这段代码 每当表单字段收到更改时都会尝试更新我的状态 这在以前版本的 React 中工作得很好 但升级到最新版本后 我收到错误 传播不可迭代实例的尝试无效 我知道我需要使我的国家正常化 我计划这样做 然而 这将
  • ubuntu下gcc 4.5安装问题

    我尝试在 ubuntu 10 04 上安装 gcc 4 5 但失败了 这是一个编译错误 我不知道如何解决 有没有人在ubuntu上成功安装最新的gcc 以下是我的步骤和错误信息 我想知道问题出在哪里 第一步 下载这些文件 gcc core
  • 将 kml 多边形转换为 svg 路径

    我有一个带有地标的 KML 文件 每个地标都有多边形坐标 我想根据我从 json 文件读取的值动态更改多边形的填充颜色 我的理解是谷歌缓存了kml文件 所以你不能轻易地动态改变多边形的填充颜色 所以我试图将我的 kml 多边形转换为 svg