17

मैं माउस पर मार्कर पर एक टूलटिप स्वयं को divs के साथ बनाना चाहता हूं, लेकिन मुझे नहीं पता कि स्क्रीन को स्थिति को सही स्थिति में रखने के लिए स्क्रीन स्थिति कैसे प्राप्त करें, यहां है मेरी कोड:Google मानचित्र v3 मार्कर माउसओवर टूलटिप

google.maps.event.addListener(marker, "mouseover", function() { 
      divover.css("left", marker.get("left")); 
      divover.css("top", marker.get("top")); 
      divover.css("display", "block"); 
}); 

google.maps.event.addListener(marker, "mouseout", function() { 
      divover.css("display", "none"); 
}); 

जाहिर प्राप्त विधि विफल रहता है। कोई उपाय?

उत्तर

15

यह एक मुश्किल है। एपीआई के वी 2 में, आप कर सकते हैं:

map.fromLatLngToContainerPixel(marker.getLatLng(), zoomLevel); 

v3 में, विधि fromLatLngToContainerPixel MapCanvasProjection वस्तु ले जाया गया है। MapCanvasProjection ऑब्जेक्ट प्राप्त करने के लिए, आपको ओवरलेव्यू ऑब्जेक्ट पर getProjection कॉल करने की आवश्यकता है। ऐसा लगता है कि मार्कर क्लास ओवरलेव्यू से बढ़ाया गया है, लेकिन दुर्भाग्यवश इसमें GetProjection विधि नहीं है। मुझे नहीं पता कि क्यों - एक बग दर्ज करने लायक हो सकता है।

तरह से मेरे द्वारा की गई यह मेरे स्वयं के कस्टम मार्कर वर्ग, OverlayView के आधार पर बनाने के द्वारा है, इसलिए यह अभी भी getProjection विधि है:

var point = this.getProjection().fromLatLngToDivPixel(this.latlng_); 

आप custom overlays पर गूगल के ट्यूटोरियल पढ़ने के लिए या उनके example कॉपी कर सकते हैं शुरू करने के लिए

+0

धन्यवाद अपनी पसंदीदा सामग्री :-) करने के लिए स्थिति का उपयोग अंत में, मैंने ऐसा किया, लेकिन कुछ कोड जो मैं कोड की 2 लाइनों पर हल कर सकता था, बेहद जटिल था और मुझे मुझे सीरियल घंटे – Santiago

+2

लेना बहुत आसान होना चाहिए, इसलिए मैंने यह बग सबमिट किया: http://code.google.com/p/gmaps-api-issues/issues/detail? id = 2342 जब (अगर) यह तय किया गया है, 'var point = marker.getProjection() .LatLngToDivPixel (marker.getPosition()); ' काम करना चाहिए। – dave1010

0

another post में एक समाधान मिला:

var point = gmap.getProjection().fromLatLngToPoint(marker.getPosition()) 
+2

यह ऊपरी-बाएं कोने से संबंधित स्क्रीन पिक्सेल नहीं देता है। इसके बजाय यह दुनिया समन्वय देता है। – Hoque

1

मैं मुसीबत नक्शा खींच यहाँ विधि का उपयोग कर या एक डमी overlayview बनाने और इसके प्रक्षेपण उपयोग करने के बाद अद्यतन करने के लिए प्रक्षेपण हो रही हो रही थी। इस समस्या को हल करने के लिए http://qfox.nl/notes/116

/** 
* @param {google.maps.Map} map 
* @param {google.maps.LatLng} latlng 
* @param {int} z 
* @return {google.maps.Point} 
*/ 
var latlngToPoint = function(map, latlng, z){ 
    var normalizedPoint = map.getProjection().fromLatLngToPoint(latlng); // returns x,y normalized to 0~255 
    var scale = Math.pow(2, z); 
    var pixelCoordinate = new google.maps.Point(normalizedPoint.x * scale, normalizedPoint.y * scale); 
    return pixelCoordinate; 
}; 
/** 
* @param {google.maps.Map} map 
* @param {google.maps.Point} point 
* @param {int} z 
* @return {google.maps.LatLng} 
*/ 
var pointToLatlng = function(map, point, z){ 
    var scale = Math.pow(2, z); 
    var normalizedPoint = new google.maps.Point(point.x/scale, point.y/scale); 
    var latlng = map.getProjection().fromPointToLatLng(normalizedPoint); 
    return latlng; 
}; 
+0

