2011-12-26 40 views
7

Tôi đang sử dụng gmap v3. Tôi đang đối mặt với một vấn đề. Vấn đề là tôi đang tạo đánh dấu động và tại thời điểm tương tự, tôi đang tạo ra infowindow của điểm đánh dấu đó. Bây giờ tôi muốn thêm một số nội dung trong bất kỳ infowindow của một điểm đánh dấu. Nhưng không biết làm thế nào tôi có thể nhận được nội dung của một infowindow. Tôi đã lưu trữ các đối tượng đánh dấu của mình trong một mảng và cũng là các đối tượng của infowindow. Nhưng không tìm thấy giải pháp nào.muốn lấy nội dung của thông tin đánh dấu của một điểm đánh dấu?

Tôi muốn nhận nội dung của infowindow trên cơ sở điểm đánh dấu.

EDIT:

var markerArray = new Array(); 
var infoArray = new Array(); 

function placemarker(point,id, contents){ 
var marker = new google.maps.Marker({ 
    icon: image, 
    position: point, 
    map: map, 
    title: name 
}); 

markerArray[id] = marker; 

var infoBubble = new InfoBubble(); 
var content = contents; 
infoBubble.setContent(content); 
google.maps.event.addListener(marker,"mouseover",function(event){ 
    for(var i=0; i < infoArray.length ; i++) 
    infoArray[i].close(); 
    infoBubble.open(map,marker); 
}); 
infoArray.push(infoBubble); 
} 

Chức năng này được gọi là trong vòng một hàm nhiều thời gian để tạo ra điểm đánh dấu trên bản đồ. hiện tại với điều kiện hai điểm đánh dấu có cùng độ dài và tôi muốn hiển thị điểm đánh dấu duy nhất với infowindow của cả hai nội dung của điểm đánh dấu. Tôi có thể tạo một điểm đánh dấu duy nhất nhưng không thể thêm nội dung vào cửa sổ thông tin.

Trả lời

2

Nếu bạn đã giữ tất cả những InfoWindow 's trong infoArray của bạn, tại sao bạn không chỉ đơn giản là lưu trữ chúng với cùng id như bạn làm với các đánh dấu của bạn?

var markers = {}; 
var infoWindows = {}; 

function placemarker(point, id, contents) { 
    var marker = ... 
    ... 
    markers[id] = marker; 

    var infoWindow = ... 
    ... 
    infoWindows[id] = infoWindow; 
} 

(Lưu ý rằng tôi đã thay thế các mảng của bạn với băm.) Bây giờ bạn có thể truy cập InfoWindow (và nội dung của nó qua getContent()) của mỗi điểm đánh dấu giống như cách bạn truy cập vào các điểm đánh dấu riêng của mình.

2

này là khá cũ nhưng figured tôi sẽ cung cấp cho này một shot

Tôi không chắc chắn những gì InfoBubble là ví dụ của tôi, tôi đang sử dụng InfoWindow.

function createMarker(objPoint) 
{ 
    objPoint = new google.maps.LatLng(strLat, strLng); 

    strFromHtml = 'Your HTML'; 

    //creates the window with the options 
    objInfoWindow = new google.maps.InfoWindow(
    { 
     content: strToHtml, 
     maxWidth: 250, 
     zIndex: -1 
    }); 

    var markerOptions = 
    { 
     position: objPoint, 
     map: objMap 
    } 

    objMarker = new google.maps.Marker(markerOptions); 

    //if the marker is clicked open the window 
    google.maps.event.addListener(objMarker, "click", function() 
    { 
     objInfoWindow.open(objMap, objMarker); 
    }); 
} 

Trước tiên tôi tạo cửa sổ, sau đó đánh dấu, sau đó đính kèm trình nghe nhấp chuột cho điểm đánh dấu để hiển thị infowindow trên đó khi điểm đánh dấu được nhấp. Bạn có thể lấy ra các nhấp chuột và chỉ hiển thị nó nhưng với mục đích của tôi, tôi muốn họ phải bấm vào nó.

EDIT

Ok Tôi đã đọc lại câu hỏi của bạn khoảng 50 lần và tôi hy vọng giải pháp này là tốt. Đối với nhiều điểm đánh dấu ở một vị trí, tôi không có câu trả lời cho điều đó. Tôi nghĩ tôi có câu trả lời cho nhiều điểm đánh dấu với thông tin riêng của nó. Nếu điều này không làm việc thì bạn sẽ phải tạo một ví dụ trong jsfiddle hoặc một cái gì đó nếu không tôi không hiểu những gì bạn muốn. Kiểm tra xem nó ra ở đây jsfiddle

Khi tạo thông tinWindow bạn chỉ tạo nó khi giữ nội dung mặc định. Vì vậy, hãy đặt nó trong quá trình khởi tạo bản đồ. Sau đó, khi tạo các điểm đánh dấu, bạn có thể sử dụng điểm đánh dấu để chứa html cho infowindow hiển thị.

var markerOptions = 
{ 
    position: objPoint, 
    map: objMap, 
    html: strHtml//added to make the marker object store the content of the infowindow 
} 

Sau đó, trong người nghe di chuột của bạn, bạn sử dụng this.html để có được nội dung cho infowindow

google.maps.event.addListener(objMarker, "mouseover", function() 
{ 
    objInfoWindow.setContent(this.html); 
    objInfoWindow.open(objMap, this); 
}); 

Đối với nhiều cột mốc trong một chỗ. Tôi sẽ phải nói theo chương trình bạn sẽ phải nắm bắt điều này và chỉ tạo ra một điểm đánh dấu với nội dung của cả hai trong một điểm đánh dấu.

+0

Nhưng nơi bạn đã lấy nội dung của infobubble sau khi tạo. Chỉ cần đọc kỹ câu hỏi. –

+0

@Gaurav Là câu trả lời sau khi chỉnh sửa không hoạt động, có vẻ hợp lý không? – slawekwin

+0

không, câu hỏi của tôi là làm thế nào để có được giá trị nội dung có nghĩa là html của infobubble trước đó. –

1

Tôi không nghĩ rằng có thể tìm kiếm một điểm đánh dấu trong bản đồ google (mà tôi nghĩ là những gì bạn đang cố gắng làm).

Bạn có cần tạo hai điểm đánh dấu khi chúng nằm trên cùng một điểm không? Nếu không, tôi sẽ chỉ theo dõi các infoBubbles trong một mảng trong đó tọa độ điểm là khóa. Vì vậy, trước khi bạn tạo một infoBubble mới, bạn kiểm tra nếu bạn đã có một và nếu đó là trường hợp bạn chỉ cần thay thế nó bằng một infoBubble kết hợp mới.

Đây là bản nháp mã.

if(infoArray[point.lat+'_'+point.lng] != undefined){ 
    tmpBubble = infoArray[point.lat+'_'+point.lng]; 
    infoBubble = createCombinedBubble(tmpBubble, infoBubble); 
} 
infoArray[point.lat+'_'+point.lng] = infoBubble; 
Các vấn đề liên quan