谷歌地图顶部的网格会在正方形中产生间隙
Grid on top of Google maps produces gaps in squares
我有一个在谷歌地图上生成网格的函数。
var map;
var gribBlockSize = 1000;
// LOCATION MELB
var startingLatLng = new google.maps.LatLng(-37.68699757550263,145.06485261920773);
var width = 10;
var height = 10;
function initialize() {
var rectangle;
var myOptions = {
zoom: 10,
center: startingLatLng,
mapTypeControl: false,
navigationControl: false,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
map.set('styles', [
{
"stylers": [
{ "visibility": "simplified" },
{ "saturation": -100 }
]
},{
featureType: 'road',
elementType: 'geometry',
stylers: [
{ color: '#333333' },
{ weight: 5 }
]
}, {
featureType: 'road',
elementType: 'labels',
stylers: [
{ visibility: 'on' }
]
}, {
featureType: 'landscape',
elementType: 'geometry',
stylers: [
{ visibility: 'on' }
]
}, {
featureType: 'poi',
stylers: [
{ visibility: 'off' }
]
}
]);
drawRects();
}
function drawRects () {
var NW = startingLatLng
var NS = google.maps.geometry.spherical.computeOffset(NW,gribBlockSize,90)
var SS = google.maps.geometry.spherical.computeOffset(NW,gribBlockSize,180)
for (var i = 0; i < height; i++) {
NE = google.maps.geometry.spherical.computeOffset(NS,i*gribBlockSize,180)
SW = google.maps.geometry.spherical.computeOffset(SS,i*gribBlockSize,180)
for (var a = 0; a < width; a++)
{
var path = [];
var rectangle = new google.maps.Rectangle();
var rectOptions = {
bounds: new google.maps.LatLngBounds(SW,NE)
};
rectangle.setOptions(rectOptions);
// TESTING TO GET ALL 4 CORNERS
var NECorner = NE;
var SWCorner = SW;
var corner1 = new google.maps.LatLng(NECorner.lat(), NECorner.lng()); // NE
var corner2 = new google.maps.LatLng(SWCorner.lat(), NECorner.lng()); // SE
var corner3 = new google.maps.LatLng(SWCorner.lat(), SWCorner.lng()); // SW
var corner4 = new google.maps.LatLng(NECorner.lat(), SWCorner.lng()); // NW
var polygon = new google.maps.Polygon({
strokeColor: "#FF0000",
strokeOpacity: 0.25,
strokeWeight: 2,
fillColor: "#FF0000",
fillOpacity: 0.1,
map: map,
paths: [corner1, corner2, corner3, corner4]
});
var NE = google.maps.geometry.spherical.computeOffset(NE,gribBlockSize,90);
var SW = google.maps.geometry.spherical.computeOffset(SW,gribBlockSize,90);
}
}
}
现在我遇到的问题是,如果我一直放大,我可以看到正方形之间的间隙。当我制作下一个网格集时,这就成为了一个主要问题,因为原始网格集的右侧与新网格集的左侧重叠。水平线很细,只是垂直线有间隙。
有什么想法可以关闭这些吗?
感谢
你的问题是地球是一个扁球形(圆形),你需要在你的"网格"中考虑到这一点,如果你按距离计算,正方形的顶部需要比底部短。最简单的解决方案(可能对您的用例有效,也可能无效)是使垂直线与经度线平行,预先计算目标纬度(您希望距离正确的纬度)的经度,然后对所有"正方形"使用相同的经度。
概念验证小提琴
代码片段:
var map;
var gribBlockSize = 1000;
var NEmark;
// LOCATION MELB
var startingLatLng = new google.maps.LatLng(-37.68699757550263, 145.06485261920773);
var width = 10;
var height = 10;
function initialize() {
var rectangle;
var myOptions = {
zoom: 10,
center: startingLatLng,
mapTypeControl: false,
navigationControl: false,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
drawRects();
}
function drawRects() {
var bounds;
var NW = startingLatLng;
// define horizontal lines
var longitudes = [];
longitudes.push(NW.lng());
for (var i = 0; i < width; i++) {
var longitude = google.maps.geometry.spherical.computeOffset(NW, gribBlockSize, 90).lng();
longitudes.push(longitude)
NW = new google.maps.LatLng(NW.lat(), longitude);
}
var NW = startingLatLng;
// for each longitude, make a column of squares
for (var i = 0; i < longitudes.length - 1; i++) {
NW = new google.maps.LatLng(startingLatLng.lat(), longitudes[i]);
for (var j = 0; j < height; j++) {
var north = NW.lat();
var south = google.maps.geometry.spherical.computeOffset(NW, gribBlockSize, 180).lat();
var east = longitudes[i + 1];
var west = longitudes[i];
var corner1 = new google.maps.LatLng(north, east); // NE
var corner2 = new google.maps.LatLng(south, east); // SE
var corner3 = new google.maps.LatLng(south, west); // SW
var corner4 = new google.maps.LatLng(north, west); // NW
var polygon = new google.maps.Polygon({
strokeColor: "#FF0000",
strokeOpacity: 0.25,
strokeWeight: 2,
fillColor: "#FF0000",
fillOpacity: 0.1,
map: map,
paths: [corner1, corner2, corner3, corner4]
});
NW = new google.maps.LatLng(google.maps.geometry.spherical.computeOffset(NW, gribBlockSize, 180).lat(), longitudes[i]);
}
}
// map.fitBounds(bounds);
}
google.maps.event.addDomListener(window, "load", initialize);
html,
body,
#map_canvas {
height: 100%;
width: 100%;
margin: 0px;
padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry"></script>
<div id="map_canvas"></div>
相关文章:
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 如何在运行时在HTML5画布中绘制正方形
- webgl在一个正方形上操纵两个纹理
- iScroll不断向上滚动(电话间隙)
- 响应正方形网格中的响应正方形网格
- 电话间隙等待数据库事务完成
- 如何使用RaphaelJS将文本元素约束在正方形中
- Json在应用程序电话间隙!路径是什么
- 当歌曲在html音频标签中回放时,我如何删除间隙
- 点击电话间隙中的事件
- 使用D3.js的SVG圆周围的矩形之间的间隙不是通用的
- 如何删除两个Y轴的高位图表中的间隙
- 使用jquery在正方形中移动文本
- Gmap:如何在地球上绘制正方形(lat,lon)
- javascript中两个正方形之间的碰撞检测
- 将正方形向某一点旋转
- AngularJS:隐藏<td>使用ng-hide/ng-show没有间隙
- 绘制100万个正方形的可点击网格
- 文件传输在电话间隙代码401
- 谷歌地图顶部的网格会在正方形中产生间隙