Drupal a mapy: nový a jednoduchý způsob implementace

Když jsem si o víkendu stavěl nový web, chtěl jsem sáhnout po osvědčené dvojici modulů Gmap a Location. Ale ouha, na stránce Gmap je zmínka o tom, že existuje jen ze setrvačnosti. Sáhl jsem tedy po doporučených alternativách a rozhodně nelituji.

Reklama

Na Drupalu 6 jsem postavil řadu webů, které obsahují propojení na Mapy Google, a to jak přímo u jednotlivých uzlů, tak ve formě View zobrazujícího na mapě místa odpovídající vybraným uzlům. Asi nejznámější z těchto webů jsou www.fototipy.cz. Několik webů s podporou map jsem postavil i na Drupalu 7.

Vždycky jsem používal kombinaci modulu Location pro zápis adresy a modulu Gmap pro propojení na mapy od Google. Až na výjimky to bylo spolehlivé řešení, byť třeba existence samostatného formulářového pole pro adresu a téhož ve formě klasického doplňkového políčka v Drupalu 7 mě neuvěřitelně mátla a vytáčela. Navíc konfigurace tohoto řešení nebyla zrovna nejrychlejší. Bylo třeba nastavit propojení na Google, zpracování adres do podoby souřadnic a mnoho dalšího.

Gmap pro Drupal 7 je navíc stále označen jako vývojová verze, přestože je možné jej vcelku bez problémů používat. Když jsem o víkendu připravoval nový web Webkamery Chorvatsko.cz, tak jsem si na stránce Gmap všiml zmínky o tom, že tento modul je „legacy”. Pro stavbu nového webu tedy signál, že by se mělo uvažovat o novém řešení. Hned jsem proto vyzkoušel doporučované moduly a v tomto článku vám ukážu, jak s nimi pracovat.

Drupal a Mapy Google

Předpokládejme následující zadání: připravujete web, kde uzly vybraného typu budou mít políčko na vložení adresy. Při zobrazení uzlu chcete tuto adresu zobrazit ve formě malé mapky. Někde jinde na webu byste pak chtěli umístit mapu se seznamem všech adres, které jsou na webu vloženy. Web samozřejmě poběží na Drupalu 7.

Takové univerzální zadání lze aplikovat třeba na oba weby, které jsem odkázal výše, stejně jako na různé katalogy, články o cestování a podobně. Co tedy budete potřebovat za moduly?

  • Address Field - modul poskytující nový typ políčka sloužícího pro standardní zápis adresy
  • Geofield - políčko pro vkládání souřadnic, vbalíčku najdete i modul Geofield Map zobrazující souřadnice na mapě, zapněte jej též
  • Geocoder - speciální modul umožňující automaticky překódovat adresu na souřadnice
  • geoPHP - podpůrný modul pro práci sgeo souřadnicemi
  • Views + Chaos tool suite - klasická kombinace pro výpis filtrovaných dat vDrupalu 7

Na první pohled se může zdát, že zde máme více modulů než v případě kombinace Gmap + Location. Ovšem ty byly také rozděleny na několik submodulů, takže ve výsledku je to stejné, ne-li nepřehlednější. Navíc ta nová koncepce mi přijde i vzhledem k názvům modulů přímočařejší a otevřenější pro další zpracování.

Vkládání adres do Drupalu

Po instalaci a zapnutí zmíněných modulů pokračujte tím, že vytvoříte nový typ obsahu, nazvěme jej třeba Výlet. Přidejte do něj následující políčka:

  • Adresa - typ políčka Postal address, widget Dynamic Address Form. V nastavení můžete upřesnit, že jediná dostupná bude Česká republika, zatrhněte ukrytí dalších zemí, Českou republiku nastavte do výchozí hodnot a nastavení uložte.
  • Souřadnice - typ políčka Geofield, widget Geocode from another field. V upřesňujícím nastavení zvolte, že chcete souřadnice vypočítat z políčka Adresa, a to pomocí Google Geocoderu (nebo zkuste i jiné). Další nastavení není třeba v tuto chvíli měnit.

Drupal a Google Maps

Tím jste hotovi a můžete nastavit zobrazení. U typu obsahu Výlet se tedy přepněte na položku Správa zobrazení a přidejte si zobrazení Celého obsahu. Pak se na něj přepněte a pro políčko Souřadnice nastavte, že jej chcete zobrazit jako Geofield Map. Po stisku ozubeného kolečka pak můžete upravit vzhled mapy.

Drupal a Google Maps

Zobrazení uzlů na mapě

Přidejte nyní několik záznamů pomocí typu obsahu Výlet a podívejte se, zda u nich zobrazení adresy na mapě funguje. Pokud jste postupovali podle návodu, mělo by být všechno bez problémů. Všimněte si, že pole Souřadnice v editaci výletu nikde nefiguruje. Díky modulu Geocoder je skryté a samo se naplní souřadnicemi dle zadané adresy.

