Seite 1 von 1

Googlemap und Streetview im Webgadget (2.Update)

Verfasst: 24.07.2011 10:01
von hjbremer
Update vom 07.11.2011

Immer noch die Frage "wer hat schuld an diesem grausligen Wetter ?"

WICHTIG. Im IE ist ActivX zumindest auf bestätigen zu stellen, sonst funktioniert das Speichern von Adressen nicht !!!

Das Beispiel ist als Stand-Alone Programm gedacht, kann aber auch irgendwo eingebaut werden mit kleinen Änderungen.

GoogleMapClipboard() dient dazu bei Adressen, die man irgendwo mit Strg+C kopiert hat, den Zeilenumbruch zu entfernen, damit man diese mit Strg+V einfügen kann.

GoogleMapWebGadgetKeys() ermöglicht überhaupt erst Strg+C etc im Webgadget.

MainProgramm:

Code: Alles auswählen


Enumeration 1   
   #mapwindow
   #mapcontainer
   #mapwebgadget    
EndEnumeration

Procedure.s GoogleMapMakeHtmlCode()
   
   Protected html.s
   Protected *c.character
      
   ;Null Char im Memory zwischen Datazeilen gegen Return tauschen
   For *c = ?MapLabel To ?MapLabelEnd
      If *c\c = 0           
         *c\c = 13            
      EndIf   
   Next
   
   ;Script laden
   html = PeekS(?MapLabel, ?MapLabelEnd - ?MapLabel)
   
   ProcedureReturn html  
   
EndProcedure

