我一直在google maps
使用融合表的图层制作脚本。
我正在使用地理编码器并获取我需要的点的坐标。
我使用google.maps.event.addListener(layer, "click", function(e) {});
我想使用与点击图层时调用的功能相同的功能,但这次只需点击一下我得到的坐标。
我试过了google.maps.event.trigger(map, 'click', {latLng: new google.maps.LatLng(42.701487,26.772308)});
以及此处的示例> Google Fusion Table Double Click (dblClick)
我尝试用图层更改地图...
如果我的问题非常愚蠢,我很抱歉,但我尝试了很多选择。
P.S。我看过许多关于从表中获取信息的帖子,但我不需要。我想更改所选行中KML
元素的样式,因此我不会通过查询看到它发生。
以下是我的剧本模型:
function initialize()
{
geocoder = new google.maps.Geocoder();
map = new google.maps.Map(document.getElementById("map_canvas"),myOptions);
layer = new google.maps.FusionTablesLayer({
suppressInfoWindows:true,
map : map,
query : {
select: 'Местоположение',
from: '12ZoroPjIfBR4J-XwM6Rex7LmfhzCDJc9_vyG5SM'
}
});
google.maps.event.addListener(layer, "click", function(e) {
SmeniStilRaionni(layer,e);
marker.setMap(null);
});
}
function SmeniStilRaionni(layer,e)
{
...
}
function showAddress(address)
{
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var point = results[0].geometry.location;
//IMITATE THE CLICK
}
});
}
回应 geocodezip
这样你隐藏了所有其他元素......我不希望如此。就像我想要更改所选元素的边框一样。我不希望有一个新的层。
在我现在使用的函数中,我按下style
options
的{{1}},然后设置选项。我在layer
规则中插入e
,使用google.maps.event.addListener(layer, "click", function(e));
中的e.row['Name'].value
。
我想问一下where
e
变量是否有任何信息
我发现了如何获得我想要的结果:
对于我的查询后,我得到了这一点:
google.maps.event.addListener(layer, "click", function(e));
然后我得到了这些结果:
var queryText ="SELECT 'Районен съд','Окръжен съд','Апелативен съд','Местоположение' FROM "+FusionTableID+" WHERE ST_INTERSECTS(\'Местоположение\', CIRCLE(LATLNG(" + point.toUrlValue(6) + "),0.5));";
queryText = encodeURIComponent(queryText);
document.getElementById("vij query").innerHTML = queryText;
var query = new google.visualization.Query('http://www.google.com/fusiontables/gvizdata?tq=' + queryText);
然后,我使用以下内容:
var rsyd = response.getDataTable().getValue(0,0);
var osyd = response.getDataTable().getValue(0,1);
var apsyd = response.getDataTable().getValue(0,2);
与以下内容相同:
where: "'Районен съд' = '"+rsyd+"'",
点击功能中的。
这是解决我问题的有效方法。
但是,我找不到模仿鼠标点击的方法。
答案 0 :(得分:0)
问题是:当您单击图层时,将通过AJAX请求图层的数据(行)。
理论上,可以通过给定的LatLng选择几何(多边形),几何库有一个方法:google.maps.geometry.poly.containsLocation()。
不幸的是,FusionTableAPI不支持此类查询(ST_CONTAINS
),您无法通过提供LatLng并选择几何包含LatLng的行来选择行。
那么你可以做什么:创建一个包含选择行所需列的表的副本(Община
...不同的值,Местоположение
....几何) 。可以通过AJAX请求此副本,但是当FusionTable不再被修改时,我建议使用硬编码副本。
当您想要模拟点击时该怎么办:
迭代副本的所有行,使用提到的containsLocation()
- 方法检查几何(Местоположение
)是否包含LatLng以及何时使用不同的值来应用查询专栏Община
。
当然,检查所有几何图形需要一些时间,但FusionTable不是很大,在您的情况下应该是一种可能的方法。
以下是演示:http://jsfiddle.net/doktormolle/sSwj3/
存储数据的大小约为500kb,您应该将数据存储在外部脚本中,以便缓存它们。
您可能会注意到,通过链接触发时,所选图层的高亮度会快得多,因为不会通过AJAX请求数据。如果您需要突出显示所选要素,则可以完全忽略对图层点击的观察,并观察地图点击。使用返回的LatLng从数据中检索选定的行并设置样式: