Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将地图上的对象与不可见栅格对齐?_Javascript - Fatal编程技术网

Javascript 如何将地图上的对象与不可见栅格对齐?

Javascript 如何将地图上的对象与不可见栅格对齐?,javascript,Javascript,我正在谷歌地图上工作,我使用覆盖图作为富文本标记的替代品。感谢您,我可以在里面使用HTML和CSS、背景图像,通过将lat和lng转换为CSS在地图上的左上角,仍然可以定位我的“标记”(自定义覆盖)。我是怎么做到的?我只需创建一个新对象,然后重写draw方法 foo.prototype=new google.maps.overlyview() 及 到目前为止一切正常 关键是我想学习如何才能达到以下效果 你看到标记是如何对齐的吗?类似于点(标记)的网格。这种效果非常棒,而且是可以实现的。那么基本

我正在谷歌地图上工作,我使用覆盖图作为富文本标记的替代品。感谢您,我可以在里面使用HTML和CSS、背景图像,通过将lat和lng转换为CSS在地图上的左上角,仍然可以定位我的“标记”(自定义覆盖)。我是怎么做到的?我只需创建一个新对象,然后重写
draw
方法

foo.prototype=new google.maps.overlyview()

到目前为止一切正常

关键是我想学习如何才能达到以下效果

你看到标记是如何对齐的吗?类似于点(标记)的网格。这种效果非常棒,而且是可以实现的。那么基本上这是怎么可能的呢?我只知道每个点的精确纬度和经度。我想到的第一件事是将lat&lng四舍五入到小数点后更少的位置,但过了一秒钟,我意识到这不是一个好方法。我也没有在文档中找到任何东西,因为这可能不是标准效果

总而言之:

问题:有一堆具有精确纬度和经度的覆盖/标记,我如何将标记与不可见网格之类的东西对齐?
任何暗示都会非常非常有用。谢谢。

您可以执行以下操作:

  • 确定贴图的宽度(以像素为单位)
  • 确定网格在此地图上应有多少个平铺
  • 将地图的宽度除以平铺的数量
  • 保持这个号码
  • 将最大经度除以相同数量的瓷砖(第2点)
  • 将尚未放置的经度除以结果
  • 将结果乘以你之前持有的数字

当然,对latitude也要这样做,这都是关于分割从latlngtodivpixel()函数中获得的像素值。试试这个,玩
pixelLimit
变量

var pixelLimit = 10;
var point = this.getProjection().fromLatLngToDivPixel(this.latlng);
var xPos = point.x - (point.x % pixelLimit) + "px";
var yPos = point.y - (point.y % pixelLimit) + "px";
div.style.left = xPos;
div.style.top = yPos;

我会用二维单元格数组来做一个网格构造器,单元格会有一个静态的大小,比如6px*6px或者你想要的任何东西,它会在一个循环中生成,然后在缩放事件中,当把最近的标记传递到每个网格的中心时,重新计算所有的网格
var pixelLimit = 10;
var point = this.getProjection().fromLatLngToDivPixel(this.latlng);
var xPos = point.x - (point.x % pixelLimit) + "px";
var yPos = point.y - (point.y % pixelLimit) + "px";
div.style.left = xPos;
div.style.top = yPos;