Tag Archive | API

SMHI väder API

Förra veckan satt vi ett gäng på SMHI i Norrköping och pratade om QGIS och då presenterade bland annat SMHI lite av sin verksamhet och tjänster.

Den absolut vanligaste API tjänsten är tydligen ”punktprognosen” 10 dygn framåt. Läs mer…

Google API försvinner

Google har förvarnat om att deras API för Google Earth läggs ned från och med årsskiftet 2015/2016 (länk).

Exakt vad detta betyder har jag inte helt klart för mig, mer än att alla som tillverkat mjukvaror, eller främst webbsidor, som baseras på Google Earth API måste vidta åtgärder före dess, eller drabbas av program som slutar att fungera.

Använder du idag en mjukvara eller webbtjänst som visar saker i 3D miljö så bör du också kontrollera om det är baserat på detta API eller ej. Om så är fallet och programmet/sidan är viktigt för dig så är det dags att kontrollera om leverantören har en uppdatering på gång eller om det finns något annat alternativ på marknaden.

Problemet är att det krävs ett tillägg eller plug-in till webbläsaren för att det skall fungera, vilket innebär problem med olika webbläsare och versioner av dessa. Det som till slut fick Google att lägga ned var säkerhetsproblem i NPAPI (som tillägget bygger på) vilket fått Chrome och Firefox att besluta om att sluta stödja detta. Om ingenting görs så skulle dessa webbläsare sluta fungera med tillägget, och säkert flera andra som följer efter.

Det vanliga Google Earth programmet går lite på sparlåga också och har inte uppdaterats på jättelänge.

Nu tror jag inte att Google kommer att överge möjligheten att baka in 3D i webbapplikationer, eller dedicerade 3D program heller, men det kommer nog att ta ett litet tag innan det dyker upp någon ersättare. Då är det tur att det redan finns alternativ som man kan titta närmare på.

CesiumLogoCesium är Javascript och fungerar i stort sätt alla webbläsare (även mobila klienter), utan att tillägg behöver installeras. Det baseras på WebGL (HTML5, canvas, DOM) och har faktiskt betydligt många fler möjligheter än Google Earth API, men inte inte alla de data som kom på köpet med Google Earth. Detta ser jag dock inte som ett problem, då istället Cesium gladeligen tuggar i sig det mesta i dataväg man pekar ut. Vill du se exempel på vad som går att göra med Cesium så kan du kolla på den här länken. Jag gillar speciellt ”Cesium Sandcastle” där det går att laborera med kod direkt och visualisera olika möjligheter.

Men vad kommer att hända med Google Maps API? Många kommuner, åtminstone i Småland, använder detta på sina hemsidor för att visa kartor… Kommer dessa också att sluta fungera?

Det ärliga svaret är ”jag vet inte”. Inte på grund av att Google Earth API försvinner, men sedan beror det lite på vad det är för typ av tjänst man använder. Använder man Google Maps API v2 så är man illa ute då detta lades ned för två år sedan och ersattes av API V3.

Har man sedan egna lager ovanpå Google Maps där man använder Google Maps Engine, så kommer man också att få problem framöver (länk). Om ett knappt år (Januari 2016) så slutar man nämligen stödja detta med.

Jag tror nu inte att Google håller på att lämna kartarenan på något sätt. Det är en alldeles för stor och viktig marknad. Något kommer att komma istället för det som nu försvinner, men om det sedan passar eller kommer i tid? Det är en annan fråga.

Hade jag varit kart- eller GIS-ansvarig i en kommun (eller motsvarande) och använde mig av Google på kommunens hemsida (exempelvis), så skulle jag planera in lite tid för att kontrollera vilka eventuella åtgärder som behöver vidtas det närmaste året. För många så betyder det säkert ingenting, men handen på hjärtat. När kontrollerades tjänsterna (eller avtalen med konsultfirman) senast?

GeoServer och Google API

I går visade jag hur enkelt det är att lägga till Google Maps på en egen hemsida via deras API.

Idag skall jag visa att det är lika enkelt att lägga till ett eget lager med geodata från GeoServer.

Jag använder det lager med fotografier som jag använt tidigare med min GeoServer och lägger till två rader till koden från förra inlägget.

