A következő címkéjű bejegyzések mutatása: javascript. Összes bejegyzés megjelenítése
A következő címkéjű bejegyzések mutatása: javascript. Összes bejegyzés megjelenítése

2010. március 25., csütörtök

Magassági adatok Google API

Hosszú idő után végre megtettek a Google Maps API fejlesztői egy nagyon logikus lépést. Lekérhetővé tették végre API-n keresztül is a tetszőleges koordinátához tartozó magasságot, megszületett az Elevation API.

Erre eddig is volt lehetőség, mégpedig a USGS) , a GeoNames vagy az EarthTools webszolgáltatás használatával.

A Google szolgáltatásának az előnye az eddigiekkel szemben, hogy batch feldolgozást is lehetővé tesz, amivel szépen lehet magassági profilokat, szinttérképeket készíteni útvonalakhoz. Ha ezt egy-két évvel hamarabb meglépi a Google, akkor a futoterkep.hu fejlesztésénél rengeteg keresgéléstől és kísérletezgetéstől szabadított volna meg bennünket.
Azt hozzátenném, hogy a helyzet nem olyan rózsaszín, mint ahogy az előzőekből látszik. Magyarán kitehetjük az ablakba (hogy ne használjak durvább kifejezést) a batch feldolgozást, mivel sajnos 25 000 pontot kérdezhetünk le egy IP-ről 24 órán belül. Ez ilyen formában a felhasználást erősen korlátozza, szóval épp azt veszi el tőlünk ami az előnye lenne.
Azt mondják a guglinál, hogy ezzel az API kiszolgáló túlterhelését akarják elkerülni. De számomra finoman szólva is hihetetlennek tűnik, hogy ne bírna kiszolgálni akárhány kérést, ami egyenként néhány bájtos JSON adatot bök ki és valószínűleg egyetlen adatbázismezőt olvas ki a szerver oldalon (vagy ki tudja hogy tárolják) az a szerverpark, ami mittudoménhánymillió térképkockát dobál szét a világ minden tájára másodpercenként.
A szolgáltatást igazán kipróbálni még nem tudtam, de hamarosan készítek valami egyszerű szinttérképcsináló kis alkalmazásocskát. Meg persze akkor már valószínűleg beoperálom a futótérképbe is, ha valami módot ki tudok találni a limit figyelembevételére.

Egyébként API nélküli magasságszámításra alkalmas oldal is van rengeteg, az egyik a roppant találó nevű LatLonToElevation néven érhető el (http://www.latlontoelevation.com/dem_consume.aspx), a többit rátok bízom.

2009. szeptember 16., szerda

Kontext menüvel bővült a Google Maps utility könyvtára


Jópofa eszköz, nem túl látványos, ellenben nagyon hasznos az asztali (vagy hogy mondják) programokhoz és a jobbklikkes menükhöz hozzászokott felhasználóknak a GMap2 APIhoz készített ContextMenuControl. Alapértelmezetten a leggyakoribb műveleteket teszi elérhetővé, természetesen opcionálisan ki is lehet kapcsolni egyes elemeket.
Egyelőre még csak a példaprogramokat nézegettem meg átfutottam a dokumentációt, de valószínűleg a forrásba is belepillantok, mert valószínűleg a bővítése nem túl ördöngös dolog.
Mondjuk például nem lenne butaság, ha az inverz geokódoló menü feldobná rögtön a buborékot. Persze nem ártana az sem, ha tudna más nyelveken is.

2009. április 29., szerda

Dictionary átadása webservice paraméterként

Időnként meglepően jó megoldásokba botlik az ember a .NET háza táján. Bármilyen valószínűtlenül hangzik is, lehetséges úgy hívni egy [ScriptService] -ként dekorált webszolgáltatást, hogy paraméterként egy Dictionaryt fogadjon.
A kliens oldalon ez gyakorlatilag egy vegyesfelvágott tömböt jelent, amit viszont a serializer szépen feldolgoz.
Ebben a postban kicsit részletesebben ki van bontva a téma és letölthető kód is fellelhető.

2009. április 4., szombat

Alámerülés a Google Maps-szel ( vagy -ben)

Régen írtam már bármit is a Google Maps háza táján feltűnő fejlesztésekről. Kicsit úgy vagyok a témával mint az úriemberek a nemi élettel ugye. Csinálom, de nem beszélek róla.
Most viszont számos olyan új dolog került be a Google Maps API-ba, illetve köré, amire felkaptam a fejem, ezért röviden karcolok valamit a számomra legérdekesebbekről.
Először is az Earth API újdonságok (innen jön a rendkívül szellemes cím is).
Az óceán sem akadály mától az APInak, hiszen ezután vidáman fújhatjuk a virtuális buborékokat Jacques Cousteau szellemével a tengeralatti túrákon a böngészőnkben.
Az óceán fenekénél is érdekesebb helyen, mégpedig a Marson is lehet az új verzióval járkálni.
A mostani frissítésben még egy dolog ragadott meg: a pluginnal is lejátszható KML tour. Ezen a területen még van némi elmaradásom, ugyanis szeretnék utánanézni, hogyan is lehet ilyen "túra-fájlt" készíteni. Biztos nem ördöngösség, csak erre is kéne egy kis idő.
Na ennyit a parasztvakításról :)
Kikerült még nemrégiben néhány hasznos kis open-source JS cucc, aminek hozzám hasonló hobbisták, de profi GMap buherátorok is hasznát vehetik.
Nekem leginkább a tabbed infowindow plugin tűnik hasznosnak, de lehet, hogy más a többit is jól tudja hasznosítani.