Drupal a Google Maps

Pokud vám nevyhovuje výchozí zoom mapy, vraťte se do Správy zobrazení a upravte nastavení políčka Souřadnice.

Drupal a Google Maps

K dokončení našeho pomyslného úkolu zbývá poslední část, a sice vytvoření pohledu pomocí modulu Views, který by zobrazoval na jedné mapě všechna místa zadaných výletů. Přes Struktura > Views > Add new View přidejte nový pohled založený na obsahu typu Výlet a jako formát zobrazení (Display format) mu zadejte Geofield Map. Políčko pro nastavení počtu záznamů nechejte prázdné, protože na mapě chceme zobrazit úplně vše.

V upřesňující definici View pak přidejte políčko Souřadnice. Poté klepněte na odkaz Nastavení vedle Geofield Map a sdělte pohledu, že jako zdroj dat bude soužit políčko Souřadnice a jako Popup text políčko Title (tedy název výletu). Ve zbylém upřesňujícím nastavení tohoto dialogu zase upřesněte zoom mapy a její další vlastnosti. Po uložení byste už v náhledu měli vidět budoucí výsledek.

Drupal a Google Maps

Uložte tedy celé View a podívejte se na adresu, kterou jste ve View definovali pro zobrazení mapy. Pokud jste místo stránky definovali blok, tak jej umístěte do nějakého regionu a podívejte se na jeho zobrazení. Výsledek by měl vypadat nějak takto:

Drupal a Google Maps

Jako doplňkové cvičení si můžete zkusit upravit obsah bubliny zobrazované po kliknutí na špendlík v mapě. Vraťte se do editace View s mapou, přidejte políčka, která chcete v bublině na mapě zobrazit (třeba obrázek, adresu, popisek, cokoli jiného) a nakonec políčko Global: Vlastní text. Do něj můžete vložit libovolný HTML obsah a také nahrazovací vzorky, které tam umístí obsah před chvílí přidaných políček. V nastavení Geofield Map pak určete, že v bublině nechcete zobrazovat nadpis (Title), ale právě políčko Global: Vlastní text (objeví se jako nothing). View uložte a vyzkoušejte.

Tagy: 

Reklama

Komentáře

Díky za super článek, přesně jste se trefil do toho, co budu v brzké době potřebovat.

Ještě mám dotaz, dá se nějak pořešit, aby se zadání adresy dalo vybrat a zadat buď pomocí adresy nebo pomocí GPS souřadnic, abych mohl zadávat i místa, které nemají adresu?

Ve spojení s modulem OpenLayers a buď poslední dev verzí Geofield nebo patchem odtud http://drupal.org/node/1627940 by to mělo jít. Ale ještě jsem nezkoušel. Pokud se k tomu dostanete dříve než já, budu rád za info.

Majitel Maxiorla. Nabízím mimo jiné placené poradenství pro Drupal. Jsem i na Twitteru.

Díky za doplnění. Vzykouším snad do konce týdne a určitě dám výsledek vědět.

