Práce s google mapou – Visual Basic – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Práce s google mapou – Visual Basic – Fórum – Programujte.comPráce s google mapou – Visual Basic – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Jorya0
Newbie
18. 1. 2016   #1
-
0
-

Dobrý den,

Chtěl jsem udělat pomocí google map "přelet" nad danou oblastí. Do Webbrowser jsem načetl mapu pomocí počátečního odkazu (zatím pro pokusy v budoucnu by se mělo sát načíst místo dle zadaných GPS uživatelem).

Pohyb mapy jsem chtěl zajistit pomocí Timeru, který měl ke GPS v daném kurzu přičítat hodnotu a tím posouvat mapu. Bohužel narazil jsem na to, že celá stránka se vždy znovu načítá, což vypadá velmi divně a pokud zvolím rychlejší chod časovače, aby pohyb působil plynule, tak se stránka v WebBrowseru nestíhá načíst.

Když se kouknu na mapy do klasického prohlížeče plynulí posuv tam funguje, nevíte někdo jak by se to dalo udělat i ve WebBrowseru?

Ještě se mi objevila jedna chyba - když jsem chtěl načíst mapu pod sklopeným úhlem (Earth), tak se ve WebBrowseru zobrazuje buď pouze shora a nebo se ji nedaří načíst vůbec (při načtení do exploreru mapa funguje).

Nahlásit jako SPAM
IP: 2001:718:1c01:156:70e4:f3...–
Reklama
Reklama
Jorya0
Newbie
1. 6. 2016   #2
-
0
-

Nutno podotknout, že jsem původní problém stále nevyřešil, ale napadlo mě jak ho případně obejít. Neznáte nějaké vhodné mapové podklady, které by se dali stáhnout do PC (tím by se vyřešila doba odezvy internetu) a zároveň pomocí nějakého kódu daly prohlížet v aplikacích VB? - tedy třeba: prohlížeč mapových podkladů z PC by se měl chovat podobně třeba jako internetový prohlížeč, tak aby polohu kterou má zobrazit šlo volat odkazem (akorát ne na internet, ale do složky s mapovými podklady).

Nahlásit jako SPAM
IP: 2001:718:1c01:156:142f:79...–
NeregistrovanyHookyns
~ Anonymní uživatel
62 příspěvků
1. 6. 2016   #3
-
0
-

Pomocí Google maps API si vytvoř vlastní mapu. S tou pak můžeš manipulovat přes JS, klidně měnit pozici. Pak budeš volat odkazy "javascript:TvojeMapa.map.setCenter(new google.maps.LatLng( 49, 17 ) );"

Nahlásit jako SPAM
IP: 77.95.192.–
Jorya
~ Anonymní uživatel
24 příspěvků
2. 6. 2016   #4
-
0
-

#3 NeregistrovanyHookyns
Díky za radu. S google API jsem se zatím nesetkal, tak to zkusím nějak nastudovat. Ale při prohledávání internetu jsem narazil, na to, že by to obdobně mělo jít i s Google Earth. Máto vůči sobě nějaké konkrétní výhody a nevýhody?

Bohužel jsem ale nenarazil na žádný ukázkový kód aplikace ve VB, kterou by se dalo stáhnout a podívat se na celkovou strukturu.

Nahlásit jako SPAM
IP: 2001:718:1c01:156:c11a:da...–
NeregistrovanyHookyns
~ Anonymní uživatel
62 příspěvků
2. 6. 2016   #5
-
0
-

#4 Jorya
Já jsem zatím pracoval jen s google maps API, takže výhody a nevýhody neznám.

Zde jsem ti vytvořil základní example: https://jsfiddle.net/Lt03mfw4/

Ten interval je tam jen pro demonstraci. Ty si to budeš volat z VB přes javascript:map.setCenter();

Tohle HTML s JS by si měl statické uvnitř tvé aplikace. WebBrowser by měl umět zobrazit i vlastní HTML.

Nahlásit jako SPAM
IP: 77.95.192.–
Jorya
~ Anonymní uživatel
24 příspěvků
2. 6. 2016   #6
-
0
-

#5 NeregistrovanyHookyns
Mockrát děkuji - chvíli jsem si s vašim kódem hrál, abych pochopil co která čísla mění. Když jsem zkrátil interval a zjemnil posuv, tak se mi povedl krásný plynulý pohyb. Moc se mi to líbí.

Problém spíše je, že moje dosavadní práce s okolními soubory byla taková, že umím načíst a uložit textový soubor, popřípadě tabulku, ale abych se odkazoval na soubory jiného kódu nebo něco podobného s tím jsem se zatím nesetkal. 