2009. március 7., szombat

Tartalmazott pont lekérdezése és google maps kinézet egyszerű testreszabása

A google maps újabb verziói ismét szolgálnak néhány hasznos aprósággal.
Ezek közül kettőt emelnék ki, amik nekem igen hiányoztak pl. a futótérkép építése közben.

Az egyik ilyen új függvény arra szolgál, hogy lekérdezhessük egy adott pontról, hogy benne van-e az adott tartományban vagy sem. Természetesen koordináták egyszerű vizsgálatával eddig sem volt ördöngősség kideríteni, de mégiscsak egyszerűbb meghívni a

bounds.containsLatLng(center)

metódust, mint koordinátákat hasonlítgatni. A függvény a 2.88-as verziótól elérhető.
A másik hasznos és egyben csinos újítás a 2.147-ben került be:

map.setUIToDefault();

Igen, ez a pontosan azt csinálja amire a neve utal, vagyis beállítja az alapértelmezett kinézetet egyetlen függvényhívással olyanra, mint a "nagy" Google Maps.
Összeütöttem egy kis példát a két újdonság felhasználásával. A térkép alatti üzenet jelzi, ha mozgatás után a marker kilóg a térképről.


Íme a kód lényeges része:

var map;

var center = new GLatLng(47.173378, 19.539185);

$(document).ready(function()

{

if (GBrowserIsCompatible())

{

map = new GMap2($("#GoogleMap_Div")[0]);

map.setUIToDefault();

map.setCenter(center, 10);

GEvent.addListener(map, "moveend", checkIsInView);

var myMarker = new GMarker(center);

map.addOverlay(myMarker);

checkIsInView();

}

});

function checkIsInView()

{

var bounds = map.getBounds();

var message = ";

if (bounds.containsLatLng(center))

{

message += "green;\">Benne van";

}

else

{

message += "red;\">Nincs benne";

}

message += "";

$("#message")[0].innerHTML = message;

}

2009. február 8., vasárnap

Geokódolás tipp a Google Maps-hoz

Az itt közzétett - véleményem szerint rendkívül hasznos - frissítés eredményeképpen geokódoláskor (gy.k. címkeresés :)) nem csak a középonti koordinátát kaphatjuk vissza, hanem az ajánlott befoglaló koordinátákat is.
Akkor látjuk hasznát ennek, ha geokódolás után szeretnénk ránagyítani az objektumra vagy már eredendően ezekkel a befoglalókkal szeretnénk inicializálni a térképet és mág ezer más esetben.
Nagyon hasznos lehet clusteringhez is.
Pusztavacs

