Zum Inhalt springen

rg_googlemap pin-position

Erstellt am 17. November 2008 · 3 Antworten · letzte Antwort am 19. November 2008

Tags: Frage

McGregor ·

Hallo!

Ich bin ja restlos begeistert von der rg_googlemap. Super Sache.
Doch auch hier hackt es mal wieder ...
Den Pin für die Adresse bezieht die Ext aus der Kategorie, der ich die Adressen zuordne.
Soweit so gut. Mein "Pin" hat jedoch die Nadel in der Mitte unten. Die Ext geht aber scheinbar von oben links aus. Wie kann ich nun meinen Pin relativ in der Karte verschieben, dass die Nadel des Pins über dem eigentlichen Ort liegt (quasi einen Offset angeben)

Danke
McGregor

Mopps ·

hast du mal in res/gm.js oder gm2.js geschaut. Vielleicht kannst du da was anpassen.

Ansonsten nimmt die extension glaub den Mittelpunkt deines Icons und setzt diesen Mittelpunkt auf die exakte Position. Du könntest also auch als Alternative dein Icon dementsprechend anpassen.
(du musst der extension noch die veränderten Masse mitteilen)

McGregor ·

Hi!

Danke für den Anstoß.

Zuerst habe ich die Extension um 2 Eingabefelder bei der Kategorie erweitert:
tca.php:

		"left_offset" => Array (		
			"exclude" => 1,		
			"label" => "Left offset",		
			"config" => Array (
				"type" => "input",	
				"size" => "5",
				"eval" => "int",
				'range' => array('lower' => 0,'upper' => 100),
			)
		),

		"top_offset" => Array (		
			"exclude" => 1,		
			"label" => "Top offset",		
			"config" => Array (
				"type" => "input",	
				"size" => "5",
				"eval" => "int",
				'range' => array('lower' => 0,'upper' => 100),
			)
		),


[.......]

    "types" => Array (
        "0" => Array("showitem" => "hidden;;1;;1-1-1, title, descr, parent_uid, image;;2,tabprefix")
    ),
    "palettes" => Array (
        "1" => Array("showitem" => ""),
				"2" => Array("showitem" => "left_offset,top_offset")
    )

Nicht vergessen die Datenbank-Spalten einzufügen (INT DEFAULT 0)

Danach habe ich die class.tx_rggooglemap_pi1.php geändert:

  function xmlFunc($content,$conf) {
/********** vorher ***************/
      // category image
      $table = 'tx_rggooglemap_cat';
      $field = 'uid,';
      $where = 'deleted = 0 AND hidden=0 ';
      $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($field,$table,$where,$groupBy='',$orderBy,$limit='');
      while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
        if ($row['image']=='') {
          // get image of parent category
          $whereTemp = 'deleted = 0 AND hidden=0 AND uid = '.$row['parent_uid'];
          $res2 = $GLOBALS['TYPO3_DB']->exec_SELECTquery($field,$table,$whereTemp);
          $row2 = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res2);
          $catImg[$row['uid']] = $row2['image'];
        } else {
          $catImg[$row['uid']] = $row['image'];
        }
      }


/********** nachher ***************/
      // category image
      $table = 'tx_rggooglemap_cat';
      $field = '*';
      $where = 'deleted = 0 AND hidden=0 ';
      $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($field,$table,$where,$groupBy='',$orderBy,$limit='');
      while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
        if ($row['image']=='') {
          // get image of parent category
          $whereTemp = 'deleted = 0 AND hidden=0 AND uid = '.$row['parent_uid'];
          $res2 = $GLOBALS['TYPO3_DB']->exec_SELECTquery($field,$table,$whereTemp);
          $row2 = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res2);
          $catImg[$row['uid']] = $row2['image'];
					$leftOffset[$row['uid']] = $row2['left_offset'];
					$topOffset[$row['uid']] = $row2['top_offset'];
        } else {
          $catImg[$row['uid']] = $row['image'];
					$leftOffset[$row['uid']] = $row['left_offset'];
					$topOffset[$row['uid']] = $row['top_offset'];
        }
      }
/*******************************************/


/********** vorher ***************/
          $catDivider = strpos($row['rggmcat'],',');
          if ($catDivider == false) {
            if (!$catImg[$row['rggmcat']]) {
              if (!file_exists('uploads/tx_rggooglemap/dot.png')) {
                copy($this->conf['defaultPOIIcon'],'uploads/tx_rggooglemap/dot.png');
              }
              $catImg[$row['rggmcat']] = 'dot.png';
            
            }          
          	$img = $catImg[$row['rggmcat']];
          	#
          } else {
            $firstCat = substr($row['rggmcat'],0,$catDivider);
            $img = $catImg[$firstCat];
          }
          
          $test = '';
  
        
  #          $conf['recursive'] = 2;


          $this->addRecord($table, $row,$conf, $img,$test);
