仅在 Google 地图上投影 SVG 的一部分

发布于 2024-08-06 00:37:14 字数 663 浏览 5 评论 0原文

我有 SVG 文件,我想将其

  1. 导出并用作具有平面欧几里德投影的自定义地面叠加层(econym.org.uk/gmap/example_custommapflat.htm)。
  2. 仅使用多边形并将它们投影到 Google 地图上

我的 SVG 文件有一些共同的规则:

  1. 它们都是 4096x4096px
  2. 地图的主要对象居中

我已经做了一些实验,其中之一可以在此处看到 - - http://dev.ondigital.eu/map/map.php* (从 URL 中删除 map.php 以查看 svg、png 和其他文件)。正如您所看到的,问题在于,多边形点被投影在左侧而不是居中+纵横比绝对不正确。

所以问题是:如何计算长宽比,当:

  1. svg 的 viewBox 属性存在
  2. svg 的 viewBox 属性不存在和/或每个多边形必须进行转换(就像我们的 map.svg 中一样)。

那么偏移(对象中心)又如何呢?

先感谢您!

*未使用 IE 进行测试

I have SVG files, which I'd like to:

  1. export and use as custom ground overlay with flat Euclidean projection (econym.org.uk/gmap/example_custommapflat.htm).
  2. take only polygons and project them on Google Map

My SVG files have some rules in common:

  1. they all are 4096x4096px
  2. main objects of the map are centered

I have done some experiments, one of which could be seen here -- http://dev.ondigital.eu/map/map.php* (remove map.php from the URL to see svg, png and other files). As you can see, the problem is, that polygons points are being projected on the left side instead of being centered + the aspect ratio is absolutely incorrect.

So the question is: How to calculate the aspect ratio, when:

  1. svg's viewBox attribute is present
  2. svg's viewBox attribute is not present and/or each polygon has to be transformed (like in our map.svg).

And what about the offset (object centration)?

Thank you in advance!

*Not tested with IE

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

森林散布 2024-08-13 00:37:14

您是否可能将 DivPixels 与 ContainerPixels 混淆了?

尝试更改

   var latlng  = self.projection.fromPixelToLatLng(
       new GPoint(point[0], point[1]),
       self.map.getZoom()
   );

   var latlng  = self.map.fromContainerPixelToLatLng(
      new GPoint(parseFloat(point[0]), parseFloat(point[1]))
   );

在这种情况下,使用字符串而不是数字的事实可能不会导致任何问题,但是现在使用数字是一个好主意,并避免 + 运算符执行字符串连接而不是加法的可能性稍后在您的项目中使用您的坐标。

Is it possible that you're confusing DivPixels with ContainerPixels?

Try changing

   var latlng  = self.projection.fromPixelToLatLng(
       new GPoint(point[0], point[1]),
       self.map.getZoom()
   );

to

   var latlng  = self.map.fromContainerPixelToLatLng(
      new GPoint(parseFloat(point[0]), parseFloat(point[1]))
   );

In this case, the fact that you use Strings rather than Numbers probably isn't causing any problems, yet, but it's a good idea to use Numbers now, and avoid the possibility of the + operator doing String concatenation instead of addition on your coordinates later in your project.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文