Kézzelfoghatóan, például az ország közepének keresésekor (http://maps.google.com/maps/geo?output=jsonl&oe=utf-8&q=Pusztavacs,%20Hungary) a visszaadott JSON tartalmaz egy ExtendedData tagot, amelyben megtaláljuk a befoglalót:



{
"name": "Pusztavacs, Hungary",
"Status": {
"code": 200,
"request": "geocode"
},
"Placemark": [ {
"id": "p1",
"address": "Pusztavacs, Hungary",
"AddressDetails": {"Country": {"CountryNameCode": "HU","CountryName": "Hungary","AdministrativeArea": {"AdministrativeAreaName": "Pest","Locality": {"LocalityName": "Pusztavacs"}}},"Accuracy": 4},
"ExtendedData": {
"LatLonBox": {
"north": 47.2079051,
"south": 47.1073380,
"east": 19.6032050,
"west": 19.4464160
}
},
"Point": {
"coordinates": [ 19.5010859, 47.1712960, 0 ]
}
} ]
}

2008. december 9., kedd

Legutolsóként lefutó JS függvény

Nemrég szükségem volt rá, hogy egy bizonyos javascriptet úgy futtassak le egy usercontrolokat bőven tartalmazó MS-AJAXos ASPX oldalon, hogy MINDENKÉPPEN ő legyen a legutolsó.
Teljesen függetlenül attól, hogy esetleg itt-ott RegisterStartupScript metódusok vagy bármi egyéb megoldások az oldal részeiben most vagy később garázdálkodnak-e, én azt szeretném, ha nem borítanák meg a rendet.
Hosszas guglizás és kísérletezés után találtam egy többé-kevésbé kielégítő megoldást.
Azért csak többé-kevésbé, mert IE és FF esetében az elvárt módon működik, de sajnos opera alatt nem (mást meg sem mertem próbálni :)).


A kulcs az alábbi függvény:


function AddOnload(myfunc)
{
    if (window.addEventListener)
        window.addEventListener('load', myfunc, false);
    else if (window.attachEvent)
        window.attachEvent('onload', myfunc);
}


Ami ugye (kompatibilitási okokból kétféleképpen) feliratkozik az oldal onload eseményére.
Ezt próbáltam különböző módokon meghívni, hogy a kívánt eredményt kapjam.


Az első változat így nézett ki:



<html>
<head>
    <script type="text/javascript">
        function mymessage()
        {
            alert("onload event");
        }
 
        ...
        ...
 
        alert('inline');
        AddOnload(function() { alert('TheLastOne'); });
    </script>
</head>
<body onload="mymessage()">
    ... ...
</body>
</html>



IE-re már jó is volt. Először megjelent az inline kód, utána az online attribútumban megadott végül pedig az ominózus utolsó. FF esetében már sajnos nem ez volt a sorrend. Ott gyakorlatilag inline
függvényhívásként működött a dolog, szerintem helytelenül. Azután eltoltam a feliratkozást az oldal végére, ez a FireFoxot is rávezette arra, hogy mit is akarok tulajdonképpen. Mint említettem Operában továbbra sem jó ez a megoldás, de több időt nem szántam rá.
Őszintén szólva az IE és a FF a 99.9%-át lefedi felhasználóknak, tehát ennyiben hagytam a dolgot.



    1 <html>
    2 <head>
    3     <script type="text/javascript">
    4         function mymessage()
    5         {
    6             alert("onload event");
    7         }
    8 
    9         function AddOnload(myfunc)
   10         {
   11             if (window.addEventListener)
   12                 window.addEventListener('load', myfunc, false);
   13             else if (window.attachEvent)
   14                 window.attachEvent('onload', myfunc);
   15         }
   16     </script>
   17 
   18 </head>
   19 <body onload="mymessage()">
   20     ...
   21     ...
   22 </body>
   23 
   24 <script>
   25     alert('inline');
   26     AddOnload(function() { alert('TheLastOne'); });
   27 </script>
   28 </html>


Elég érdekes, hogy melyik böngésző hogyan értelmezte az utasítást.
A fenti kód lett a végső változat, amely FF és IE esetében egyformán utolsónak hívja a kívánt scriptet.