Procedure.i GoogleMapGadgetsResize()
   
   Shared mapwinbr, mapwinhh
   
   mapwinbr = WindowWidth(#mapwindow)
   mapwinhh = WindowHeight(#mapwindow)
   
   ResizeGadget(#mapcontainer, #PB_Ignore, #PB_Ignore, mapwinbr, mapwinhh)
   ResizeGadget(#mapwebgadget, #PB_Ignore, #PB_Ignore, mapwinbr, mapwinhh)
   
EndProcedure

Procedure.i GoogleMap()
   
   Shared mapwinbr, mapwinhh
   
   If Not mapwinbr 
      mapwinbr = 550
      mapwinhh = 500
   EndIf
      
   Protected flags = #PB_Window_ScreenCentered|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget
   
   OpenWindow(#mapwindow, 0, 0, mapwinbr, mapwinhh, "GoogleMap Api v3", flags)
   WindowBounds(#mapwindow, 550, 440, #PB_Ignore, #PB_Ignore)
   ;StickyWindow(#mapwindow, 1) 

   ContainerGadget(#mapcontainer, 0, 0, 0, 0, #PB_Container_BorderLess)  
      WebGadget(#mapwebgadget, 0, 0, 0, 0, "")
      ;browser.IWebBrowser2 = GetWindowLongPtr_(GadgetID(#mapwebgadget), #GWL_USERDATA)  
      ;If browser: browser\put_Silent(#True): EndIf
   CloseGadgetList()
   SetGadgetItemText(#mapwebgadget, #PB_Web_HtmlCode, GoogleMapMakeHtmlCode())
   
   GoogleMapGadgetsResize()
   
EndProcedure

Procedure.i GoogleMapClipboard()
   Protected clip.s = GetClipboardText()
   If clip
      If FindString(clip, #CRLF$, 1)
         clip = ReplaceString(clip, #CRLF$, " ")
         SetClipboardText(clip)
      EndIf
   EndIf  
EndProcedure

Procedure.i GoogleMapWebGadgetKeys(pbnr)

Select EventwParam()
  Case #VK_C, #VK_V, #VK_DELETE  
     CoInitialize_(0) 
     CoCreateInstance_(?CLSID_IOleInPlaceActiveObject, 0, 1, ?IID_IOleInPlaceActiveObject,@OleObject.IOleInPlaceActiveObject) 
     WebObject.IWebBrowser2 = GetWindowLong_(GadgetID(pbnr), #GWL_USERDATA) 
     WebObject\QueryInterface(?IID_IOleInPlaceActiveObject, @OleObject) 
     web.MSG
     web\message = #WM_KEYDOWN 
     web\wParam  = EventwParam() 
     web\lParam  = EventlParam() 
     OleObject\TranslateAccelerator(@web) 
     OleObject\Release() 
     CoUninitialize_() 
EndSelect

DataSection 
;{00000117-0000-0000-C000-000000000046} 
IID_IOleInPlaceActiveObject: 
Data.l $00000117 
Data.w $0000, $0000 
Data.b $C0, $00, $00, $00, $00, $00, $00, $46 

;{00000320-0000-0000-C000-000000000046} 
CLSID_IOleInPlaceActiveObject: 
Data.l $00000320 
Data.w $0000, $0000 
Data.b $C0, $00, $00, $00, $00, $00, $00, $46 
EndDataSection

EndProcedure

Procedure Main()
   
   Protected event
   
   GoogleMap() 

   Repeat : event = WaitWindowEvent()
      If EventWindow() = #mapwindow
         
         Select event
            Case #WM_EXITSIZEMOVE, #PB_Event_MaximizeWindow
               GoogleMapGadgetsResize()
               
            Case #WM_RBUTTONDOWN    ;für PopUp im Inputfeld
               GoogleMapClipboard()
               
            Case #WM_KEYDOWN                
               GoogleMapClipboard()
               GoogleMapWebGadgetKeys(#mapwebgadget)
               
            Case #PB_Event_Gadget
               SetWindowTitle(#mapwindow, GetGadgetItemText(#mapwebgadget, #PB_Web_PageTitle))
               
         EndSelect
         
      EndIf
   Until event = #PB_Event_CloseWindow

EndProcedure

Main()

DataSection
   MapLabel:   
      IncludeFile "html.pbi"
   MapLabelEnd:
EndDataSection 
zugehörige html.pbi

Code: Alles auswählen

   Data.s "<html>"
   Data.s "<head>"
   Data.s "<noscript>JavaScript nicht aktiviert</noscript>"
   Data.s ""
   Data.s "<meta name='viewport' content='initial-scale=1.0, user-scalable=no'/>"
   Data.s "<meta http-equiv='content-type' content='text/html; charset=UTF-8'/>"
   Data.s ""
   Data.s "<title>Google Maps JavaScript API v3</title>"
   Data.s "<script type='text/javascript' src='http://maps.googleapis.com/maps/api/js?sensor=false'></script>"
   Data.s ""
   Data.s "<script type='text/javascript'>"
   Data.s ""
   Data.s "   // globale Variablen !!"
   Data.s "   var geocoder"
   Data.s "   var map"
   Data.s "   var marker"
   Data.s "   var markersarray = []"
   Data.s "   var startaddress = 'Hamburg Rathaus'"
   Data.s "   var windowtitle = 'by HJBremer v3.62 - '"
   Data.s "   var trafficlayer"
   Data.s "   var trafficflag = 0"
   Data.s "   var latlngshowflag = 0"
   Data.s "   var killinglisteflag = 0"
   Data.s "   var adressendateiname = 'googlemap.adr'"
   Data.s ""
   Data.s "   function Initialize() {"
   Data.s "         geocoder = new google.maps.Geocoder()     // geocoder Object definieren"
   Data.s "         var latlng                                // oder var latlng = new google.maps.LatLng(-34.397, 150.644)"
   Data.s "         var myOptions = { zoom: 15,               // latlng muß in Initialize definiert werden, sonst geht nix"
   Data.s "                           center: latlng,"
   Data.s "                           mapTypeControl: true, mapTypeControlOptions: {position: google.maps.ControlPosition.TOP},"
   Data.s "                           scaleControl: true, scaleControlOptions: {position: google.maps.ControlPosition.TOP_LEFT},"
   Data.s "                           panControl: false,"
   Data.s "                           mapTypeId: google.maps.MapTypeId.ROADMAP"
   Data.s "                        }"
   Data.s "         map = new google.maps.Map(document.getElementById('map_canvas'), myOptions)"
   Data.s "         trafficlayer = new google.maps.TrafficLayer()"
   Data.s ""
   Data.s "         google.maps.event.addListener(map, 'click', function(event) { LatLngAnzeigen(event.latLng) })"
   Data.s ""
   Data.s "         HoleAdresse()"
   Data.s "      }"
   Data.s ""
   Data.s "   function HoleAdresse() { Geocoding(document.getElementById('addressfeld').value, 0) }  // Kurzform für GeoCodingaufruf"
   Data.s ""
   Data.s "   function Geocoding(adr, flag) {"
   Data.s "         if (adr == '') {adr = startaddress; document.getElementById('addressfeld').value = startaddress}"
   Data.s "         window.document.title = windowtitle + adr"
   Data.s "         geocoder.geocode( { 'address': adr }, function(results, status) {"
   Data.s "               if (status == google.maps.GeocoderStatus.OK)"
   Data.s "                  { // geolocation ist latlng"
   Data.s "                   var geolocation = results[0].geometry.location; map.setCenter(geolocation)"
   Data.s "                   var markertext = adr + '\n' + geolocation"
   Data.s "                   marker = new google.maps.Marker("
   Data.s "                       { animation: google.maps.Animation.DROP, map: map, position: geolocation, title: markertext })"
   Data.s "                   markersarray.push(marker)"
   Data.s "                   HistoryAddItem(adr, markersarray.length)"
   Data.s "                   if ( flag ) { document.getElementById('addressfeld').value = results[0].formatted_address }"
   Data.s "                  }"
   Data.s "               else"
   Data.s "                  { alert('google.maps.Geocoder kann Eingabe nicht zuordnen: \n \n Fehlercode:' + status) }"
   Data.s "            })"
   Data.s "      }"
   Data.s ""
   Data.s "   function MarkerLoeschen() {"
   Data.s "         if (markersarray) { for (i in markersarray) { markersarray[i].setMap(null) }; markersarray.length = 0 }"
   Data.s "      }"
   Data.s ""
   Data.s "   function OptionOnOff() {"
   Data.s "         var status = form.optionsliste.style.visibility"
   Data.s ""
   Data.s "         if ( status == 'hidden' ) {"
   Data.s "              document.getElementById('listen').style.display='block'"
   Data.s "              form.optionsliste.style.visibility = 'visible'"
   Data.s "              form.optionsbutton.value = 'Diverses Aus'"
   Data.s "            }"
   Data.s "         else {"
   Data.s "              document.getElementById('listen').style.display='none'"
   Data.s "              form.optionsbutton.value = 'Diverses'"
   Data.s "              form.optionsliste.style.visibility = 'hidden'"
   Data.s "              form.friendsliste.style.visibility = 'hidden'"
   Data.s "              form.historyliste.style.visibility = 'hidden'"
   Data.s "              form.killingliste.style.visibility = 'hidden'"
   Data.s "            }"
   Data.s "      }"
   Data.s ""
   Data.s "   function OptionslisteSelect() {"
   Data.s "         var farbe = 'black'"
   Data.s "         var idx = form.optionsliste.selectedIndex"
   Data.s "         var txt = form.optionsliste.options[idx].text"
   Data.s ""
   Data.s "         if ( txt == 'Drucken' ) { window.print() }"
   Data.s ""
   Data.s "         if ( txt == 'Marker' ) { MarkerLoeschen() }"
   Data.s ""
   Data.s "         if ( txt == 'GeoCode' ) {"
   Data.s "               if ( latlngshowflag == 0 ) { latlngshowflag = 1; farbe = 'blue'; }"
   Data.s "               else { latlngshowflag = 0; }"
   Data.s "               form.optionsliste.options[idx].style.color = farbe"
   Data.s "            }"
   Data.s ""
   Data.s "         if ( txt == 'Verkehr' ) {"
   Data.s "               if ( trafficflag == 0 ) { trafficflag = 1; trafficlayer.setMap(map); farbe = 'green'; }"
   Data.s "               else { trafficflag = 0; trafficlayer.setMap(null); }"
   Data.s "               form.optionsliste.options[idx].style.color = farbe"
   Data.s "            }"
   Data.s ""
   Data.s "         if ( txt == 'Adressen' ) {"
   Data.s "               form.killingliste.style.visibility = 'hidden'"
   Data.s "               form.historyliste.style.visibility = 'hidden'"
   Data.s "               if ( form.friendsliste.style.visibility == 'visible' ) { form.friendsliste.style.visibility = 'hidden' }"
   Data.s "               else { form.friendsliste.style.visibility = 'visible'; farbe = 'green' }"
   Data.s "               form.optionsliste.options[idx].style.color = farbe"
   Data.s "            }"
   Data.s ""
   Data.s "         if ( txt == 'History' ) {"
   Data.s "               form.killingliste.style.visibility = 'hidden'"
   Data.s "               form.friendsliste.style.visibility = 'hidden'"
   Data.s "               if ( form.historyliste.style.visibility == 'visible' ) { form.historyliste.style.visibility = 'hidden' }"
   Data.s "               else { form.historyliste.style.visibility = 'visible'; farbe = 'green' }"
   Data.s "               form.optionsliste.options[idx].style.color = farbe"
   Data.s "            }"
   Data.s ""
   Data.s "            form.optionsliste.selectedIndex = -1"
   Data.s "      }"
   Data.s ""
   Data.s "   function FriendslisteSort() {"
   Data.s "         var textarray = new Array()"
   Data.s "         for( i = 0; i < form.friendsliste.length; i++ ) { textarray[i] = form.friendsliste.options[i].text; }"
   Data.s "         textarray.sort()"
   Data.s "         for( i = 0; i < form.friendsliste.length; i++ ) { form.friendsliste.options[i].text = textarray[i]; }"
   Data.s "      }"
   Data.s ""
   Data.s "   function FriendslisteSave() {"
   Data.s "         var text = ''"
   Data.s "         for( i = 0; i < form.friendsliste.length; i++ ) { text = text + form.friendsliste.options[i].text + '\r\n' }"
   Data.s "         TextFile(adressendateiname, 'save', text)"
   Data.s "      }"
   Data.s ""
   Data.s "   function FriendslisteSelect() {"
   Data.s "         var idx = form.friendsliste.selectedIndex"
   Data.s "         var txt = form.friendsliste.options[idx].text"
   Data.s "         var j = 0"
   Data.s "         var text = ''"
   Data.s "         var neuerEintrag"
   Data.s ""
   Data.s ""
   Data.s "         switch (txt) {"
   Data.s "            case '- Adresse hinzufügen -':"
   Data.s "               if ( form.killingliste.style.visibility == 'visible' ) { KillinglisteClose() }"
   Data.s "               text = document.getElementById('addressfeld').value"
   Data.s "               neuerEintrag = new Option(text, 0, false, true)"
   Data.s "               neuerEintrag.style.color = 'red'"
   Data.s "               form.friendsliste.options[form.friendsliste.length] = neuerEintrag  // ans Ende setzen"
   Data.s "               FriendslisteSort()"
   Data.s "               FriendslisteSave()"
   Data.s "               break"
   Data.s ""
   Data.s "            case '- Adressen laden -':"
   Data.s "               if ( form.killingliste.style.visibility == 'visible' ) { KillinglisteClose() }"
   Data.s "               text = TextFile(adressendateiname, 'load')"
   Data.s "               if (text) {"
   Data.s "                  var feld = text.split('\r\n')"
   Data.s "                  form.friendsliste.length = null"
   Data.s "                  for( i = 0; i < feld.length; i++ ) {"
   Data.s "                     if (feld[i].length) {"
   Data.s "                        neuerEintrag = new Option(feld[i], 0, false, true)"
   Data.s "                        neuerEintrag.style.color = 'red'"
   Data.s "                        form.friendsliste.options[j] = neuerEintrag"
   Data.s "                        j ++"
   Data.s "                     }"
   Data.s "                  }"
   Data.s "                  for( i = 0; i < 3; i++ ) { form.friendsliste.options[i].style.color = 'blue' }"
   Data.s "               }"
   Data.s "               break"
   Data.s ""
   Data.s "            case '- Adressen löschen -':"
   Data.s "               if ( form.killingliste.style.visibility == 'visible' ) { KillinglisteClose() }"
   Data.s "               else {"
   Data.s "                  for( i = 3; i < form.friendsliste.length; i++ ) {"
   Data.s "                     text = form.friendsliste.options[i].text"
   Data.s "                     neuerEintrag = new Option(text, 0, false, true)"
   Data.s "                     form.killingliste.options[j] = neuerEintrag"
   Data.s "                     j ++"
   Data.s "                  }"
   Data.s "                  if (form.killingliste.length) {"
   Data.s "                     form.friendsliste.options[idx].style.color = 'green'"
   Data.s "                     form.killingliste.style.visibility = 'visible'"
   Data.s "                  }"
   Data.s "               }"
   Data.s "               break"
   Data.s ""
   Data.s "            default: Geocoding(txt, 1)"
   Data.s "               break"
   Data.s "            }"
   Data.s "         form.friendsliste.selectedIndex = -1"
   Data.s "      }"
   Data.s ""
   Data.s "   function HistorylisteSelect() {"
   Data.s "         var idx = form.historyliste.selectedIndex"
   Data.s "         var text = form.historyliste.options[idx].text"
   Data.s "         var wert = form.historyliste.options[idx].value - 1"
   Data.s "         var latlng = markersarray[wert].getPosition(map)"
   Data.s "         map.setCenter(latlng)"
   Data.s "         geocoder.geocode({'latLng': latlng}, function(results, status)"
   Data.s "            { document.getElementById('addressfeld').value = results[0].formatted_address })"
   Data.s "      }"
   Data.s ""
   Data.s "   function HistoryAddItem(text, wert) {"
   Data.s "         var neuerEintrag = new Option(text, wert, false, true)"
   Data.s "         form.historyliste.options[form.historyliste.length] = neuerEintrag  // ans Ende setzen"
   Data.s "      }"
   Data.s ""
   Data.s "   function KillinglisteSelect() {"
   Data.s "         var idx = form.killingliste.selectedIndex"
   Data.s "         var txt = form.killingliste.options[idx].text"
   Data.s "         form.killingliste.options[idx] = null; killinglisteflag ++"
   Data.s "         if ( form.killingliste.length == 0 ) { KillinglisteClose() }"
   Data.s "         for( i = 3; i < form.friendsliste.length; i++ ) {  // durchsuche friendsliste und entferne Eintrag"
   Data.s "            if ( form.friendsliste.options[i].text == txt ) { form.friendsliste.options[i] = null; break }"
   Data.s "         }"
   Data.s "      }"
   Data.s ""
   Data.s "   function KillinglisteClose() {"
   Data.s "         if ( killinglisteflag ) {"
   Data.s "               ok = confirm('Es wurden Einträge gelöscht: ' + killinglisteflag + '\n\n ok für Adressen speichern')"
   Data.s "               if ( ok ) { FriendslisteSave() }"
   Data.s "            }"
   Data.s "         killinglisteflag = 0"
   Data.s "         form.killingliste.length = null"
   Data.s "         form.killingliste.style.visibility = 'hidden'"
   Data.s "         for( i = 0; i < 3; i++ ) { form.friendsliste.options[i].style.color = 'blue' }"
   Data.s "      }"
   Data.s ""
   Data.s "   function LatLngAnzeigen(latlngwert) {"
   Data.s "         if (latlngshowflag) {"
   Data.s "            var text = 'LatLng : ' + latlngwert + '\n\r\n' // \r ist Zeilenvorschub für Clipboard"
   Data.s "            geocoder.geocode({'latLng': latlngwert}, function(results, status) {"
   Data.s "               if (status == google.maps.GeocoderStatus.OK) {"
   Data.s "                  text += 'Adresse: ' + results[0].formatted_address"
   Data.s "                  if ( confirm(text + '\n\nDaten ins Clipboard kopieren ? (nur IE)') == true ) {"
   Data.s "                     if ( navigator.appName == 'Microsoft Internet Explorer') {window.clipboardData.setData('Text', text)}"
   Data.s "                  }}"
   Data.s "               else { alert('LatLng ist ' + latlngwert +  '\n\n' + 'Statuscode: ' + status) }"
   Data.s "            })"
   Data.s "         }"
   Data.s "      }"
   Data.s ""
   Data.s "   function TextFile(name, flag, text){"
   Data.s ""
   Data.s "         // unter Sicherheit-Stufe anpassen, ActiveX-Steuerelemente + Plugins"
   Data.s "         // ActiveX-Steuerelemente ausführen, die nicht als sicher für Scripting markiert sind: aktivieren !!!"
   Data.s ""
   Data.s "         if (navigator.appName != 'Microsoft Internet Explorer') {   // IE Test"
   Data.s "            // alert('save/load nur im IE')"
   Data.s "            return ''"
   Data.s "         }"
   Data.s ""
   Data.s "         var fso = new ActiveXObject('Scripting.FileSystemObject')"
   Data.s "         var file"
   Data.s "         var filename = fso.GetFolder('.') + ''                      // var filename = 'c:/bremer/test1.txt'"
   Data.s "             filename = filename.replace(/\\/g, '/' ) + '/' + name   // Backslash wird Slash"
   Data.s ""
   Data.s "         if ( flag == 'load' ) {"
   Data.s "            text = ''"
   Data.s "            if ( !(fso.FileExists(filename)) ) { return text}        // nicht vorhanden, abbrechen"
   Data.s "            file = fso.OpenTextFile(filename, 1)                     // öffnen, nur lesen"
   Data.s "            if ( !(file.AtEndOfStream) ) { text = file.ReadAll() }   // nicht leer, Dateiinhalt lesen"
   Data.s "            file.Close()                                             // schliessen"
   Data.s "            return text                                              // Dateiinhalt zurück"
   Data.s "         }"
   Data.s "         else if ( flag == 'save' ) {"
   Data.s "            file = fso.CreateTextFile(filename, true)       // Datei erstellen"
   Data.s "            file.Write(text)                                // Text schreiben"
   Data.s "            file.Close()"
   Data.s "         }"
   Data.s "         delete fso; fso = 0"
   Data.s "      }"
   Data.s ""
   Data.s "</script>"
   Data.s "</head>"
   Data.s ""
   Data.s "<style type='text/css'>"
   Data.s "   .h1{border:solid navy 1px; margin-bottom:1; background-color:#AFDE6B; }"
   Data.s "   .h2{border:solid navy 0px; color:white; font-weight:bold; font-size:12; background-color:#7390D1; width:90; padding:0; }"
   Data.s "</style>"
   Data.s ""
   Data.s "<body style='overflow-x:hidden; overflow-y:hidden; margin:0px; padding:0px' onload='Initialize()' >"
   Data.s "   <!-- form benötigt auf jeden Fall (; return false) -->"
   Data.s "   <form name='form' style='height:100%;  ' action='#' onsubmit='HoleAdresse(); return false'>"
   Data.s "      <div id='map_canvas' style='height:100%; border:solid #DBBFA6 1px'></div>"
   Data.s "      <div align='center' style='position:absolute; bottom:1; width:100%; '>"
   Data.s "         <input type='text'   class='h1' value=''       id='addressfeld' style='width:350; '>"
   Data.s "         <input type='button' class='h1' value='Suchen' id='suchenbutton' onclick='HoleAdresse()'>"
   Data.s "      </div>"
   Data.s ""
   Data.s "      <div style='position:absolute; right:20; top:4; '>"
   Data.s "         <input name='optionsbutton' type='button' class='h2' value='Diverses' style='float:right; clear:right; ' onclick='OptionOnOff()'>"
   Data.s "      </div>"
   Data.s "      <div id='listen' style='position:absolute; right:20; top:24; display:none '>"
   Data.s "         <select name='optionsliste' size='6' style='visibility:hidden; float:right; clear:right; width:90; ' onclick='OptionslisteSelect()'>"
   Data.s "            <option>Drucken"
   Data.s "            <option>Marker"
   Data.s "            <option>GeoCode"
   Data.s "            <option>Verkehr"
   Data.s "            <option>History"
   Data.s "            <option>Adressen"
   Data.s "         </select>"
   Data.s "         <select name='historyliste' style='visibility:hidden; float:right; clear:right;' onchange='HistorylisteSelect()' >"
   Data.s "         </select>"
   Data.s "         <select name='friendsliste' size='9' style='visibility:hidden; float:right; clear:right; margin-top:-22px;' onchange='FriendslisteSelect()' >"
   Data.s "            <option style='color:blue'>- Adresse hinzufügen -</option>"
   Data.s "            <option style='color:blue'>- Adressen laden -</option>"
   Data.s "            <option style='color:blue'>- Adressen löschen -</option>"
   Data.s "         </select>"
   Data.s "         <select name='killingliste' size='5' style='visibility:hidden; float:right; clear:right;' onclick='KillinglisteSelect()' >"
   Data.s "         </select>"
   Data.s "      </div>"
   Data.s ""
   Data.s "   </form>"
   Data.s "   <script type='text/javascript'> document.getElementById('addressfeld').value=startaddress </script>"
   Data.s "</body>"
   Data.s "</html>"

MakeData.pb (macht aus Html die Datazeilen)

Code: Alles auswählen

dat.s = "\Bremer\BeispieleXX\allgemein\Googlemap\test\test1"
dat.s = "\Bremer\BeispieleXX\allgemein\Googlemap\test\new11"
dat.s = "\Bremer\BeispieleXX\allgemein\Googlemap\mapv3-62"
qdat.s = dat + ".html"
zdat.s = "html.pbi"
zeile.s

qdnr = ReadFile(#PB_Any, qdat)
If qdnr
  zdnr = CreateFile(#PB_Any, zdat)
  While Eof(qdnr) = 0
    zeile = ReadString(qdnr)
    For j = 1 To 31
      zeile = ReplaceString(zeile, Chr(j), " ")
    Next
    zeile = RTrim(zeile)
    zeile = ReplaceString(zeile, #DQUOTE$, "'")
    zeile = "   Data.s " + #DQUOTE$ + zeile + #DQUOTE$    
    WriteStringN(zdnr, zeile) ;:Debug zeile
  Wend  
  CloseFile(qdnr)  
  CloseFile(zdnr)  
EndIf
HTML Code: mit Notepad abspeichern als mapv3-62.html, wird mit MakeData.pb zu html.pbi

Code: Alles auswählen

<html>
<head>
<noscript>JavaScript nicht aktiviert</noscript>

<meta name="viewport" content="initial-scale=1.0, user-scalable=no"/>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>

<title>Google Maps JavaScript API v3</title>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>

<script type="text/javascript">

   // globale Variablen !!
   var geocoder
   var map
   var marker
   var markersarray = []
   var startaddress = "Hamburg Rathaus"
   var windowtitle = "by HJBremer v3.62 - "
   var trafficlayer
   var trafficflag = 0
   var latlngshowflag = 0
   var killinglisteflag = 0
   var adressendateiname = "googlemap.adr"

   function Initialize() {
         geocoder = new google.maps.Geocoder()     // geocoder Object definieren
         var latlng                                // oder var latlng = new google.maps.LatLng(-34.397, 150.644)
         var myOptions = { zoom: 15,               // latlng muß in Initialize definiert werden, sonst geht nix
                           center: latlng,         
                           mapTypeControl: true, mapTypeControlOptions: {position: google.maps.ControlPosition.TOP},
                           scaleControl: true, scaleControlOptions: {position: google.maps.ControlPosition.TOP_LEFT},
                           panControl: false,
                           mapTypeId: google.maps.MapTypeId.ROADMAP
                        }
         map = new google.maps.Map(document.getElementById("map_canvas"), myOptions)
         trafficlayer = new google.maps.TrafficLayer()

         google.maps.event.addListener(map, 'click', function(event) { LatLngAnzeigen(event.latLng) })

         HoleAdresse()
      }

   function HoleAdresse() { Geocoding(document.getElementById("addressfeld").value, 0) }  // Kurzform für GeoCodingaufruf

   function Geocoding(adr, flag) {
         if (adr == "") {adr = startaddress; document.getElementById("addressfeld").value = startaddress}
         window.document.title = windowtitle + adr
         geocoder.geocode( { 'address': adr }, function(results, status) {
               if (status == google.maps.GeocoderStatus.OK)
                  { // geolocation ist latlng
                   var geolocation = results[0].geometry.location; map.setCenter(geolocation)
                   var markertext = adr + "\n" + geolocation
                   marker = new google.maps.Marker(
                       { animation: google.maps.Animation.DROP, map: map, position: geolocation, title: markertext })
                   markersarray.push(marker)
                   HistoryAddItem(adr, markersarray.length)
                   if ( flag ) { document.getElementById("addressfeld").value = results[0].formatted_address }
                  }
               else
                  { alert("google.maps.Geocoder kann Eingabe nicht zuordnen: \n \n Fehlercode:" + status) }
            })
      }

   function MarkerLoeschen() {
         if (markersarray) { for (i in markersarray) { markersarray[i].setMap(null) }; markersarray.length = 0 }
      }

   function OptionOnOff() {
         var status = form.optionsliste.style.visibility

         if ( status == "hidden" ) {
              document.getElementById("listen").style.display='block'
              form.optionsliste.style.visibility = "visible"
              form.optionsbutton.value = "Diverses Aus"
            }
         else {
              document.getElementById("listen").style.display='none'
              form.optionsbutton.value = "Diverses"
              form.optionsliste.style.visibility = "hidden"
              form.friendsliste.style.visibility = "hidden"
              form.historyliste.style.visibility = "hidden"
              form.killingliste.style.visibility = "hidden"
            }
      }

   function OptionslisteSelect() {
         var farbe = "black"
         var idx = form.optionsliste.selectedIndex
         var txt = form.optionsliste.options[idx].text

         if ( txt == "Drucken" ) { window.print() }

         if ( txt == "Marker" ) { MarkerLoeschen() }

         if ( txt == "GeoCode" ) {
               if ( latlngshowflag == 0 ) { latlngshowflag = 1; farbe = "blue"; }
               else { latlngshowflag = 0; }
               form.optionsliste.options[idx].style.color = farbe
            }

         if ( txt == "Verkehr" ) {
               if ( trafficflag == 0 ) { trafficflag = 1; trafficlayer.setMap(map); farbe = "green"; }
               else { trafficflag = 0; trafficlayer.setMap(null); }
               form.optionsliste.options[idx].style.color = farbe
            }

         if ( txt == "Adressen" ) {
               form.killingliste.style.visibility = "hidden"
               form.historyliste.style.visibility = "hidden"
               if ( form.friendsliste.style.visibility == "visible" ) { form.friendsliste.style.visibility = "hidden" }
               else { form.friendsliste.style.visibility = "visible"; farbe = "green" }
               form.optionsliste.options[idx].style.color = farbe
            }

         if ( txt == "History" ) {
               form.killingliste.style.visibility = "hidden"
               form.friendsliste.style.visibility = "hidden"
               if ( form.historyliste.style.visibility == "visible" ) { form.historyliste.style.visibility = "hidden" }
               else { form.historyliste.style.visibility = "visible"; farbe = "green" }
               form.optionsliste.options[idx].style.color = farbe
            }

            form.optionsliste.selectedIndex = -1
      }

   function FriendslisteSort() {
         var textarray = new Array()
         for( i = 0; i < form.friendsliste.length; i++ ) { textarray[i] = form.friendsliste.options[i].text; }
         textarray.sort()
         for( i = 0; i < form.friendsliste.length; i++ ) { form.friendsliste.options[i].text = textarray[i]; }
      }
      
   function FriendslisteSave() {
         var text = ""
         for( i = 0; i < form.friendsliste.length; i++ ) { text = text + form.friendsliste.options[i].text + "\r\n" }
         TextFile(adressendateiname, "save", text)
      }
      
   function FriendslisteSelect() {
         var idx = form.friendsliste.selectedIndex
         var txt = form.friendsliste.options[idx].text
         var j = 0
         var text = ""
         var neuerEintrag
         
         
         switch (txt) {
            case "- Adresse hinzufügen -":
               if ( form.killingliste.style.visibility == "visible" ) { KillinglisteClose() }
               text = document.getElementById("addressfeld").value
               neuerEintrag = new Option(text, 0, false, true)
               neuerEintrag.style.color = "red"
               form.friendsliste.options[form.friendsliste.length] = neuerEintrag  // ans Ende setzen
               FriendslisteSort()
               FriendslisteSave()
               break

            case "- Adressen laden -":
               if ( form.killingliste.style.visibility == "visible" ) { KillinglisteClose() }
               text = TextFile(adressendateiname, "load")
               if (text) {
                  var feld = text.split("\r\n")
                  form.friendsliste.length = null
                  for( i = 0; i < feld.length; i++ ) { 
                     if (feld[i].length) {
                        neuerEintrag = new Option(feld[i], 0, false, true)
                        neuerEintrag.style.color = "red"
                        form.friendsliste.options[j] = neuerEintrag
                        j ++
                     }
                  }
                  for( i = 0; i < 3; i++ ) { form.friendsliste.options[i].style.color = "blue" }
               }               
               break

            case "- Adressen löschen -":
               if ( form.killingliste.style.visibility == "visible" ) { KillinglisteClose() }
               else {
                  for( i = 3; i < form.friendsliste.length; i++ ) {
                     text = form.friendsliste.options[i].text
                     neuerEintrag = new Option(text, 0, false, true)
                     form.killingliste.options[j] = neuerEintrag
                     j ++
                  }
                  if (form.killingliste.length) { 
                     form.friendsliste.options[idx].style.color = "green"
                     form.killingliste.style.visibility = "visible" 
                  }
               }
               break

            default: Geocoding(txt, 1)
               break
            }
         form.friendsliste.selectedIndex = -1
      }

   function HistorylisteSelect() {
         var idx = form.historyliste.selectedIndex
         var text = form.historyliste.options[idx].text
         var wert = form.historyliste.options[idx].value - 1
         var latlng = markersarray[wert].getPosition(map)
         map.setCenter(latlng)
         geocoder.geocode({'latLng': latlng}, function(results, status)
            { document.getElementById("addressfeld").value = results[0].formatted_address })
      }

   function HistoryAddItem(text, wert) {
         var neuerEintrag = new Option(text, wert, false, true)
         form.historyliste.options[form.historyliste.length] = neuerEintrag  // ans Ende setzen
      }

   function KillinglisteSelect() {
         var idx = form.killingliste.selectedIndex
         var txt = form.killingliste.options[idx].text
         form.killingliste.options[idx] = null; killinglisteflag ++
         if ( form.killingliste.length == 0 ) { KillinglisteClose() }
         for( i = 3; i < form.friendsliste.length; i++ ) {  // durchsuche friendsliste und entferne Eintrag
            if ( form.friendsliste.options[i].text == txt ) { form.friendsliste.options[i] = null; break }
         }
      }

   function KillinglisteClose() {
         if ( killinglisteflag ) { 
               ok = confirm("Es wurden Einträge gelöscht: " + killinglisteflag + "\n\n ok für Adressen speichern")
               if ( ok ) { FriendslisteSave() }               
            }
         killinglisteflag = 0
         form.killingliste.length = null
         form.killingliste.style.visibility = "hidden"
         for( i = 0; i < 3; i++ ) { form.friendsliste.options[i].style.color = "blue" }
      }

   function LatLngAnzeigen(latlngwert) {
         if (latlngshowflag) {
            var text = "LatLng : " + latlngwert + "\n\r\n" // \r ist Zeilenvorschub für Clipboard
            geocoder.geocode({'latLng': latlngwert}, function(results, status) {
               if (status == google.maps.GeocoderStatus.OK) {
                  text += "Adresse: " + results[0].formatted_address
                  if ( confirm(text + "\n\nDaten ins Clipboard kopieren ? (nur IE)") == true ) {
                     if ( navigator.appName == "Microsoft Internet Explorer") {window.clipboardData.setData("Text", text)}
                  }}
               else { alert("LatLng ist " + latlngwert +  "\n\n" + "Statuscode: " + status) }
            })
         }
      }

   function TextFile(name, flag, text){

         // unter Sicherheit-Stufe anpassen, ActiveX-Steuerelemente + Plugins
         // ActiveX-Steuerelemente ausführen, die nicht als sicher für Scripting markiert sind: aktivieren !!!
      
         if (navigator.appName != "Microsoft Internet Explorer") {   // IE Test
            // alert("save/load nur im IE")
            return ""
         }  

         var fso = new ActiveXObject("Scripting.FileSystemObject")
         var file
         var filename = fso.GetFolder(".") + ""                      // var filename = "c:/bremer/test1.txt"
             filename = filename.replace(/\\/g, "/" ) + "/" + name   // Backslash wird Slash
      
         if ( flag == "load" ) {
            text = ""
            if ( !(fso.FileExists(filename)) ) { return text}        // nicht vorhanden, abbrechen
            file = fso.OpenTextFile(filename, 1)                     // öffnen, nur lesen
            if ( !(file.AtEndOfStream) ) { text = file.ReadAll() }   // nicht leer, Dateiinhalt lesen
            file.Close()                                             // schliessen
            return text                                              // Dateiinhalt zurück
         }
         else if ( flag == "save" ) {
            file = fso.CreateTextFile(filename, true)       // Datei erstellen
            file.Write(text)                                // Text schreiben
            file.Close()      
         }
         delete fso; fso = 0   
      }

</script>
</head>

<style type="text/css">
   .h1{border:solid navy 1px; margin-bottom:1; background-color:#AFDE6B; }
   .h2{border:solid navy 0px; color:white; font-weight:bold; font-size:12; background-color:#7390D1; width:90; padding:0; }
</style>

<body style="overflow-x:hidden; overflow-y:hidden; margin:0px; padding:0px" onload="Initialize()" >
   <!-- form benötigt auf jeden Fall (; return false) -->
   <form name="form" style="height:100%;  " action='#' onsubmit='HoleAdresse(); return false'>
      <div id="map_canvas" style="height:100%; border:solid #DBBFA6 1px"></div>
      <div align="center" style="position:absolute; bottom:1; width:100%; ">
         <input type="text"   class="h1" value=""       id="addressfeld" style="width:350; ">
         <input type="button" class="h1" value="Suchen" id="suchenbutton" onclick="HoleAdresse()">
      </div>

      <div style="position:absolute; right:20; top:4; ">
         <input name="optionsbutton" type="button" class="h2" value="Diverses" style="float:right; clear:right; " onclick="OptionOnOff()">
      </div>
      <div id="listen" style="position:absolute; right:20; top:24; display:none ">
         <select name="optionsliste" size="6" style="visibility:hidden; float:right; clear:right; width:90; " onclick="OptionslisteSelect()">
            <option>Drucken
            <option>Marker
            <option>GeoCode
            <option>Verkehr
            <option>History
            <option>Adressen
         </select>
         <select name="historyliste" style="visibility:hidden; float:right; clear:right;" onchange="HistorylisteSelect()" >
         </select>
         <select name="friendsliste" size="9" style="visibility:hidden; float:right; clear:right; margin-top:-22px;" onchange="FriendslisteSelect()" >
            <option style="color:blue">- Adresse hinzufügen -</option>
            <option style="color:blue">- Adressen laden -</option>
            <option style="color:blue">- Adressen löschen -</option>
         </select>
         <select name="killingliste" size="5" style="visibility:hidden; float:right; clear:right;" onclick="KillinglisteSelect()" >
         </select>
      </div>

   </form>
   <script type="text/javascript"> document.getElementById("addressfeld").value=startaddress </script>
</body>
</html>
Anmerkungen: Tabs im Htmlquellcode sind zu vermeiden, weil die Datazeilen dann unordentlich aussehen.

Immer noch besonders nervig ist das Webgadget. XP-Skin fehlt seit Ewigkeiten. Obwohl der IE eigentlich alles versteht, was Chrome versteht, weigert sich das Webgadget es dem IE gleich zutun. Wer also am Html-code Verbesserungen vornehmen will, möge sich überzeugen, das das Webgadget diese auch akzeptiert.

__________________________________________________
Thread verschoben
Windows>Code, Tipps und Tricks
07.09.2011
RSBasic

Re: Googlemap und Streetview im Webgadget (Update)

Verfasst: 13.08.2011 13:57
von hjbremer
Update mit geändertem Layout und mehr Funktionen

Code oben geändert

Re: Googlemap und Streetview im Webgadget (Update)

Verfasst: 18.08.2011 11:18
von dige
Klasse! Danke für's teilen.

Re: Googlemap und Streetview im Webgadget (2.Update)

Verfasst: 07.09.2011 20:41
von hjbremer
2. Update

Code oben geändert, jetzt mit Speichern von Adressen etc

Re: Googlemap und Streetview im Webgadget (2.Update)

Verfasst: 06.10.2011 17:38
von kwai chang caine
Danke :allright:

Re: Googlemap und Streetview im Webgadget (2.Update)

Verfasst: 16.08.2013 11:28
von kernadec
hallo hjbremer
vielen Dank für Ihre großartige Arbeit. :allright:
Allerdings gibt es ein Problem mit der Legende Texte satellitte Mode
Sie haben eine Lösung dafür gefunden.
ich danke Ihnen sehr.
Grüße