Tak jsem se konečně dostal k tomu abych to všechno zkusil a zatím se mi nepodařilo rozchodit ani mapy. Zobrazuje se mi chyba: Fatal error: Class 'geoPHP' not found in /data/web/virtuals/16247/virtual/www/sites/all/modules/geophp/geophp.module on line 54
Zkoušel jsem moduly odistalovat, a znovu naistalovat, ale bez úspěchu :(

Tak jsem se konečně dostal k tomu abych to všechno zkusil a zatím se mi nepodařilo rozchodit ani mapy. Zobrazuje se mi chyba: Fatal error: Class 'geoPHP' not found in /data/web/virtuals/16247/virtual/www/sites/all/modules/geophp/geophp.module on line 54
Zkoušel jsem moduly odistalovat, a znovu naistalovat, ale bez úspěchu :(

Případně se zobrazí chyba: Fatal error: Class 'Point' not found in /data/web/virtuals/16247/virtual/www/sites/all/modules/geocoder/plugins/geocoder_handler/google.inc on line 67, navíc se chyby zobrazují náhodně, v různých částech webu i tam kde se s moduly vůbec nepracuje :(

Případně se zobrazí chyba: Fatal error: Class 'Point' not found in /data/web/virtuals/16247/virtual/www/sites/all/modules/geocoder/plugins/geocoder_handler/google.inc on line 67, navíc se chyby zobrazují náhodně, v různých částech webu i tam kde se s moduly vůbec nepracuje :(

Takový dotaz - máte tam to GeoPHP dokopírované?

Majitel Maxiorla. Nabízím mimo jiné placené poradenství pro Drupal. Jsem i na Twitteru.

Ano mám, zkoušel jsem knihovnu i vymazat a znovu nahrát, pořád to samé.

Tak se s tím peru již půl dne a nedaří se mně to rozchodit. Usoudil jsem, že je problém v geoPHP, protože jakmile nainstaluji tento podpůrný modul (knihovnu) a spustím update.php, tak to hodí:Fatal error: Class 'geoPHP' not found in /data/web/virtuals/26818/virtual/www/sites/all/modules/geophp/geophp.module on line 54 

Jakmile ho odinstaluju tak update.php normálně jde. 
Jinak když udělám přesně vše podle vašeho návodu chová se to úplně stejně jak popsal kolega výše.

Tak aktuální diskuze k problému je zde: 
http://drupal.org/node/1759520   Asi to dělá nová verze modulu

Zkoušel jsem jak aktuální, tak dev, bohužel to asi bude opravdu chyba modulu, protože se mi s tím hnout nepovedlo.
Zkusím vyčkat na další verzi dev verze.

Jestli Vám to pořád nefunguje, tab by to chtělo napsat do fóra na drupal.org, viz adresu co jsem vkládal výše, aby to někdo řešil.
A co máte za hosting? Já wedos, ještě mě napadá jestli to nemůže být zas nějaké nastavení např v htacces souboru

Zde je odkaz na funkční verzi, kterou používám ve spojení s hostingem na HostGatoru. Stačí rozbalit do rootu webu.

Majitel Maxiorla. Nabízím mimo jiné placené poradenství pro Drupal. Jsem i na Twitteru.

Díky, ale pořád je to to stejné. Po nainstalování geoPHP mně to hází v různých sekcích webu: Fatal error: Class 'geoPHP' not found in /data/web/virtuals/26818/virtual/www/sites/all/modules/geophp/geophp.module on line 54 

Takže je problém někde jinde, buď se to hádá s jiným modulem, nebo v hostingu, nebo nevím :-)
Já tedy zůstanu u gmap + location, ikdyž toto řešení by bylo asi lepší

Ano taky používám Wedos, takže by mohl být problém v nastavení hostingu ...

Hm tak to by mohlo být ono nic jiného mě nenapadá, než že to bude v nastavení Wedosu. Každopádně gmap+location funguje, takže jak sem psal výše zůstanu u toho.

Dobrý den všem :)
Nepřišel už někdo z vás na to, jak toto všechno rozchodit pod Drupalem hostovaném na WEDOSu?

Dle nejnovější zkušenosti (dnešek) již vše funguje zřejmě dobře, viz www.brnomasaze.cz. Konfigurace: tarif noLimit Extra, neomezené aliasy, geocoder 7.x-1.2, Geofield Map 7.x-2.0-alpha2+2-dev, geophp 7.x-1.7, OpenLayers 7.x-2.0-beta3, Address Field 7.x-1.0-beta3, Geofield 7.x-2.0-alpha2+2-dev.

Majitel Maxiorla. Nabízím mimo jiné placené poradenství pro Drupal. Jsem i na Twitteru.

Mám úplně stejný problém. Vyřešil jste ho nějak?

A šlo by nějak řešit aby se pole souřadnic načetlo z adresy a jen když není adresa šlo vybrat přes výběr bodu?

Přesně tak jsem to měl na mysli, aby se dalo zadat jedno nebo druhé. Bohužel nemohu nic vyzkoušet, protože nemohu moduly rozchodit :(

Přátelé, trochu se v tom ztrácím. Nejde vám rozchodit to, co popisuju v článku? Vzhledem k tomu že mi to šlape bez problémů, mohu dát někam do ZIPu zabalené verze modulů a knihovny, se kterými mi to funguje.

Majitel Maxiorla. Nabízím mimo jiné placené poradenství pro Drupal. Jsem i na Twitteru.

Pokud by to šlo někam uploudnout tak bych to vyzkoušel. Já to nemůžu rozchodit a vyzkoušel jsem už hodně možností. Dokonce jsem si psal s tvůrcem modulu a předchozí verze geoPHP 1,5 obsahovala bugy tak včera byla vypuštěna nová verze 1,6 ale ta zas hází jiné chyby :-)

To co ukazujete ve článku jsem rozběhal. Podařilo se mi rozběhat i zjištění souřadnic přes spojení modulu OpenLayers a poslední dev verze Geofield.Uživatelsky to teda moc přívětivé nebylo a zkouším ještě hledat jiné řešení. To co mě však nadále nejvíc trápí je jak řešit aby se pole souřadnic načetlo z adresy a jen když není adresa šlo vybrat přes výběr bod.

Tak už jsem to rozchodil. Ještě mi chybí taková drobnost. Ty značky na mapě - tuším "markers". Nemáte někde odkaz, na návod jak je změnit(vybrat jiný obrázek)? Nejlépe třeba v závislosti na taxonomy. Projel jsem Drupal.org a nic. Předem děkuji za tip.

řešil jsem pro jednu cestovku při vkládání jednotlivých článků jak to jednoduše propojit na google mapy - stejný námět jako je tento článek. Vyřešil jsem to modulem http://drupal.org/project/simple_gmap . Přidal jsem si jedno jediné pole při vydávání článku kde si zákazník napíše stejný text jako když hledá na gmapách - ulice-číslo pop. - čárka - město - čárka - stát. Jenže zákazník chtěl zadávat mapu podle GPS. Nastavil jsem vše dle popisu tady a začal zápasit s nadstavbou na GPS. Vše je moc složité.  Po x hodinách jsem zjistil že starý modul umí vygenerovat mapu nejen když tam vložím adresu. Na google mapách si najdu to místečko co chci co nemá ulici a č.p., a na to místo položím kurzor myši. Pravou klávesou myši se zeptám na otázku "Co je tady?" a google mi do adresního řádku hodí GPS souřadnice  mé zahrady, konkrétně hrušky co mám na zahradě. V poli článku místo adresy hodím tyto GPS čísla. K článku se mi hodí mapa a v tomto případě místo zelené bubliny zelená šipka. Velmi jednoduché, multifunkční (jak adresa tak GPS) a pro vysvětlení pro zákazníka jednoduché ;))))

Podporuje modul Simple Google Maps také Views?

Majitel Maxiorla. Nabízím mimo jiné placené poradenství pro Drupal. Jsem i na Twitteru.

Tak daleko jsem se nedostal. Když si vytvořím nové Views to nové pole vidím, lze s ním pracovat a měnit parametry, přidávat k tomu další pole jako hlavní obrázek atd.... ale nevím zda to lze tak excelentně propojit aby se všechny zobrazené body vložily na jednu mapu..... Mně hlavně se líbí ta multifunkčnost na adresu nebo GPS a jednoduchost vkládání pro zákazníka

Je to jednoduché a asi už nic jednoduššího neexistuje. Milan

Nevíte, jestli náhodou do mapy nejdou přidávat i vlastní značky. Nějak jsem to v tomto modulu nenašel. Děkuji D.

Jde to, ale myslím, že jsem to na webu, kde jsem to použil, řešil nějak pomocí kódu.

Majitel Maxiorla. Nabízím mimo jiné placené poradenství pro Drupal. Jsem i na Twitteru.

Schopnost předávat jednotlivé body do společné mapy pomocí views je báječná věc. Co mě ale mrzí je, že nelze změnit obsah bubliny u výchozí mapy. Alespoň jsem na to nenašel žádný nástroj. Jistě i změna špendlíku by potěšila. Ovšem vystačit si jen s názvem článku v bublině je mrzuté. Druhou potíž (ktero se mi nedaří vyřešit) je, že když přidám více bodů na mapu v rámci jednoho uzlu (nastavení na neomezený počet) tak se mi s každou editací uzlu cnutí nový bod na mapě. tedy pokud jak je v návodu uvedeno napočátku zvolím jako primární nějakou zemi. A pokud ji nedej bože dám skrýt budou se mi přidávat body automaticky při každé editaci uzlu.

Uživatelsky nepříjemné ALE ne nepřekonatelné :o) Víc mi schází "marmeláda" do bublin.

Měl by někdo nějaké řešení? .. je někdo dál?

Děkuji M.

Mám více bodů (adres) v jednom městě, ale na přehledové mapě se mi zobrazuje jen ten nejstarší. Novější se nezobrazí. nechci tam dávat přesnější adresy, čím by to asi šlo eliminovat, jen prostě město. nepomáhá ani přiblížení mapy. Dá se to nějakým nastavením změnit?

No, když zadáte všechno pouze jako Brno, například, tak to hodí špendlík do prostředku města. S tím nic neuděláte.

Majitel Maxiorla. Nabízím mimo jiné placené poradenství pro Drupal. Jsem i na Twitteru.

Potreboval by som na svoje stránky presne to, čo popisujete, stiahol som si tie moduly a prešiel to krok za krokom, ale bohužiaľ toto je nefunkčná konfigurácia. Sedím nad tým už asi 15 hodín za tri dni, ale mapu na stránke to nechce a nechce zobraziť. Jediné k čomu som sa dopracoval je to, že mi výlety zobraí na hlavnej stranke vo forme textu a to je tak všetko. Neexistuje nejaký jednoduchší spôsob ako sa to dá spraviť? Okrem toho, že som si zasvinil stránku kadejakým svinstvom z modulov, to teraz permanentne hádže chybové hlašky a to je tak celý úspech.

Přidat komentář