var georssLayer = new google.maps.KmlLayer('http://MIN_GEOSERVER:8080/geoserver/wms/reflect?layers=MITT_LAGER&format=rss');
georssLayer.setMap(map);

Raderna infogas i <script> taggen efter raden som börjar med: var map = new google.maps.Map(…

Ersätt MIN_GEOSERVER med din GeoServers IP adress och MITT_LAGER med det lager som du vill visa.

Eftersom både GeoServer och Google API stödjer GeoRSS så blir det som synes mycket enkelt att få det att fungera.

Resultatet ser du nedan:

Vill du testa direkt så kan du göra det via min GeoServer på denna länk. Du kan även testa den här länken för att se geocacher i Jönköpings län (för att visa att det även fungerar med ganska många punkter).

Slutsatser

Nu har jag satt upp en egen GeoServer och lagrar geodata i en PostGIS databas.

Jag administrerar och uppdaterar data med Quantum GIS, men låter användarna uppdatera och lägga till vissa data via formulär på hemsidan.

Jag kan presentera data via en egen WMS/WFS-T tjänst och GeoServer till mer avancerade användare, men utåt så presenterar jag data med GeoRSS via Google API på en hemsida som alla kan komma åt.

Allt använder samma datakälla och uppdateringar går blixtsnabbt.

Vad har det kostat? Inte en krona!

Läs mer i ”Testa Själv” ovan.

En karta med Google API på din hemsida

Koden nedan är i stort sett allt du behöver för att skapa en karta på din hemsida. Det enda du behöver komplettera med är en egen Google API nyckel som du kan hitta här. [Red: Sedan V3 av API krävs inte längre någon nyckel]

<!DOCTYPE html>
 <html>
 <head>
 <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
 <style type="text/css">
 html { height: 100% }
 body { height: 100%; margin: 0; padding: 0 }
 #map_canvas { height: 100% }
 </style>
 <script type="text/javascript"
 src="http://maps.googleapis.com/maps/api/js?key=DIN_API_NYCKEL&sensor=true">
 </script>
 <script type="text/javascript">
 function initialize() {
 var myOptions = {
 center: new google.maps.LatLng(57.666, 14.971),
 zoom: 15,
 mapTypeId: google.maps.MapTypeId.HYBRID
 };
 var map = new google.maps.Map(document.getElementById("map_canvas"),
 myOptions);
 }
 </script>
 <title>En egen karta med Google Maps API</title>
 </head>
 <body onload="initialize()">
 <div id="map_canvas" style="width:100%; height:100%"></div>
 </body>
 </html>

När du fixat din API nyckel så klistrar du in den (och ersätter texten) där det står DIN_API_NYCKEL, sedan är det bara att spara som htm fil och köra i en webbläsare, och det behövs inte ens en webserver.

Vill du testa direkt så klicka på denna länk så öppnas filen på min webserver.

Sedan är det bara att ändra och bygga ut filen så att den passar ditt behov.

Håll i dig nu…

Det är nämligen precis lika enkelt att skapa en karta med API för Google Earth i 3D!

<html>
<head>
 <title>Sample</title>
 <script type="text/javascript" src="https://www.google.com/jsapi?key=DIN_API_NYCKEL"> </script>
 <script type="text/javascript">
 var ge; google.load("earth", "1");
function init() {
 google.earth.createInstance('map3d', initCB, failureCB);
 }
function initCB(instance) {
 ge = instance;
 ge.getWindow().setVisibility(true);
 }
function failureCB(errorCode) {
 }
google.setOnLoadCallback(init);
 </script>
 <title>En egen karta med Google Earth API</title>
</head>
<body>
 <div id="map3d" style="height: 100%; width: 100%;"></div>
</body>
</html>

Lägg till ditt Google API och spara som htm och öppna i en kompatibel webläsare. Även denna funktion kan du testa via min webserver på denna länk.

På Googles hemsida finns både referenser och exempel på hur du bygger på med ytterligare funktionalitet, så det är bara att sätta igång.

[EDIT]

För version 3 av Google API så behövs det inte längre någon nyckel, det är bara att stryka key=och_din_nyckel i koden. Jag har uppdaterat länkarna till en ny server som fungerar dessutom.