我正在使用Google Maps API和jquery-ui-maps(这个问题与正常工作的插件无关)。
我已经创建了一个FusionTablesLayer,包括所有国家,除了莫桑比克。用户可以放置标记并重新定位它。我试图找到一种方法来阻止拖动(或者警告用户,现在不重要),如果他试图在融合表层外面放置标记(即超过融合表层上的边界)。
经过一些研究,我发现了这个方法:containsLocation(point:LatLng, polygon:Polygon),它计算给定点是否在指定的多边形内部。
它应该接收一个多边形,但我却得到了一个FusionTablesLayer。有什么线索可以解决这个问题吗?
下面是我的代码:FIDDLE 尝试放置标记并拖动它...
我已经创建了一个FusionTablesLayer,包括所有国家,除了莫桑比克。用户可以放置标记并重新定位它。我试图找到一种方法来阻止拖动(或者警告用户,现在不重要),如果他试图在融合表层外面放置标记(即超过融合表层上的边界)。
经过一些研究,我发现了这个方法:containsLocation(point:LatLng, polygon:Polygon),它计算给定点是否在指定的多边形内部。
它应该接收一个多边形,但我却得到了一个FusionTablesLayer。有什么线索可以解决这个问题吗?
下面是我的代码:FIDDLE 尝试放置标记并拖动它...
//Initialize the map
var mapa = $('#map_canvas').gmap({'center': '-18.646245,35.815918'});
$('#map_canvas').gmap('option', 'zoom', 7);
//create the layer (all countries except Mozambique)
var world_geometry;
$('#map_canvas').gmap().bind('init', function(event, map) {
world_geometry = new google.maps.FusionTablesLayer({
query: {
select: 'geometry',
from: '1N2LBk4JHwWpOY4d9fobIn27lfnZ5MDy-NoqqRpk',
where: "ISO_2DIGIT NOT EQUAL TO 'MZ'"
},
styles: [{
polygonOptions: {
fillColor: "#333333",
fillOpacity: 0.3
}
}],
map: map,
suppressInfoWindows: true
});
});
$('#map_canvas').gmap().bind('init', function(event, map) {
$(map).click(function(event) {
$('#map_canvas').gmap('clear', 'markers');
$('#map_canvas').gmap('addMarker', {
'position': event.latLng,
'draggable': true,
'bounds': false
}, function(map, marker) {
}).dragend(function(event) {
//I need to check if the marker is over the FusionTablesLayer and block the drag.
//var test = google.maps.geometry.poly.containsLocation(event.latLng, world_geometry);
}).click(function() {
})
});
});
google.visualization.Query
和ST_INTERSECTS
来处理带有geometry
数据的Circle
,但是查询太重了,导致有一点延迟... 你能理解吗? - Quynh Nguyen