2008. november 13., csütörtök

jQuery intellisense tipp

FRISSÍTÉS:
Tegnap olvastam, hogy a Microsoft a VS2008-hoz megjelentette ezt a frissítést, ami lehetővé teszi, hogy trükközés nélkül használjuk a jQuery intellisense támogatást.

Kettővel ezelőtt írtam, hogy van már VS intellisense részére kommentelt jQuery.
Van egy okos trükk, hogy véletlenül se felejtődhessen benne a végső kódban a kommentekkel tűzdelt js állomány.

<script src="jquery-1.2.6.js" type="text/javascript"/>

<% if (false) { %> <script src="jquery-1.2.6-vsdoc.js" type="text/javascript"/>

<% } %>



A fenti módon inkludálva a scriptet az intellisense látni fogja, viszont rendereléskor nem kerül be az oldalba.
(A tipp az ASP.NET Debugging blogról származik)



2008. október 28., kedd

Intellisense jQuery támogatás a Visual Studiohoz

Nemrégiben röppent fel a hír, hogy a MS letette a voksát a jQuery függvénykönyvtár mellett.
Ennek jegyében a jQuerynél elkészítettek egy a VS számára kommentekkel ellátott verziót, amit az IntelliSense tud kezelni.


Letölthető innen:
1.2.6:
http://code.jquery.com/jquery-1.2.6-vsdoc.js
Latest release (jelenleg ugyanaz)
http://code.jquery.com/jquery-latest-vsdoc.js

Arra azért ügyeljünk, hogy ezek a kommentek nem kicsit hizlalták fel a függvénykönyvtárat. A végső verziókban ne felejtsd el lecserélni a kommentezett verziót a minified vagy a packed verzióra!

2008. szeptember 30., kedd

A jQuery és a Microsoft

Scott Guthrie írja, hogy a jQuery hamarosan bekerül a hivatalosan támogatott és terjesztett csomagok közé.
http://weblogs.asp.net/scottgu/archive/2008/09/28/jquery-and-microsoft.aspx
Már pedig ha ő mondja, akkor az úgy van :)

2008. augusztus 17., vasárnap

Hasznos apróságok a Visual Studio 2008 SP1-ben

Ahogy azt korábban írtam nemrégiben megérkezett a VS2008 SP1 végleges változata. Mostanra összegyűlt pár apróság, amit úgy gondoltam érdemes közzétenni.
Előrebocsátanám, miszerint lehet, hogy némelyik itt leírt feature már korábban is megvolt, csak én nem ismertem.

A JavaScript kódok formázásának támogatása az egyik olyan újdonság, amit már réges-rég időszerű lett volna, még akkor, mikor a VS fejlesztői a webes fejlesztés támogatását is bevették a kalapba. A 2008 kiadásával egy egész korrekt intellisense támogatáshoz juthattunk már hozzá, de ez még hiányzott. Igazából még mindig nem lehetünk elégedettek, mert nekem még mindig hiányzik a JS függvények ki-be csukásának lehetősége, ami ugye úgy a HTML, mint a C# vagy VB kódszerkesztőben időtlen idők óta fellelhető.
A szükséges beállítások nem meglepő módon a Tools > Options > Text editor > JScript alól érhetőek el.

Hasonlóan érthetetlen módon eddig a kódkommentekben levő TODO elemeket csak a megnyitott fájlokból volt hajlandó kiolvasni. Én személy szerint szerettem volna együtt látni minden ilyen bejegyzést, ez azonban egy nagyobb projekt esetében meglehetősen problémás lett volna. Az SP1 után nincs ennek akadálya.

Aki szereti pl a Firefox keresési módszerét előnyben részesíteni, annak lehet jó a ctrl+i billentyűkombináció, ami az inkrementális keresést teszi lehetővé az éppen aktuális fájlban. Magyarul, a beírással párhuzamosan keres rá a szövegrészletre.


Egy másik apróság a megnyitott fájlok közötti navigációra ad egy alternatívát. A crtl+tab helyett használhatjuk a ctrl+alt+down (lefelé nyíl) kombót, ami egy kicsi csinos forráslista nézetet ad nekünk.