/********** nachher ***************/
          $catDivider = strpos($row['rggmcat'],',');
          if ($catDivider == false) {
            if (!$catImg[$row['rggmcat']]) {
              if (!file_exists('uploads/tx_rggooglemap/dot.png')) {
                copy($this->conf['defaultPOIIcon'],'uploads/tx_rggooglemap/dot.png');
              }
              $catImg[$row['rggmcat']] = 'dot.png';
            
            }          
          	$img = $catImg[$row['rggmcat']];
						$leftOff = $leftOffset[$row['rggmcat']];
						$topOff = $topOffset[$row['rggmcat']];
          	#
          } else {
            $firstCat = substr($row['rggmcat'],0,$catDivider);
            $img = $catImg[$firstCat];
						$leftOff = $leftOffset[$firstCat];
						$topOff = $topOffset[$firstCat];
          }
          $test = '';
  
        
  #          $conf['recursive'] = 2;
					// Bildgröße ermitteln
					unset($info);
					$info = getimagesize('uploads/tx_rggooglemap/'.$img);
					$row['image_width'] = $info[0];
					$row['image_height'] = $info[1];

					$row['left_offset'] = $leftOff;
					$row['top_offset'] = $topOff;

          $this->addRecord($table, $row,$conf, $img,$test);
/*******************************************/


-----------------------------------------------------

  function addRecord($table, $row,$conf, $img,$test) {  
/* Zeile 1659 geändert in */
  $this->lines[]=$this->Icode.'<marker image_height="'.$row['image_height'].'" image_width="'.$row['image_width'].'" top_offset="'.$row['top_offset'].'" left_offset="'.$row['left_offset'].'" cat="'.$row['rggmcat'].'"  uid="'.$row["uid"].'" lng="'.$row['lng'].'" lat="'.$row['lat'].'"  img="'.$img.'" table="'.$row['table'].'" test="'.$test.'" >';

Dann habe ich die gm.js angepasst, indem ich folgende Zeile einfach entfernt habe:

var baseIcon = new GIcon();
//baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
baseIcon.iconSize = new GSize(16, 16);
//baseIcon.shadowSize = new GSize(37, 34);
//baseIcon.iconAnchor = new GPoint(5, 8-);
baseIcon.iconAnchor = new GPoint(8, 8-);
baseIcon.infoWindowAnchor = new GPoint(32, 32);
baseIcon.infoShadowAnchor = new GPoint(80, 25);
baseIcon.transparent = "http://www.google.com/mapfiles/markerTransparent.png";

Dann nochmals in der class.tx_rggooglemap_pi1.php folgende Änderungen:

function getXMLData(clearOverlay) {
/********** vorher ************/

      for (var i = 0; i < markers.length; i++) {
        // obtain the attribues of each marker
        var lat = parseFloat(markers[i].getAttribute("lat"));
        var lng = parseFloat(markers[i].getAttribute("lng"));
        var point = new GLatLng(lat,lng);
        var title = [GXml.value(markers[i].getElementsByTagName("t")[0]) ];
        var id = parseFloat(markers[i].getAttribute("uid"));
        var table = markers[i].getAttribute("table");
        var img = markers[i].getAttribute("img");
        
        marker = createMarker(point, id, img, title, table);
clusterer.RemoveMarker( marker );

        if (!gmarkers[id]) {
          gmarkers[id] = marker;          
          //clusterer.AddMarker(marker,title);
          
          '.$addMarker.'
        } 
        
      }     

/******************* nachher ********************/
      for (var i = 0; i < markers.length; i++) {
        // obtain the attribues of each marker
        var lat = parseFloat(markers[i].getAttribute("lat"));
        var lng = parseFloat(markers[i].getAttribute("lng"));
				var l_off = parseFloat(markers[i].getAttribute("left_offset"));
				var t_off = parseFloat(markers[i].getAttribute("top_offset"));
				var width = parseFloat(markers[i].getAttribute("image_width"));
				var height = parseFloat(markers[i].getAttribute("image_height"));
        var point = new GLatLng(lat,lng);
        var title = [GXml.value(markers[i].getElementsByTagName("t")[0]) ];
        var id = parseFloat(markers[i].getAttribute("uid"));
        var table = markers[i].getAttribute("table");
        var img = markers[i].getAttribute("img");
        
        marker = createMarker(point, id, img, title, table,l_off,t_off,width,height);
clusterer.RemoveMarker( marker );

        if (!gmarkers[id]) {
          gmarkers[id] = marker;          
          //clusterer.AddMarker(marker,title);
          
          '.$addMarker.'
        } 
        
      }

und zu guter letzt in selber Datei

function createMarker(point, id, img, title,table,l_off,t_off,width,height) {
// kein BaseIcon verwenden
//  var icon = new GIcon(baseIcon);
	var icon = new GIcon();
	icon.iconSize = new GSize(width, height);
	icon.iconAnchor = new GPoint(l_off, t_off);
	icon.infoWindowAnchor = new GPoint(32, 32);
	icon.infoShadowAnchor = new GPoint(8, 8-);
	icon.transparent = "http://www.google.com/mapfiles/markerTransparent.png";

Sooo...
Ganz schön harter Tobak. Vielleicht hilft es einem.
Vielleicht nimmt Georg diese Abwandlungen, um die Extension zu updaten :-)

Grüße
McGregor

P.S. Mit diesen Änderungen kann das Bild dynamisch geändert und die Position angepasst werden.

Mopps ·

ui, ganz schon in der Extension rummgewurschtelt 🙂
Vielleicht kannst du Georg ein Mail auf diesen Post schreiben.

Ich hab auch schon recht viel an der Extension geändert. Damit ist leider das Uptdate tabu.

Grüße und danke für das Wissen!