Takže ikdyž rozumím kódu, který jste mi napsal, nevím jak přesně ho propojit s aplikací ve VB - tedy tak abych do něj mohl posílat parametry a nebo je případně i číst.

Nejsem si jist, jestli tento kód mám nějakým způsobem zabudovávat do aplikace VB a nebo jestli je vlastně celý umístěn na internetu a lze ho jen nějak vyvolávat a vkládat do něj nové parametry.

Nahlásit jako SPAM
IP: 2001:718:1c01:156:c11a:da...–
NeregistrovanyHookyns
~ Anonymní uživatel
62 příspěvků
2. 6. 2016   #7
-
0
-

#6 Jorya
Klidně mi tykej(te). Jsem mladý kluk. :D 

Nevím, jestli WebBrowser může vzít přímo soubor z projektu a ten rovnou načíst, ale každopádně přijímá text, takže si soubor načteš a vložíš sám.

Do projektu, do resources, si vložíš textový soubor (např. mapa.html), a do něj vytvoříš kompletní HTML stránku obsahující tu mapu z JS fiddle, včetně JavaScriptu. Ten soubor bude součástí výstupního .exe.

Při vytváření WebBrowseru načteš celý soubor mapa.html a předáš ho instanci WebBrowseru skrze parametr DocumentText. Viz odkaz.

Z VB poté můžeš volat JS funkce pomocí WebBrowserInstance.Document.InvokeScript("nazevJSFunkceKteraSeMaZavolat", new object[] { "parametrKPredaniProJSFunkci, latitude na kterou chceš nastavit střed, druhy parametr je longtitude", 17.4567 })

V mapa.html pak bude:

<!DOCTYPE html>
<html>
  <head>
    <script>
      var map = new google.maps.Map(...);

      function nazevJSFunkceKteraSeMaZavolat(lat, lng) {
        map.setCenter(new google.maps.LatLng(lat, lng));
        // Případně něco víc
      }
    </script>
  </head>
  <body>div pro mapu</body>
</html>

Jo, jen upozorním, že ten <script>, která načítá google maps API, potřebuje API key. Api key je součástí odkazu, mám tam nějaký co jsem kvůli tomu jsfiddle vytvořil, tak si vygeneruj svůj.

Celý anymovaný přechod budeš řídit z VB. Jestli má třeba nastavený Timer, tak při každém ticku zavoláš webBrorserInstance.Document.InvokeScript() a zavoláš tím tu JS fci (s parametry délky a šířky - souřadnice), která posune mapu.

Nahlásit jako SPAM
IP: 77.95.192.–
Jorya
~ Anonymní uživatel
24 příspěvků
2. 6. 2016   #8
-
0
-

#7 NeregistrovanyHookyns
Klidně si můžeme tykat - mě taky moc není :-D

povedlo se mi dát dokupy html soubor. Pokud si ho otevřu přímo v prohlížeči vše funguje jak má (zatím jsem použil napsanou část kódu tebou  - tedy jen prostý posuv bez posílání instrukcí). Při načítání do WebBrowser ale vzniká problém - nejlépe ho asi vystihuje obrázek

jedná se o tento řádek:

map.setCenter(new google.maps.LatLng( lat, lng ) );

kód jsem m

 

usel malinko upravit, tak jak radili na google api, ale při normálním spuštění html souboru funguje (i v internet explorer). Další část programu jsem poté nezkoušel.

Nahlásit jako SPAM
IP: 2001:718:1c01:156:2ca3:62...–
NeregistrovanyHookyns
~ Anonymní uživatel
62 příspěvků
2. 6. 2016   #9
-
0
-

To vypadá, že se nenačítá ten externí script. Zkus se podívat na vlastnosti WebBrowseru, jestli nemá nějakou vlastnosti na zapnutí externích scriptů nebo tak něco.

Našel jsem tohle. Také google maps API ve WebBrowseru. :D

Může to být API klíčem. Když ho vytváříš, musíš zadat, na jakých serverech může být API klíč použit. Pokud ještě používáš ten můj, tak si vytvoř vlastní a musíš tam nastavít,.. hm.. nevím co. :D Těžko říct, jaká je adresa v tom WebBrowseru.

Nahlásit jako SPAM
IP: 88.102.251.–
Jorya
~ Anonymní uživatel
24 příspěvků
2. 6. 2016   #10
-
0
-