बिल्कुल यकीन नहीं क्यों, लेकिन यह समाधान मेरे लिए काम नहीं करता था, निर्देशांक अभी भी बंद थे। हालांकि, मैंने पाया, यह समाधान: http: // a32।मुझे/2012/03/स्थिति-कस्टम-और-फैंसी-ओवरले-संवाद-ऑन-google-maps-v3/- और यह पूरी तरह से काम करता है! – Oliver

4

infowindow डिज़ाइन किया गया है: मैं एक समाधान है कि यहाँ मेरे लिए 100% काम करता है पाया। http://code.google.com/apis/maps/documentation/javascript/overlays.html#InfoWindows

+0

यह अब तक का सबसे व्यावहारिक समाधान है। मेरा मतलब है, अगर आप अपनी खुद की पॉपअप-जानकारी कोड नहीं करना चाहते हैं। –

9

यहाँ एक ट्यूटोरियल मैं सिर्फ कैसे गूगल मैप्स एपीआई V3 के लिए एक टूलटिप बनाने के लिए पर बनाया के लिए लिंक है: http://medelbou.wordpress.com/2012/02/03/creating-a-tooltip-for-google-maps-javascript-api-v3/ कार्रवाई में यह देखने के लिए, यहाँ जाना http://medelbou.com/demos/google-maps-tooltip/

+2

स्टैक ओवरफ़्लो में आपका स्वागत है! हालांकि यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, [यह बेहतर होगा] (http://meta.stackexchange.com/q/8259) यहां उत्तर के आवश्यक हिस्सों को शामिल करने के लिए, और संदर्भ के लिए लिंक प्रदान करें। – oers

+1

यह जोड़ना आसान था और अच्छी तरह से मार्करक्लस्टररप्लस काम करता है। – johntrepreneur

3

किसी तरह, अन्य जवाब में से कोई भी मेरे लिए काम किया या मैं उन्हें लागू नहीं करना चाहता था (उदाहरण के लिए creating your own custom Marker class)।

कुछ और खोज के बाद मैं this solution पाया, हालांकि, कि करता बिल्कुल क्या आवश्यक है:

function latlngToPoint(map, latLng) { 
    var topRight = map.getProjection().fromLatLngToPoint(map.getBounds().getNorthEast()); 
    var bottomLeft = map.getProjection().fromLatLngToPoint(map.getBounds().getSouthWest()); 
    var scale = Math.pow(2, map.getZoom()); 
    var worldPoint = map.getProjection().fromLatLngToPoint(latLng); 
    var point = new google.maps.Point((worldPoint.x - bottomLeft.x) * scale, (worldPoint.y - topRight.y) * scale); 
    return point; 
} 

तो बस var position = latlngToPoint(map, marker.getPosition()); फोन और

+0

ओह। जल्द ही बात की। यह कुछ मामलों में काम करता है, न कि दूसरों में। भिन्नता से परेशान थोड़े। – elrobis

+0

@ एलोबिस: क्या आप कह रहे हैं कि आपको मेरे उत्तर में कोड के साथ समस्या हो रही है? क्या आपको अपने ब्राउज़र के जावास्क्रिप्ट कंसोल में कोई त्रुटि है? टूटा व्यवहार क्या है? – Oliver

+0

आह हे आदमी। इसे बाद में काम नहीं मिला लेकिन मैं पहले ही इस पेज को बंद कर दूंगा। मैंने 'x' और' y' दोनों स्थितियों के लिए '.x' मान असाइन करने की तरह कुछ बेवकूफ किया। और चूंकि मेरे पास एक बिंदु पर केंद्रित एक परीक्षण मानचित्र था (इसलिए 'x' और 'y' लगभग समान थे), ऐसा लगता है कि यह काम कर रहा था, लेकिन इसके आसपास के बिंदु निराशाजनक व्यवहार करते थे। तो सबसे पहले यह काम करना प्रतीत होता था - मैंने जो टिप्पणी हटा दी - तब मैंने दूसरे बिंदुओं की जांच की और सोचा कि मैंने बहुत जल्द बात की थी। फिर बाद में जब मैं पागल हो रहा था, मुझे एहसास हुआ कि मैं मूल्यों में से एक का पुन: उपयोग करूँगा। :: हेड स्लैप :: smh ..:/ – elrobis

संबंधित मुद्दे