Szakmai és kevésbé szakmai bejegyzések webes térképekről, szoftverfejlesztésről, térinformatikáról meg csak úgy...
2010. március 25., csütörtök
Magassági adatok Google 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
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.2009. március 7., szombat
Tartalmazott pont lekérdezése és google maps kinézet egyszerű testreszabása
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)
A másik hasznos és egyben csinos újítás a 2.147-ben került be:
map.setUIToDefault();
Ö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
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.
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
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
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
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
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és
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