#9 NeregistrovanyHookyns
Do vlastností jsem se podíval a jedna vlastnost se tam scriptů týkala - lze zakázat chybové hlášky... takže vlastnost naprosto k ničemu (minimálně v tento okamžik).

API klíč používám vlastní (doufám, že jsem ho vygeneroval na správném místě, proto nabídka API aplikací, které pracují s mapami tam bylo hodně). Problém s adresou serveru pro API klíč jsem předpokládal, proto jsem tam nic nevyplnil.

Očekával bych že by se WebBrowser měl chovat jako klasický prohlížeč.

HTML soubor jsem vytvořil podle tohoto návodu:

https://developers.google.com/maps/documentation/javascript/examples/map-simple

Kde jsem to doplnil o funkci posuvu mapy a ještě to po mě chtělo abych zavedl funkci "function initMap()" a k odkazu za API klíč přidal "&callback=initMap  async defer".

Mapu v WebBrowser vyvolávám při načtení okna takto: mapa_prohl.DocumentText = My.Resources.mapa

Nahlásit jako SPAM
IP: 2001:718:1c01:156:2ca3:62...–
Jorya
~ Anonymní uživatel
24 příspěvků
4. 6. 2016   #11
-
0
-

Sice jsem ještě úplně neodstranil předchozí chybu, ale snažím se jí obejít. K tomu ale již potřebuji vyvolávat funkci z kódu VB.

Mohl bys důkladně rozepsat, jak z VB předávat parametry do JS?

Mám kód ve VB:

mapa_prohl.Document.InvokeScript("ZmenaPolohy", New Object() {poloha_y, poloha_x})

kde poloha y a x jsou Stringy obsahující výraz typu 47.026840 Při spuštění programu dojde k této chybě: "Odkaz na objekt není nastaven na instanci objektu."

V JS to vypadá takto:

function ZmenaPolohy(latA, lngA){

.....

}

latA a lngA jsem si vytvořil - potřeboval jsem odlišit proměnné.

Nahlásit jako SPAM
IP: 89.190.90.–
NeregistrovanyHookyns
~ Anonymní uživatel
62 příspěvků
4. 6. 2016   #12
-
0
-

#11 Jorya
Zápis co jsem poslal já je z C# a je validní. Tohle jsem ve VB nikdy nezapisoval ale našel jsem takový zápis:

New With {Key poloha_y, Key poloha_x}
Nahlásit jako SPAM
IP: 77.95.192.–
NeregistrovanyHookyns
~ Anonymní uživatel
62 příspěvků
4. 6. 2016   #13
-
0
-

#12 NeregistrovanyHookyns
To je hloupost,..

Vyzkoušej něco z linku http://stackoverflow.com/questions/638216/vb-net-initialising-an-array-on-the-fly

Nahlásit jako SPAM
IP: 77.95.192.–
Jorya0
Newbie
30. 6. 2016   #14
-
0
-

Zabýval jsem se tím a stále se motám v kruzích. Povedlo se mi script osekat natolik, aby při načtení do Webbrowseru nehlásil chyby.

Ale stále se mi nedaří z Visual Basicu vyvolat v HTML dokumentu funkci. To spojení mi nechce fungovat. Jeden z návrhů co jsme měl, tak že by VB zapisovalo proměnné do externího souboru a script by si je pravidelně četl, ale to mi bylo rozmluveno, že může dojít k dost nepředvídatelným stavům, když se dva programy budou prát o jeden soubor.

Zároveň jsem koukal, že i seznam má svou API pro mapy.cz - ale zdá se mi to téměř to samé, takže tudy bych si asi nepomohl.

Není tu někdo kdo již Javascript propojoval s VB?

Nahlásit jako SPAM
IP: 89.190.90.–
Jorya0
Newbie
2. 7. 2016   #15
-
0
-

Nakonec se mi to povedlo vyřešit mnohem elegantněji.

Pokud se použijí tyto mapové podklady:

http://www.openstreetmap.org/#map=19/50.95201/10.03840

Tak stačí volat odkaz s aktualizovanými souřadnicemi. Stránka se neaktualizuje, jen se posouvá mapa.

Pokud by je potřeba získávat nadmořskou výšku dané oblasti, tak to lze z těchto stránek:

http://maps.googleapis.com/maps/api/elevation/xml?locations=49.1363861,17.4321673&sensor=false

Nahlásit jako SPAM
IP: 89.190.90.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 9 hostů

Podobná vlákna

Google — založil netman92

Google+ — založil D-Fox

Google — založil Zelenáč

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý