【问题标题】:AmCharts - AmMap with custom map shows upside downAmCharts - 带有自定义地图的 AmMap 颠倒显示
【发布时间】:2014-10-07 18:26:38
【问题描述】:

我已按照 AmCharts 上的教程创建自定义地图, 但使用了我们之前系统中的 SVG(英国系统就是一个例子,但我有大约 2000 个自定义 SVG 的定义区域/领土/地区集合)。

虽然地图显示没有问题,但它显示的是颠倒的。

有人可以在不需要重新创建所有 SVG 的情况下帮助翻转它们吗?

你可以在这里看到问题http://jsfiddle.net/aZt8N/830/

AmCharts.ready(function() {
    map = new AmCharts.AmMap();
    map.pathToImages = "http://www.ammap.com/lib/3/images/";
    //map.panEventsEnabled = true; // this line enables pinch-zooming and dragging on touch devices
    map.balloon.color = "#000000";

    var dataProvider = {
        mapVar: AmCharts.maps.UK,
        getAreasFromMap: true
    };

    map.dataProvider = dataProvider;
    map.write("mapdiv");
});

示例 SVG(JSON 格式):

{
    "id": "19",
    "title": "Isle of Man",
    "d": "M-294128.0419983654 6005604.579318236 L-297849.15 6002052.63 L-302960.48 6004919.03 L-307536.97 6003878.02 L-308772.14 6004362.52 L-305875.18 6009275.65 L-304770.50193180586 6012664.048443736 L-302096.82 6020865.08 L-298362.66970319534 6023706.069639378 L-296413.32 6025189.16 L-291628.35136520385 6032625.148624786 L-288841.99 6036955.24 L-283264.74 6040009.53 L-281429.49 6039424.07 L-280324.93 6038202.8 L-280267.3142244041 6037728.901568649 L-278638.37 6024330.59 L-281236.71112765424 6021135.176051484 L-282416.08 6019684.8 L-283956.92 6015313.33 L-287114.60612506856 6012299.189836851 L-288129.6779798481 6011330.2623612285 Z"
                        }

【问题讨论】:

  • amMap 没有反转坐标的方法。我猜您的 SVG 数据实际上是反转的(是否可以看到原始 SVG?)。我还建议将所有数字除以 1000 并将它们四舍五入 - 这样做可以节省很多千字节。
  • @zeroin - 这就是我的猜测,如果你检查我在问题中链接的 jsfiddle 示例,你可以看到实际的 reversed SVG

标签: javascript svg transform amcharts ammap


【解决方案1】:

我在这里实现了这个问题的解决方案:

http://jsfiddle.net/Fresh/rzL509qr/

结果是:

我会首先注意到它不是最优雅的解决方案,因为它涉及到使用 SVG 矩阵变换 AmCharts 已经呈现它的输出。我还在应用程序中引入了 jQuery 以应用代码来执行转换(您可以在以后将其更改为 javascript,我只是为了方便起见使用了 jQuery)。

解决方案涉及转换包含地图的组(即“g”元素),即

<g transform="matrix(1 0 0 -1 0 370)">

这个变换矩阵反映了通过图像中心的水平线的所有信息。 “370”是 SVG 的高度(370 像素)。

我已经应用了这个矩阵变换:

$('svg g:nth-child(8)').attr('transform','matrix(1 0 0 -1 0 370)');

更新

虽然此解决方案正确地反转了坐标,但向上/向下拖动功能已被破坏(doh!)。我不会删除这个答案,因为它可能会有所帮助,希望有人对如何在这种情况下反转鼠标 y 轴有一个聪明的想法!

您可以尝试应用此转换,反转左右箭头,但禁用拖动功能。这应该允许用户在地图上直观地导航,尽管不方便使用鼠标。

【讨论】:

  • 这是向前迈出的一大步,但给我留下了一个我无法解决的新问题。删除功能(如您所建议的)不是我想做的事情。此外,地图正在使用浏览器重新调整大小,这会产生另一个问题。
  • 我完全同意你的看法。我希望我所做的可以解决您的问题,但得到了这个新问题:(希望其他人可能会提出解决方案。阅读更多有关此问题的信息,看来您可能需要翻译坐标。出于兴趣,您在哪里存储这些数据?
  • 您还说地图正在使用浏览器重新调整大小,但在我的机器上重新调整浏览器大小对浏览器的影响与您的 jsfiddle 示例相同。
  • 数据存储在文件中(按国家/地区/地区/等)。
  • @Dementic NetTopologySuite 看起来很有趣。很高兴你找到了一种反转坐标的方法,因为我猜这是一个令人沮丧的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多