使用 GPolygon 绘制多边形而不使用 GMap

发布于 2024-09-24 11:19:52 字数 339 浏览 3 评论 0原文

有人知道如何在没有地图的情况下在其他元素内使用 Google 地图中的 GPolygon 绘制多边形吗?或者有人知道任何框架可以实现与 GPolygon 相同的功能吗?

我想要这个“绘制自定义元素上的多边形”,例如 div:

<div id="MyArea"></div>

Anyone know how I can draw Polygons with GPolygon from Google Map without having a map, inside other elements? Or anyone know any framework to do it with the same features like GPolygon?

I would like to have this "draw polygon" on a custom element, like div:

<div id="MyArea"></div>

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

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

发布评论

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

评论(2

雨后咖啡店 2024-10-01 11:19:52

查看 Raphael,这是一个 JavaScript 库,它封装了 IE 中的 VML 和符合标准的浏览器中的 SVG。它相当容易使用,并且记录得很好

当然, path 元素(用于绘制多边形和折线)使用 SVG 路径字符串语法 这有点神秘,但很容易理解。您当然可以扩展 Raphael 以使用更简单的语法:

Raphael.fn.polygon = function () { // supply x,y coordinates as arguments
    var self = this.path();
    self.coords = [];
    for (var i=0;i<arguments.length;i++) self.coords.push(arguments[i]);

    self.update = function () {
        var pathlist = [];
        // the M command moves the cursor:
        pathlist.push('M'+self.coords[0]+' '+self.coords[1]);
        // the L command draws a line:
        pathlist.push('L');
        // Now push the remaining coordinates:
        for (var i=2;i<self.coords.length;i++) {
            pathlist.push(self.coords[i]);
        }
        // the Z command closes the path:
        pathlist.push('Z');
        self.attr('path',pathlist.join(' '));
    }
    self.update();
    return self;
}

这应该允许您执行以下操作:

<div id="MyArea"></div>
<script>
    var paper = Raphael("MyArea",640,480);
    var mypolygon = paper.polygon(
      10, 10,
      20, 20,
      10, 30
    );

    // you can even modify it after creation:
    mypolygon.coords.push(15,20);
    mypolygon.update();
</script>

或者创建您自己的多边形 API 来品尝(如果您不喜欢我的)。

编辑:修复了一些小错误。

Check out Raphael, a javascript library that wraps around VML in IE and SVG in standards compliant browsers. It's fairly easy to use and quite well documented.

Granted, the path element (used to draw polygon and polylines) uses the SVG path string syntax which is a bit cryptic but quite easy to understand. You can of course extend Raphael to use a more simple syntax:

Raphael.fn.polygon = function () { // supply x,y coordinates as arguments
    var self = this.path();
    self.coords = [];
    for (var i=0;i<arguments.length;i++) self.coords.push(arguments[i]);

    self.update = function () {
        var pathlist = [];
        // the M command moves the cursor:
        pathlist.push('M'+self.coords[0]+' '+self.coords[1]);
        // the L command draws a line:
        pathlist.push('L');
        // Now push the remaining coordinates:
        for (var i=2;i<self.coords.length;i++) {
            pathlist.push(self.coords[i]);
        }
        // the Z command closes the path:
        pathlist.push('Z');
        self.attr('path',pathlist.join(' '));
    }
    self.update();
    return self;
}

Which should allow you to do:

<div id="MyArea"></div>
<script>
    var paper = Raphael("MyArea",640,480);
    var mypolygon = paper.polygon(
      10, 10,
      20, 20,
      10, 30
    );

    // you can even modify it after creation:
    mypolygon.coords.push(15,20);
    mypolygon.update();
</script>

Or create your own polygon API to taste if you don't like mine.

EDIT: fixed some small bugs.

执手闯天涯 2024-10-01 11:19:52

我同意 slebetman 的观点,认为拉斐尔非常伟大。但请注意,Android 浏览器目前不支持 SVG 和 VML。如果您也针对 Android,则使用 excanvas.js 的 Canvas 可能是跨浏览器工作的更好选择。

另外,如果您确实想使用 Google Map API,只需隐藏地图即可。但由于使用条款的原因,您仍然会被 Google 徽标所困扰。

您可以通过在 v2 中使用单色图块来做到这一点,但我相信在 v3 中还有其他方法可以做到这一点。

v2 方法示例: http://fisherwebdev.com/california

隐藏部分地图功能的示例v3:http://fisherwebdev.com/mapcolors - 您可以使用相同的技术来隐藏所有功能。

尝试一下,看看 v3 中可以隐藏/显示或重新设置样式:http://gmaps-samples-v3.googlecode.com/svn/trunk/styledmaps/wizard/index.html

I agree with slebetman that Raphael is totally great. Note, however, that neither SVG nor VML is currently supported in the Android browser. Canvas with excanvas.js may be a better bet for cross-browser work, if you are also targeting Android.

Also, if you really want to use the Google Map API, you can simply hide the map. But you would still be stuck with the Google logo due to the Terms of Use.

You can do this by using a tile with a single color in v2, but I believe there are other ways do this in v3.

Example of the v2 method: http://fisherwebdev.com/california

Example of hiding some of the map features in v3: http://fisherwebdev.com/mapcolors -- You can use this same technique to hide all features.

Play around with this to see what is possible to hide/show or restyle in v3: http://gmaps-samples-v3.googlecode.com/svn/trunk/styledmaps/wizard/index.html

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