我正在努力将谷歌地图集成到一个网络应用程序中,我有一个可能性问题。
我使用 ASP .Net 4.0 作为代码的基础,但我怀疑我将不得不使用 JavaScript 来实现大部分功能,即。基本上我想在我存储在数据库中的 Lat Long 位置的地图上显示一堆标记,然后让用户能够用鼠标在地图上绘制一个框,然后取回四个角的 lat long的盒子。
如果有人知道我怎么能做到这一点,这将对我有很大帮助!
谢谢
我正在努力将谷歌地图集成到一个网络应用程序中,我有一个可能性问题。
我使用 ASP .Net 4.0 作为代码的基础,但我怀疑我将不得不使用 JavaScript 来实现大部分功能,即。基本上我想在我存储在数据库中的 Lat Long 位置的地图上显示一堆标记,然后让用户能够用鼠标在地图上绘制一个框,然后取回四个角的 lat long的盒子。
如果有人知道我怎么能做到这一点,这将对我有很大帮助!
谢谢
多年来,Google Maps API 的复杂性让我感到害怕。最近,我偶然发现了一个名为GMap3的 jQuery 插件,它为您完成了很多繁重的工作。
我建议在初始化和所有这些之后,从你的 .NET 代码中打印一个 Javascript 块,如下所示:
var markersFromDatabase = [
[60.164967,24.94758],
[59.956495, 10.764599]
//etc. This array should be printed from your serverside code
];
var markersToBeAdded = [];
jQuery.each(markersFromDatabase, function(indexOfItem, valueOfItem){
markersToBeAdded.push({
lat:valueOfItem[0],
lng:valueOfItem[1],
options: {
draggable: false,
icon: "img/your_awesome_icon.png",
title: "This is an icon from my database!"
}
});
});
jQuery("#map_canvas").gmap3(
{ action: 'addMarkers',
markers: markersToBeAdded
}
);
编辑:我现在意识到我只回答了你问题的一半。恐怕我对选择框没有明显的答案。我怀疑您可以使用addRectangle,或者在最坏的情况下使用addFixPanel ,它可以让您<div>
在地图画布上添加透明(然后为此触发鼠标事件)。
这是使用 Google Maps API 3 的叠加可编辑功能的一种方法。
如果您的问题是“如何使用矩形选择多个标记”,您可以执行以下操作:
var markers = []; // This array must be filled with your data
var rectangles = [];
var triggeredMarkers = [];
google.maps.event.addListener(drawingManager, 'rectanglecomplete', updateSelection);
function updateSelection(rectangle){
var lat_max = rectangle.getBounds().getNorthEast().lat();
var lat_min = rectangle.getBounds().getSouthWest().lat();
var lng_max = rectangle.getBounds().getNorthEast().lng();
var lng_min = rectangle.getBounds().getSouthWest().lng();
rectangles.push(rectangle);
for(var i=0;i<markers.length;i++){
if((lat_min < markers[i].getPosition().lat() ? (markers[i].getPosition().lat() < lat_max ? true:false):false)
&& (lng_min < markers[i].getPosition().lng() ? (markers[i].getPosition().lng() < lng_max ? true:false):false)){
triggeredMarkers.push(markers[i]);
}
}
}
该rectangles
数组用于保存矩形,以便以后能够擦除它们。
但是,如果您只想要一个处理多边形的简单函数,那么这个函数对您真的很有帮助。它可以这样使用:
var markers = [];
var polygones = [];
var triggeredMarkers = [];
google.maps.event.addListener(drawingManager, 'polygoncomplete', updateSelection);
function updateSelection(polygon){
polygones.push(polygon);
for(var i=0;i<markers.length;i++){
if(google.maps.geometry.poly.containsLocation(markers[i].getPosition(),polygon)){
triggeredMarkers.push(markers[i]);
}
}
}
对于矩形和圆形,有这个答案可以帮助你。