• No results found

Karttill¨ampningar f¨or rikst¨ackande accessn¨at Map applications for nationwide access net

N/A
N/A
Protected

Academic year: 2021

Share "Karttill¨ampningar f¨or rikst¨ackande accessn¨at Map applications for nationwide access net"

Copied!
59
0
0

Loading.... (view fulltext now)

Full text

(1)

Detta examensarbete har genomf¨orts i samarbete med DGC.

Handledare p˚a DGC: Paul Weingarten och Bj¨orn ¨Osterman.

Karttill¨ampningar f¨or rikst¨ackande accessn¨at Map applications for nationwide access net

Johan Camling Fredrik L¨ onnegren

Examensarbete inom Datorteknik Grundniv˚a, 15 hp Handledare p˚a KTH: Jonas W˚ahsl´en Examinator: Ibrahim Orhan Skolan f¨or teknik och h¨alsa TRITA-STH 2013:73 Kungliga Tekniska H¨ogskolan Skolan f¨or teknik och h¨alsa 136 40 Handen, Sweden http://www.kth.se/sth

(2)
(3)

Sammanfattning

Denna rapport ˚aterger arbetsprocessen kring att utv¨ardera geografiska tj¨anster, och att utveckla karttill¨ampningar f¨or n¨atverk av rikst¨ackande om- fattning. Arbetet utf¨ordes p˚a plats hos DGC, en datakommunikations-, tele- och n¨atoperat¨or som distribuerar kundf¨orbindelser i hela Sverige d¨ar konsu- menter ansluts till stamn¨atet.

Uppgiften bestod av att utv¨ardera m¨ojligheter till att sl˚a upp koordinater f¨or etablerade kundplatser, rita ut accessn¨atet i ett kartgr¨anssnitt och ta fram ett eller flera st¨odverktyg f¨or bland annat orderprocesser.

Anv¨andningsfall utifr˚an ¨onskem˚al, arkitekturm¨onster samt analys av yttre leverant¨orers tj¨anster f¨or geocoding avgjorde hur det slutgiltiga systemet var utformat. Mjukvaran som utvecklades integrerades b˚ade i befintliga system och som ensamst˚aende till¨ampningar. En publicering/release genomf¨ordes som avslutande moment i arbetet.

I rapporten beskrivs hur kartl¨aggning gjordes med hj¨alp av KML, hur geogra- fisk data hanterades, utformningen av ¨overvakningsverktyget som framtogs samt hur koordinater f¨or adresser h¨amtades.

(4)
(5)

Abstract

This thesis describes the process of analyzing and evaluating geographic ser- vices, and the development of map applications for nationwide networks.

The project was performed at DGC, a datacommunications-, telephony- and networks operator which distributes customer access across Sweden where consumers are connected to the backbone network.

In whole, the task consisted of an analysis regarding the possibilities of address-to-coordinate lookup for established customer sites, displaying the access network in a map interface and developing one or more tools, aimed at supporting order processes.

Architecture patterns, use-cases construed from user requests and analysis of external provider services for geocoding determined the design of the so- lution. Software was partially integrated in existing systems, and partially distributed as stand-alone applications. The product was finalized with a re- lease.

Read further to get a description of the monitoring tool, network mapping with KML, dealing with geographic data, and also the process of fetching coordinates for addresses.

(6)
(7)

F¨ orord

Vi vill passa p˚a att ge ett stort tack till Paul Weingarten och Bj¨orn ¨Osterman f¨or det st¨od och samarbete som vi hade i projektet.

Vi har med hj¨alp av er f˚att en djupare f¨ors˚aelse i distribuerade system, SQL och programutveckling i bland annat .NET.

Vi vill g¨arna ge ett snabbt tips till l¨asaren om teckenf¨orklaringen som inleder rapporten: som h¨anvisning till n˚agra av de termer och f¨orkortningar som anv¨ands i texten.

Ocks˚a ett stort lycka till, till Thomas Lundberg och Alexander Heimonen som p˚ab¨orjade sitt examensarbete, ocks˚a p˚a DGC, knappt fyra veckor efter att vi hade startat.

(8)
(9)

Teckenf¨ orklaring

.NET - Microsofts platform

AJAX - Asynchronous Javascript And XML API - Application Programming Interface CLR - Common Language Runtime DAL - Data Access Layer

MVVM - Model View Viewmodel

WCF - Windows Communication Foundation WPF - Windows Presentation Foundation XML - Extensible Markup Language

XAML - Exstensible Application Markup Language

Webservice - En tj¨anst som anropas f¨or att f˚a data genom antingen REST- f¨orfr˚agningar eller SOAP-anrop

REST - Representational State Transfer SOAP - Simple Object Access Protocol

Caching - Processen att spara data i minnet f¨or en applikation KV - Key-value-par

DB/Db - Databas

SQL - Structured Query Language

Parsing - Processen att tolka information ur ett svar fr˚an t.ex en webservice GPS - Global Positioning System

GIS - Geographic Information System OSM - Open Streetmap

KML - Keyhole Markup Language KMZ - Keyhole Markup Zip TDD - Test Driven Development

(10)
(11)

Inneh˚ all

1 Inledning och bakgrund 1

1.1 F¨oretagsbeskrivning . . . 1

1.2 Projektbeskrivning . . . 1

1.2.1 M˚alformulering . . . 2

1.2.2 Avgr¨ansningar . . . 3

1.2.3 L¨osningsmetoder . . . 3

1.3 Nul¨agesbeskrivning . . . 4

1.4 Summering . . . 4

2 Teoretisk referensram 5 2.1 Geodesi . . . 5

2.1.1 Latitud och longitud . . . 5

2.2 Geocoding . . . 5

2.3 Datatypen Geography . . . 6

2.4 KML och KMZ . . . 6

3 F¨orstudie 7 3.1 Externa geografitj¨anster . . . 7

3.2 Geocoding, licensiering och persistent datalagring . . . 8

3.2.1 Google Maps APIs . . . 8

3.2.2 Bing Maps Platform APIs . . . 9

3.2.3 Yahoo! Maps API . . . 10

3.2.4 MapQuest . . . 10

3.2.5 Nominatim . . . 11

3.3 Tillf¨orlitlighet av uppslag . . . 11

3.3.1 Google . . . 11

3.3.2 Bing . . . 12

3.3.3 MapQuest . . . 12

3.3.4 Nominatim . . . 12

4 Genomf¨orande 13 4.1 Tredjepartstj¨anster . . . 13

4.1.1 Val av tredjepartsleverant¨orer . . . 13

4.2 Arkitektur . . . 14

4.2.1 Geocoding Service . . . 14

4.2.2 Geofinding Service . . . 14

(12)

4.2.3 Webbvy med modell . . . 14

4.2.4 DbSeeder . . . 15

4.3 Geocodes fr˚an extern leverant¨or . . . 15

4.3.1 J¨amf¨orelse med viktade v¨arden . . . 15

4.3.2 Parsing . . . 17

4.3.3 Confidence-filter . . . 17

4.3.4 Cache . . . 19

4.4 Lagring av positionsdata . . . 20

4.5 WPF . . . 21

4.6 Webbvyer . . . 22

4.6.1 Javascriptmodulen geo.js . . . 22

4.6.2 Overvakning . . . .¨ 23

4.7 Publicering . . . 24

4.7.1 Beslut om geocoding . . . 24

4.7.2 Tillkomna st¨od med tillh¨orande licenser . . . 25

4.7.3 Verktyg . . . 25

5 Interna ¨onskem˚al 26 5.1 Kundportal . . . 26

5.2 Vy med huskroppar . . . 26

6 Resultat 27 6.1 Geocode service . . . 27

6.2 Anv¨andargr¨anssnitt i form av kartor . . . 27

6.2.1 Overvakningsvy . . . .¨ 28

6.2.2 Kundvy . . . 28

6.2.3 KML i Google Earth . . . 28

6.3 Enhetstestning och dokumentation . . . 29

6.4 Uppfyllande av m˚alen . . . 29

7 Slutsatser 30 8 Rekommendationer 31 K¨allf¨orteckning 32 Bilagor 37 A Systemarkitektur . . . 37

B KML i en geografisk l¨asare . . . 38 xii

(13)

B.1 Exempeldata i KML . . . 39

B.2 KML-generering med LINQ To XML . . . 40

C Kartvy . . . 41

D How-To . . . 42

D.1 Controller . . . 42

D.2 Modul . . . 43

D.3 View . . . 45

(14)
(15)

1 Inledning och bakgrund

I detta avsnitt beskrivs bakgrunden f¨or hur projektet kom att uformas, vilket sorts f¨oretag det gjordes f¨or och en ¨overgripande beskrivning av m˚als¨attningarna.

Aven de val av tillv¨¨ agag˚angss¨att som gjordes under projektet och tillm¨otesg˚aende av de behov som fanns motiveras.

1.1 F¨ oretagsbeskrivning

DGC ¨ar en n¨atoperat¨or som utvecklar och s¨aljer datakommunikations-, drift- och telefonil¨osningar i ett eget rikst¨ackande n¨at till f¨oretag och organisationer som har verksamhet p˚a m˚anga platser.

DGC hyr koppar- och fiberf¨orbindelser av n¨at¨agare i Sverige f¨or att ansluta slutkunderna till sitt stamn¨at. Slutkundens adress och geografiska position avg¨or vilka n¨at¨agare som ¨ar aktuella samt vilka tj¨anster som de kan erbjuda DGC.

1.2 Projektbeskrivning

N¨ar internetaccess skulle s¨aljas till nya kunder unders¨oktes f¨orst vilken un- derleverant¨or som kablage skulle hyras av baserat p˚a slutkunders adress. I de orderprocesser som genomf¨ordes unders¨oktes slutkunders adresser i detalj, men systemst¨od f¨or att s¨oka fram adressers koordinater och spara dessa i ett strukturerat format saknades. Detta medf¨orde kostnader i tid f¨or de beslut som r¨orde kunders geografiska placering i f¨ors¨aljningsprocessen.

F¨or att kunna ta fram verktyg som skulle underl¨atta beslutsprocesser vid ink¨op av n¨attj¨anster ¨onskade DGC modifiera sina befintliga system f¨or att st¨ojda koordinater, samt ta fram ett nytt system f¨or uppslag av koordinater fr˚an extern leverant¨or.

Ut¨over nyttan i ink¨opsprocessen s˚a v¨arderade DGC m¨ojligheten att anv¨anda geografisk information f¨or att presentera sina tj¨anster p˚a en karta, b˚ade in- ternt och i sin kundportal.

(16)

1.2.1 M˚alformulering

Arbetet f¨orv¨antades resultera i ett eller flera system, efterforskningar och analyser. Dessa var:

• En unders¨okning av vilka leverant¨orer av geografiska tj¨anster som b¨ast kunde l¨osa problemet och som en webtj¨anst sedan skulle implementera.

• Ett strukturerat s¨att att lagra geografisk data i befintliga system.

• En kartl¨aggning och teknisk analys av delsystemens syften och vad de skulle ha f¨or roll i ett st¨orre sammanhang.

• Funktionalitet f¨or att ber¨akna n¨arhet mellan koordinater.

• Utf¨ora geocoding p˚a befintlig data i befintliga system.

• Kartl¨aggning av interna ¨onskem˚al.

• Generera geografisk information till ett strukturerat format och sedan anv¨anda informationen f¨or uppritning i vyer.

• En webvy f¨or att presentera data grafiskt.

• En WPF-kontroll som presenterar data grafiskt.

• Att kunna m¨ata proximitet mellan punkter f¨or att avg¨ora hur en order ska f¨orfaras.

• Att kunna anpassa grafisk presentation utifr˚an t¨athet.

• Implementation i befintliga system.

Grundtanken med projektet var att skapa flera, i s˚a h¨og grad som m¨ojligt, anv¨andbara verktyg f¨or intern verksamhet p˚a DGC. Programvara skulle va- ra fels¨aker och skriven med kvalitetss¨akrad kod, b˚ade f¨or att f¨ors¨akra att delsystem var robusta i drift och f¨or att underl¨atta framtida utveckling.

2

(17)

1.2.2 Avgr¨ansningar Arbetet omfattade ej:

• Utveckling utanf¨or plattformen .NET. Detta f¨or att uppn˚a h¨og kohe- rens med befintliga system och kodkonventioner hos DGC.

• Utveckling av k¨allkod f¨or geografiska uppslag ut¨over nyttjande av exi- sterande webtj¨anster.

• F¨orvaltning eller underh˚all av systemet efter arbetets slutf¨orande F¨or att uppfylla den korrekthet som ¨onskades av DGC l¨amnade k¨allkod och annat projektrelaterat material inte DGC:s intran¨at. D¨arf¨or ¨ar denna un- ders¨okande rapport till stor del inte beskrivande p˚a implementationsniv˚a, och namngivelser samt arkitektoniska strukturer f¨orblir till viss del dolda.

1.2.3 L¨osningsmetoder

De tillv¨agag˚angss¨att som anv¨andes under arbetet var ¨overrenskomna med DGC. F¨or att undvika fallgropar och f¨orseningar i s˚a h¨og grad som m¨ojligt, samt f¨or att optimera arbetet fanns det rum f¨or ¨andringar i dessa metoder.

• Ta fram en ¨overgripande arkitektur f¨or systemen, och i den kunna peka p˚a var de geografiska tj¨ansterna skulle befinna sig, och vilka data de skulle ha ˚atkomst till.

• Utveckla webtj¨anster med tydligt definierade uppgifter och funktioner f¨or geografiska uppslag.

• Anpassa f¨orfr˚agningar mot externa leverant¨orer f¨or att kringg˚a de pro- blem som framst¨alldes i och med att det fanns ett maximalt antal h¨amtningar som fick g¨oras per tidsenhet.

• Enhetstester/Test Driven Development (TDD), d¨ar m˚alet var att samt- liga delar av l¨osningen var testade.

• Lagra data med hj¨alp av de Common Language Runtime (CLR)-klasser f¨or geografisk data som fanns tillg¨angliga, och anv¨anda dessa f¨or att m¨ata avst˚and mellan koordinater.

• Kartl¨agga interna ¨onskem˚al f¨or att uppn˚a h¨ogsta m¨ojliga anv¨andbarhet.

(18)

• Unders¨oka heuristiska metoder f¨or att dela upp kartvyer med h¨ansyn till t¨athet (kartomr˚aden med m˚anga accesser beh¨ovde anpassas s˚a att information kunde presenteras l¨att¨oversk˚adligt).

• Unders¨oka Windows Presentation Foundation (WPF)-kontroller med kartor i ˚atanke; hur man kunde binda kartdata samt utnyttja MVVM (Model View ViewModel)-paradigmen f¨or att presentera en karta.

1.3 Nul¨ agesbeskrivning

DGC ¨ar ett b¨orsnoterat f¨oretag som s¨aljer och drifts¨atter datakommunika- tionsl¨osningar. Ut¨over de tj¨anster som DGC erbjuder bedrivs systemutveck- ling internt hos f¨oretaget.

Majoriteten av de system som utvecklas och drifts¨atts hos DGC har syf- tet att underl¨atta och f¨orb¨attra alla de interna processer som bedrivs. All

¨overvakning och mestadelen av s¨aljprocesser genomf¨ors med hj¨alp av de st¨odverktyg som tas fram. Nya anv¨andningsomr˚aden d¨ar st¨odsystemen kan integreras p˚atr¨affas kontinuerligt, d¨ar funktioner som st¨odjer framf¨orallt s¨alj- och leveransf¨orlopp ¨ar beh¨ovliga.

Det finns ¨onskem˚al om att ta fram delsystem som arbetar med geografisk data f¨or att underl¨atta f¨ors¨aljningsf¨orfaranden, ¨overvakning och presenta- tion av accessn¨atet i b˚ade ¨overvakningssystem och kundportal. Data m˚aste struktureras och ansvaras av tydligt inramade l¨osningar och tj¨anster.

Att sl˚a upp koordinater f¨or befintlig data, d¨ar m¨angden av registrerade och etablerade kundaccesser ¨ar stor, kr¨aver en heuristisk l¨osning som ¨ar v¨al testad och dokumenterad f¨or att s¨akerst¨alla anv¨andbarhet samt framtida utveckling.

1.4 Summering

Med utg˚angspunkt fr˚an DGC:s behov och ¨onskem˚al togs en ¨overgriplig pro- jektdefinition fram med styrande m˚al och avgr¨ansningar. F¨or att bem¨ota de krav som fanns gjordes en studie av hur orderprocesser kunde komma att underl¨attas med hj¨alp av de st¨odverktyg som skulle utvecklas.

4

(19)

2 Teoretisk referensram

Detta kapitel syftar till att f¨orklara de begrepp och teorier som ligger till grund f¨or m˚anga av de tekniker som anv¨andes i arbetet. Tanken ¨ar att av- snittet ska ge en f¨orst˚aelse och m¨ojlighet till ˚aterkoppling som underl¨attar l¨asningen av kommande kapitel med en ¨overgripande genomg˚ang av geografi (2.1), databehandlingsmetoder (2.2, 2.3) och representationsformat (2.4).

2.1 Geodesi

Geodesi, vetenskapen om uppm¨atningar av planeten jorden.

Inom det teoretiska omr˚adet ing˚ar det att utf¨ora punktm¨atningar utifr˚an pla- cering, tyngdkraftsv¨arden och m.¨o.h [1] f¨or att ta fram en kartl¨aggning ¨over jorden. Geodesin ¨ar tillsammans med astronomin en av de ¨aldsta vetenska- perna [2]. Anledningen till att det tas upp h¨ar ¨ar f¨or att vetenskapen ligger till grund f¨or arbetet som genomf¨ordes, vad g¨aller att best¨amma positionering av adresser i DGC:s stamn¨at.

2.1.1 Latitud och longitud

Eftersom jorden mestadels kan antas vara sf¨arisk [3] anv¨ands latitud (bredd, φ) och longitud (l¨angd, λ), vilka ¨ar gradm¨atningsv¨arden som beskriver punk- ter p˚a jordens yta i form av vinklar mot mittpunkten. Altitud anv¨ands f¨or att m¨ata avst˚and ovanf¨or jordytan.

Ett exempel p˚a ett latitud/longitud-par ¨ar lat 59, lon 18(Stockholm, Sve- rige).

2.2 Geocoding

Med geocoding menas att hitta koordinater f¨or en namngiven plats. Adresser binds till ett latitud/longitud-par via ett uppslag mot en extern leverant¨or.

Exempel p˚a externa leverant¨orer ¨ar Google, vars prim¨ara databask¨alla ¨ar TeleAtlas (ett dotterbolag till TomTom [4]), och Microsofts Bing som har NavTeq som st¨orsta underleverant¨or [5]. Vanligast ¨ar att geocodetj¨anster koms ˚at via REST. Alla tj¨anster varierar i tr¨affs¨akerhet, baserat p˚a vilken databask¨alla som begagnas av dem.

Dessutom skiljer sig distribut¨orer av geografiska tj¨anster i skala, d¨ar de som oftast ¨ar mindre tr¨affs¨akra har st¨orre omfattning av l¨ander och platser [6].

(20)

2.3 Datatypen Geography

I .NET framework 4.5 [7] introducerades nya datatyper f¨or att hantera geo- grafi (DbGeography) och geometri (DbGeometry). Eftersom dessa typer ocks˚a

¨

ar implementerade som .NET CLR-klasser i Microsofts SQL Server g˚ar det att anv¨anda dessa klasser direkt i databaslogiken.

F¨or att fr˚an databasen f˚a ut distansen mellan tv˚a geografiska punkter anv¨ands d¨armed f¨oljande exempelkod i en databasf¨orfr˚agning:

SELECT @geog1 = GeogCol1 FROM SpatialTable WHERE id = 1;

SELECT @geog2 = GeogCol1 FROM SpatialTable WHERE id = 2;

SELECT @result = geog1.STDistance(@geog2);

Denna funktionalitet f¨orskjuter databehandlingen fr˚an DAL direkt till da- tabasen som ¨ar optimerad f¨or att behandla stora m¨angder data. Detta ger ocks˚a f¨ordelen att mindre data beh¨over skickas mellan databas och DAL.

2.4 KML och KMZ

KML ¨ar ett internationellt standardformat, till f¨or att presentera geogra- fisk data visuellt. ¨Anda sedan Keyhole utvecklade KML ˚ar 2001 har flera geografiska l¨asare anpassat sina system f¨or att st¨odja spr˚aket. Det officiella namnet OpenGIS KML 2.2 Encoding Standard (OGC KML) kommer fr˚an och kontrolleras av Open Geospatial Consortium [8, 9]. KML st¨ods av bland andra:

• Microsoft Virtual Earth

• Microsoft WorldWide Telescope

• NASA Worldwind

• ESRI ArcGIS Explorer

• Google Maps

• Google Earth

6

(21)

3 F¨ orstudie

Innan n˚agon form av implementation och utveckling kunde genomf¨oras kr¨avdes kunskap och fakta vad g¨allde de byggstenar som systemet beh¨ovde, framf¨orallt f¨or koordinatuppslagningar. I f¨orstudien unders¨oktes fr¨amst m¨ojligheter f¨or geocoding vad g¨aller licensavtal och ¨oppenhet, och i detta avsnitt kommer dessa punkter att behandlas.

3.1 Externa geografitj¨ anster

F¨or att n˚a ett av de mest grundl¨aggande m˚alen f¨or projektet, det vill s¨aga strukturerad koordinatdatalagring, kr¨avdes det att externa leverant¨orstj¨anster anv¨andes. Den funktionalitet som efters¨oktes var bland annan:

• Matris- och avst˚andsber¨akningar utifr˚an angivna koordinater.

• Operationer f¨or geocoding/reverse-geocoding (se 2.2).

• Grafisk presentation av data.

En avv¨agning gjordes f¨or att best¨amma vilken tj¨anst (eller kombination av tj¨anster) som l¨ampade sig b¨ast f¨or att uppn˚a ¨onskv¨arda resultat.

Tre st¨orre leverant¨orer av karttj¨anster utv¨arderades; Google, Bing och Yahoo, samt tv˚a gratisalternativ; Nominatim och MapQuest. Respektive leverant¨or kr¨avde att vissa villkor uppfylldes (3.2) om deras tj¨anster implementerades av, f¨or dem, utomst˚aende applikationer. Dessa villkor gav en grund till den bed¨omning som gjordes.

(22)

3.2 Geocoding, licensiering och persistent datalagring

Avg¨orande f¨or projektet var om det, enligt villkoren f¨or anv¨andning, var till˚atet att lagra uppslagna koordinater fr˚an olika leverant¨orer, samt i vilken utstr¨ackning anv¨andandet av geocodes var lovligt. ¨Aven andra anv¨andares erfarenheter av olika leverant¨orers tj¨anster unders¨oktes [10]. Ett urval av geocodetj¨anster ¨ar [11]:

• Google

• Yahoo

• Bing

• CloudMade

• OpenAddress

• MapQuest

• Nominatim

3.2.1 Google Maps APIs

De villkor som st¨alldes f¨or anv¨andning av Google Maps APIs [12], vilka om- fattade samtliga verktyg i tj¨ansten, angav att det var f¨orbjudet att bland annat:

1. Lagra data h¨amtat fr˚an t.ex Geocoding Service i mer ¨an 30 dagar (mest p˚a grund av att Google inte vill att f¨or˚aldrat data anv¨ands, och upp- muntrar till att uppdatera ofta).

2. Anv¨anda data h¨amtat fr˚an Googles tj¨anster i applikationer och system som presenterar geografi grafiskt med n˚agot annat ¨an Google Maps.

3. Distribuera och ˚aterf¨ors¨alja n˚agon form av information f¨or kommersiellt bruk som kan relateras till Googles tj¨anster.

8

(23)

Just detta urval fr˚an Googles anv¨andarvillkor (mer best¨amt punkt 1 ovan) presenterade ett problem, eftersom systemet skulle kr¨ava att kunna lagra geocodes persistent f¨or matchning mot interna system. Googles Terms of Service medf¨orde att systemet inte fick lagra platser f¨or en adress l¨angre ¨an 30 dagar. Detta betydde att cache:ade svar fr˚an google skulle rensas bort efter 30 dagar, men uppslagna platser som redan anv¨andes av systemet lagrades under en l¨angre tid p˚a grund av skillnaden mellan en plats och en adress.

I ¨ovrigt fanns det ¨aven best¨ammelser om att Googles tj¨anst f¨or geocoding/

reverse-geocoding inte till¨at fler ¨an 2.500 h¨amtningar per dag [13]. St¨orre applikationer som belastade Googletj¨ansten och ¨overskred denna siffra blev avst¨angda p˚a best¨amd tid, s˚avida en ers¨attning inte arvoderades Google, vilket i st¨orsta m¨ojliga m˚an ville undvikas. P˚a grund av skalan av den da- tam¨angd som systemet skulle hantera var denna aspekt inte f¨orsumbar, och en l¨osning d¨ar begr¨ansningen togs till h¨ansyn kr¨avdes.

3.2.2 Bing Maps Platform APIs

Likt f¨or de best¨ammelser som fanns f¨or Google Maps APIs framst¨alldes pro- blem med att anv¨anda Bing Maps. Bing Maps villkor f¨or anv¨andning av tj¨ansten [14] beskriver:

• F¨orbud mot att kopiera, lagra, arkivera, eller skapa databaser med erh˚allen data, f¨orutom att geocodes f˚ar lagras lokalt f¨or varje applika- tion (caching).

• F¨orbud mot att anv¨anda h¨amtade geocodes f¨orutom i samband med en Bing Map.

P˚a grund av dessa f¨orh˚allanden skulle ett system som exklusivt byggde p˚a Bing Maps Platform APIs inte kunna till¨ampa ett flexibelt f¨orfarande, likt hur det s˚ag ut med Googles motsvarighet.

Skillnaden med Bing, trots det kommersiella omf˚anget av varum¨arket, mot Google Maps regler ¨ar dock att det inte finns en begr¨ansning f¨or hur stora m¨angder data som f˚ar beg¨aras per tidsenhet [6].

(24)

3.2.3 Yahoo! Maps API

Yahoo! Maps [15] betraktades som en kandidat under ett tidigt skede. In- nan n˚agon form av efterforskning och testning av Yahoo!s tj¨anster hann ge- nomf¨oras uppt¨acktes dock att Yahoo! beslutat att st¨anga ner sin karttj¨anst [16]. F¨or ¨ovrigt hade Yahoo! Maps (innan dess att tj¨ansten st¨angdes ner) enbart st¨od f¨or uppslag mot gator och v¨agar, men inte f¨or adresser och hus- nummer.

3.2.4 MapQuest

MapQuest ¨ar ett ramverk f¨or geografiska tj¨anster som ¨ar helt ¨oppet. Map- Quest gav olika valm¨ojligheter f¨or hur stort st¨od anv¨andare kunde f˚a och hur mycket av funktionaliteten som skulle vara tillg¨anglig genom olika licensav- tal.

De olika former av licensiering som framst¨alldes av MapQuest [17] var:

• ENTERPRISE EDITION (Licensed data)

• COMMUNITY EDITION (Licensed data)

• COMMUNITY EDITION (Open data)

Licenserna hade olika priss¨attningar och kravst¨allningar f¨or anv¨andning. Va- let f¨oll dock p˚a det API som MapQuest ger som ¨ar mer ¨oppet f¨or anv¨andning [18] (MapQuest Open). Detta alternativ innefattar funktionalitet f¨or bland annat: geocoding, reverse geocoding, kvalitetskoder som underl¨attar

tr¨affs¨akerhetsbest¨ammelser och ¨ar dessutom helt gratis. MapQuest kr¨avde endast att deras tj¨anster gavs omn¨amnande i eventuella grafiska gr¨anssnitt som var implementerade med hj¨alp av deras tj¨anster.

Vad g¨aller datam¨angd ans˚ag MapQuest att det var l¨ampligt att informera (ge en varning) om att en utomst˚aende tj¨anst kunde komma att kr¨ava h¨og pre- standa, och d¨arf¨or g¨ora en ¨overrenskommelse med MapQuest. P˚a samma s¨att som anv¨andandet av Google Maps APIs kr¨avde en l¨osning d¨ar begr¨ansningar togs till h¨ansyn implementerades MapQuests tj¨anster med restriktioner f¨or att undvika f¨or stora m¨angder data¨overf¨oring.

10

(25)

3.2.5 Nominatim

Nominatim [19] ¨ar en frist˚aende samling tj¨anster vilka ligger som fundament f¨or b˚ade Open Streetmap [20] och MapQuest Open Initiative [21] i form av att tillhandah˚alla OSM-data. I dessa tj¨anster ing˚ar bland annat s¨okfunktion och geocoding.

Nominatims utformning kan n¨armast liknas vid den som de enorma geogra- fiska databaser som ligger till grund f¨or bland andra Tele Atlas (TomTom) [4]

och Navteq [22] har. S¨okfunktionerna som Nominatim erbjuder ¨ar ansenligt djupa [23], om ¨an inte fullt s˚a tr¨affs¨akra som Googles.

Det enda kravet som st¨alldes f¨or anv¨andning av verktyget Nominatim [24]

var att applikationen som till¨ampar tj¨ansten skulle identifieras. Det ¨ar egent- ligen bara ett s¨att f¨or Nominatim att se vilka som belastar tj¨ansten ansenligt mycket.

Det positiva med detta var att det gick att ange kontaktinformation f¨or anv¨andaren som identifikation (email-adress t.ex), vilket betydde att Nomi- natim kunde kontakta anv¨andare (exempelvis systemutvecklingsavdelningar) genom att s¨anda mail om en applikation anstr¨anger tj¨ansten f¨or mycket. Det hj¨alper ocks˚a till att f¨orhindra ober¨aknelig IP-relegering i samspel med bru- kare; en mycket god egenskap.

3.3 Tillf¨ orlitlighet av uppslag

F¨or att kunna m¨ata hur pass tr¨affs¨aker en s¨okning hos en leverant¨or ¨ar m˚aste resultat fr˚an f¨orfr˚agningar tolkas r¨att. Olika tj¨anster anv¨ander olika k¨allor f¨or sina databaser, vilka i sin tur skiljer sig i datam¨angd.

3.3.1 Google

Google f˚ar geografisk data fr˚an bland andra Tele Atlas, som ¨ar v¨arldens n¨ast st¨orsta akt¨orer p˚a marknaden f¨or geografiska informationssystem [25] (¨ovrig geografisk data ¨ar utforskad internt hos Google).

Google har ¨overlag h¨ogst tr¨affs¨akerhet f¨or uppslag av adresser mot koordina- ter, och anger vilken tr¨affs¨akerhet varje svar har genom parametern location type [26].

(26)

3.3.2 Bing

Eftersom Bings geografitj¨anst ¨ar en SOAP-webservice finns det datatyper i kontraktet som anger vilken s¨akerhetsgrad svaret har, vilket i sig underl¨attar implementationen, men ocks˚a introducerar problematik vad g¨aller hur h¨og kontroll som ¨ar uppn˚aelig. Bing anv¨ander NavTeq [22] som databask¨alla.

3.3.3 MapQuest

MapQuest h¨amtar data fr˚an OSM [27], vilket ¨ar en ¨oppen k¨alla f¨or geogra- fisk data. D¨arf¨or har MapQuests webservice varierande anvisningar [28] av tr¨affs¨akerheten p˚a s¨okningar i form av en upps¨attning koder (se 4.3.3). F¨or att avg¨ora tr¨affs¨akerheten av ett svar som f˚as fr˚an en s¨okning kr¨avs det d¨arf¨or ett filter som tolkar koderna.

3.3.4 Nominatim

Den riktligaste m¨angden av tr¨affs¨akerhetsangivelser hos de valda geocoding- tj¨ansterna f˚as av Nominatim [23].

I ett svar fr˚an Nominatim finns inget distinkt v¨arde f¨or confidence eller qua- lity, utan ist¨allet ett KV-par som anger vilka typer av platser resultatet in- neh˚aller. Exempel p˚a ett s˚adant KV-par ¨ar nyckeln ”waterway” med v¨ardet

”canal”, vilket f¨or den specifika uppgiften som systemet har ¨ar helt irrelevant.

D¨arf¨or skulle det kr¨avas en smart funktion f¨or att s˚alla fram ett tolkningsbart v¨arde.

12

(27)

4 Genomf¨ orande

Detta kapitel beskriver genomf¨orandet, vilket bestod av att ta fram en ar- kitektur, som beskrivs i kapitel 4.2, och implementationen av geocoding i kapitel 4.3. Dessutom visas hur lagringen av positionsdata gjordes och en genomg˚ang av anv¨andargr¨ansnittet i kapitel 4.5 och 4.6. Till sist visas vad som sl¨apptes i den planerade releasen i kapitel 4.7.

4.1 Tredjepartstj¨ anster

Ett antal grundl¨aggande tester (inte med mer ¨an ett tiotal adresser) gjordes f¨or att unders¨oka hur pass goda resultat de olika leverant¨orerna gav. Med go- da resultat menas att uppslagningar p˚a adresser har h¨og tr¨affs¨akerhet (helst s˚a pass bra att t.o.m. antal trappor och d¨orr finns med som parametrar i svaren). Utifr˚an dessa tester och vetskapen fr˚an tidigare erfarenheter (se 3.2) beslutades att f¨oljande leverant¨orers tj¨anster skulle v¨aljas bort: Yahoo, CloudMade och OpenAddress.

4.1.1 Val av tredjepartsleverant¨orer

Bland annat p˚a grund av att Yahoo!s tj¨anst skulle st¨angas ner och att massiv datalagring av koordinater h¨amtade fr˚an Google och Bing inte var till˚atet gjordes valet att anv¨anda:

MapQuest

F¨or geocoding, fritt att lagra data Nominatim

F¨or geocoding, fritt att lagra data givet att kontaktinformation anges Google

F¨or geocoding och f¨or att integrera Google Maps i anv¨andargr¨anssnitt Bing

F¨or geocoding, dock enbart en test-version med reservation f¨or att s˚a sm˚aningom avsluta anv¨andandet av tj¨ansten

(28)

4.2 Arkitektur

En analys genomf¨ordes f¨or att f¨ors¨oka hitta en s˚a modul¨ar l¨osning som m¨ojligt:

• I vilka befintliga system fanns de adresser som skulle hanteras? Hur skulle denna data h¨amtas?

• Hur pass omfattande skulle geografifunktionerna vara? Skulle det ut- vecklas ett ensamst˚aende system eller enbart fungera som en p˚abyggnad p˚a ett existerande?

• I vilka anv¨andargr¨anssnitt skulle visuell presentation av kartor finnas?

Se ¨aven Arkitektur i bilagor.

4.2.1 Geocoding Service

Geocoding-tj¨ansten var menad att vara en l¨oskopplad ”verktygsl˚ada”, obe- roende av intern data, som anropades i ett enda syfte; h¨amta (sl˚a upp) ko- ordinater f¨or en adress, om dessa ¨annu inte k¨andes till. Geocodingtj¨ansten implementerade en intern cache, som anv¨andes f¨or att returnera data utan att anropa externa leverant¨orer om s¨okningar hade gjorts sedan tidigare, f¨or att minimera antalet f¨orfr˚agningar som st¨alldes till framf¨orallt Google.

4.2.2 Geofinding Service

Till en b¨orjan implementrades en mellanhandstj¨anst, till f¨or att berika poster i interna system med koordinatdata, d¨ar dessa ¨annu inte fanns, och vidare- befordran av denna data till bland annat vyer.

4.2.3 Webbvy med modell

En alternativ l¨osning till en ’hitta”-tj¨anst (4.2.2) var att l˚ata modellen f¨or anv¨andargr¨anssnittets vyer unds¨atta funktionalitet f¨or att hitta koordinater f¨or data som fanns i interna system, vilket hj¨alpte f¨or att minimera overhead.

Modularitet gick till viss del f¨orlorad genom att att g¨ora denna implementa- tion.

14

(29)

4.2.4 DbSeeder

F¨or att kunna f¨ora in geografisk data i befintliga system skrevs en simpel

”seeder” som tillsammans med geocoding-tj¨ansten kopplade platser till koor- dinater och lagrade det i en databas. P˚a grund av att geocoding-tj¨ansten be- gr¨ansade antalet f¨orfr˚agningar (baserat p˚a yttre leverant¨orers begr¨ansningar) med ett throttle sp¨arrades seeder, som i sin tur anv¨ande en backoff-funktion.

I och med det k¨ordes seeder som ett ”natt-jobb”, som sakta men s¨akert ut¨okade intern data med platsinformation.

4.3 Geocodes fr˚ an extern leverant¨ or

Processen att utf¨ora en f¨orfr˚agan f¨or att h¨amta koordinater f¨or en adress s˚ag mestadels likadan ut, oberoende av vilken tj¨anst som till¨ampades. Den stora skillnaden l˚ag i hur svaret var utformat fr˚an respektive extern tj¨anst. Me- toden som anv¨andes bestod av att anskaffa resultatlistor fr˚an flera tj¨anster;

Nominatim, MapQuest, Google samt Bing (se 3.1), sedan j¨amf¨ora samtliga resultat med varandra f¨or att sist returnera det b¨asta m¨ojliga v¨ardet.

4.3.1 J¨amf¨orelse med viktade v¨arden

Ponera att en lista av resultat f˚as av respektive extern leverant¨or. Google p˚ast˚ar sig ha fem olika tr¨affar p˚a s¨okningen, Bing tv˚a, Nominatim tre och MapQuest en. Hur kan man d˚a ta reda p˚a vilket resultat, ur varje lista, som st¨ammer b¨ast ¨overrens med s¨okningen? Och sedan vilket av dem (vilken leverant¨or) som har h¨ogst tr¨affs¨akerhet?

(30)

Resultaten f¨orbereds f¨or j¨amf¨oreslse genom att samlas till en enda lista.

F¨or varje resultat i den enhentliga listan plockas latitud och longitud ut och omvandlas fr˚an grader till kartesiska v¨arden [29]:

Omvandla grader till radianer CLat = Latitud ∗ π/180

CLong = Longitud ∗ π/180

Transformera till kartesiska v¨arden x = cos(CLat) ∗ cos(CLong)

y = cos(CLat) ∗ sin(CLong) z = sin(CLat)

Ta fram en viktad summa

sum = (x + y + z) ∗ (±Conf idence)

Varje kartesisk summa l¨aggs till i en total -variabel, som sedan anv¨ands f¨or att r¨akna ut centerpunkten:

center = totx+ toty+ totz

n , d¨ar n ¨ar antalet samlade resultat

Alla punktspecifika summor modifieras (f¨ors¨amras) allts˚a utefter det confi- dence resultaten hade, d¨ar v¨arden som var mindre ¨an center spreds ut ned˚at beroende p˚a hur d˚aligt confidence var (se 4.3.3) och v¨arden st¨orre ¨an center spreds ut upp˚at. Resultat med tr¨affs¨akerhet ”NotFound” f¨orbis˚ags.

Det v¨arde som sedan l˚ag n¨armst center ans˚ags vara det mest tr¨affs¨akra resul- tatet och returnerades. Denna funktion f¨ors¨okte eliminera d˚aliga h¨amtningar, framf¨orallt f¨or att inte l˚ata s¨okningen hamna i fel land (d˚a confidence var l˚agt i s˚adant fall). Problem uppstod n¨ar samtliga resultat var i fel land, vilket d˚a oftast berodde p˚a att s¨okstr¨angen var otillr¨acklig (till exempel att stad, ort och land saknades) eller felformulerad, och dessa gick i praktiken inte att f¨orb¨attra med en s˚adan h¨ar funktion.

16

(31)

4.3.2 Parsing

Tj¨ansten Geocoding Service utnyttjade LINQ to XML [30] f¨or att plocka ut data fr˚an de svar som genererades av leverant¨orstj¨ansterna.

F¨orfarandet bestod i att:

1. Utforma en f¨orfr˚agan utifr˚an det objekt som klienten beg¨ar:

• Dela upp adress, stad, land och postnummer i str¨angar

• F¨orena varje delstr¨ang (och kontrollera s˚a att formatet blir r¨att

¨aven om n˚agon best˚andsdel inte finns) i en query-str¨ang

• Generera ett WebRequest-objekt och ta emot ett WebResponse 2. Filtrera ut vilket confidence svaret har (se 4.3.3)

3. Ta ut satsdelarna ur resultatet:

• Generera en upps¨attning klasser som ¨ar unika f¨or varje leverant¨or (GoogleLocationDescription, NominatimLocationDescription, etc)

• H¨amta varje specifik komponent ur varje del av resultatet till ob- jekten som skall returneras

4.3.3 Confidence-filter

Som beskrivet i 3.3 kr¨avdes en funktion f¨or att s˚alla fram tr¨affs¨akerheten av varje s¨okresultat. Confidence f¨or ett resultat delas upp i:

• Exact - tr¨aff p˚a angivet husnummer

• Good - exempelvis r¨att gatuadress, men inte ett specifikt husnummer

• Approx - tr¨aff p˚a omr˚ade som t.ex v¨ag, stad, kommun eller l¨an

• Bad - tr¨aff p˚a landsniv˚a

• NotFound - inga tr¨affar (mycket d˚aligt resultat)

(32)

Urskilja tr¨affs¨akerhet fr˚an Google:

Den mest koncisa av de tre Representational State Transfer (REST, ett s¨att att exponera en Webservice)-baserade externa tj¨ansterna; v¨ardet f¨or confi- dence i ett svar fr˚an Google ¨ar ”antingen/eller”. Parametern location type ¨ar det som anv¨ands f¨or att avg¨ora tr¨affs¨akerheten. Exempel p˚a dessa ¨ar:

• ROOFTOP

• RANGE INTERPOLATED

• APPROXIMATE

ROOFTOP anger ett exakt husnummer, ibland till och med vilken v˚aning i h¨oghus adressen ligger p˚a.

RANGE INTERPOLATED betyder ofta att svaret inte ¨ar exakt p˚a husnum- mer, utan snarare att resultatet st¨ammer ¨overrens p˚a gata eller kvarter.

APPROXIMATE betyder i sin tur att det ¨ar ett relativt os¨akert svar, d¨ar en- bart stad, kommun eller till och med land ¨ar det enda som st¨ammer ¨overrens.

Resultattypen som anges i svar fr˚an Google g¨or det mycket enkelt att avg¨ora om man med s¨akerhet kan s¨aga var en adress finns, eller om det enbart ¨ar t.ex ett generellt omr˚ade som returneras.

Urskilja tr¨affs¨akerhet fr˚an Bing:

Eftersom Bing anropas genom SOAP kr¨avdes inget filter d¨ar, d˚a confidence angavs som en befintlig datatyp i CLR.

Urskilja tr¨affs¨akerhet fr˚an MapQuest:

MapQuest anger hur h¨og kvalitet en geocode har med en kod som delas upp i granularity och confidence. Hj¨alpmetoden som h¨amtar det slutliga v¨ardet switchar mot dessa tv˚a delkoder.

Exempel:

Koden L1AAA anger med granularity L1 att resultatet ¨ar en adress. Confi- dence AAA anger med f¨orsta tecknet (s¨akerhet p˚a gatuniv˚a), andra tecknet (s¨akerhet p˚a omr˚adesniv˚a) samt tredje tecknet (s¨akerhet p˚a postnummer) att resultatet ¨ar av mycket god kvalitet. Confidence ¨ar antingen A, B eller C. M¨ark v¨al att detta confidence inte ¨ar en analog till ConfidenceLevel som

¨ar den enum som anv¨ands i geocoding-tj¨anstens datakontrakt.

18

(33)

Urskilja tr¨affs¨akerhet fr˚an Nominatim:

Nominatim presenterar en enorm m¨angd identifikationer av tr¨affs¨akerhet, som beskrivet i 3.3.4. Hj¨alpmetoden som filtrerar confidence ur ett svar fr˚an Nominatim ¨ar ett massivt textstycke som behandlar alla t¨ankbara platstyper som kan f˚as, och f¨ors¨oker tolka ett v¨arde utifr˚an det.

Exempel:

Key: highway och value: residential anger en h¨og grad av tr¨affs¨akerhet, och anses d¨arf¨or vara ”Exact”. Hade value d¨aremot varit road anses det vara ett s¨amre resultat med v¨ardet ”Approx”.

4.3.4 Cache

En cache implementerades i form av en Microsoft SQL-databas. Orsaken till varf¨or geocodingtj¨ansten anv¨ande en cache f¨or s¨okningar var f¨or att mini- mera antalet uppslag som gjordes mot externa leverant¨orer. Alla nya unika adresss¨okningar sparades med kolumnerna ”SearchString”, ”SearchDate” och resultatf¨alt f¨or bland annat koordinater. Om en s¨okning gjordes unders¨oktes f¨orst om det redan fanns resultat i cachedatabasen som kunde returneras.

Ett SQL-jobb skrevs f¨or att hantera f¨alt d¨ar antalet dagar sedan s¨okningar genomf¨ordes var mer ¨an 30 dagar, och i s˚adant fall rensades dessa ur cache- databasen.

F¨or att s¨akerst¨alla att inga f¨or˚aldrade geocodes angavs som aktuella gjor- des dessutom en kontroll p˚a cache:ade resultatdatum vid uppslag, och en uppdatering av den befintliga s¨okningen, med eventuella nya resultatf¨alt la- des till i cachedatabasen. F¨oljande pseudokod beskriver processen:

if(search has been made) {

get existing result from cache

if(days passed since this search was made is less than 30) return result

else(run a new lookup and insert new result into cache) return new result

}

En annan anledning till att en cache implementerades var att bibeh˚alla en- lighet med anv¨andningskraven fr˚an Google.

(34)

4.4 Lagring av positionsdata

Data lagrades i en MSSQL Server-databas, prim¨art med datatypen SqlGeo- graphy [31] f¨or bin¨ar positionsdata. Denna data konverteras sedan till ett DbGeography-objekt [32] f¨or att enklare kunna extrahera positionsdata fr˚an objektet. Databasdiagrammet f¨or lagringen av data hittas i Figur 1.

Figur 1: Databasdiagram f¨or positionsdata

Valet av att anv¨anda SqlGeography ist¨allet f¨or att spara latitud och longitud som flyttal gav en stor f¨ordel vid n¨arhetsber¨akningar (se 2.3).

F¨or att l¨asa positionsdata fr˚an databasen nyttjades C#-klassen SqlData- Reader [33]. Valet f¨oll p˚a vanliga SQL-queries ist¨allet f¨or en ORM, som t.ex Entity Framework [34], p˚a grund av att stora m¨angder data skulle skickas fr˚an en WCF-tj¨anst vilket gjorde att det kr¨avdes h¨og kontroll ¨over storle- ken av den data som h¨amtades fr˚an databasen och skickades vidare till vyn.

Denna funkionalitet lades till en b¨orjan i en egen WCF-tj¨anst f¨or att abstra- hera bort databaslogiken fr˚an business-object-logiken, men efter stresstester p˚afanns on¨odig overhead i att ha den strukturen. P˚a grund av detta om- strukturerades systemet s˚a att data h¨amtades och uppdaterades direkt mot aktuell WCF-tj¨anst.

Ett problem som st¨ottes p˚a var att det inte verkade finnas n˚agot s¨att att direkt konvertera mellan ett SqlGeography-objekt och ett DbGeography- objekt. En genv¨ag f¨or att komma runt detta var att st¨alla en query mot databasen s˚a positionsdatan returneras i en textstr¨ang som sedan g˚ar att konverteras till ett DbGeography-objekt enligt f¨oljande exempel:

20

(35)

var sql = @"SELECT Location.STAsText() AS LocationString FROM dbo.Sites";

using(var cmd = new SqlCommand(sql, connectionString)) { var reader = cmd.ExecuteReader();

reader.Read();

DbGeography location = DbGeography.FromText(reader["LocationString"]);

}

Men precis som det fanns en funktion STAsText()fanns det funktioner f¨or att h¨amta latitud och longitud direkt fr˚an databasen. Koden s˚ag d˚a ut som f¨oljer:

var sql = @"SELECT Location.Lat() AS Latitude FROM dbo.Sites";

using(var cmd = new SqlCommand(sql, connectionString)) { var reader = cmd.ExecuteReader();

reader.Read();

double? latitude = reader["Latitude"] as double?;

}

Denna skillnad gjorde att en uppgradering till .NET Framework 4.5 inte blev n¨odv¨andig. Dock kr¨avdes fortfarande SQL Server 2012 f¨or att st¨odja detta p˚a databassidan.

4.5 WPF

WPF, Windows Presentation Foundation, ¨ar Microsofts ramverk som ¨ar till f¨or att skriva anv¨andargr¨anssnitt. XAML (extensible application markup lan- guage) anv¨ands f¨or att uforma applikationer. F¨or att kunna implementera en WPF-kontroll som har i uppgift att hantera kartor skulle det kr¨avas att den antingen ritar ut kartor med hj¨alp av tiles [35] eller enbart renderar en webbkarta fr˚an t.ex Google. Problemet med att anv¨anda tiles var att det mestadels inte ¨ar gratis att anv¨anda dem. Funktionaliteten i de vyer som sy- stemet skulle innefatta hade heller inte behovet av att presenteras med hj¨alp av tiles (framf¨orallt vad g¨allde ¨overvakning). Det grafiska gr¨anssnittet f¨or systemet hade inte n˚att potentialen med, eller utnyttjat MVVM-paradigmen fullt ut, och att anv¨anda en WPF-kontroll hade blivit ¨overfl¨odigt.

Modellen i ASP.NET MVC 4 (se 4.6) m¨otte d¨aremot de enkla krav som fanns f¨or anv¨andargr¨anssnittet. D¨arf¨or gjordes valet att inte utveckla n˚agot anv¨andargr¨anssnitt i WPF.

(36)

4.6 Webbvyer

Stationer och kundplatser som f˚att sina geografiska positioner uppslagna vi- sades p˚a en karta i en egen hemsida. F¨or att generera hemsidan anv¨andes ASP.NET MVC 4 (Ett ramverk f¨or att bygga 3-lagers webapplikationer).

Denna applikation fick i uppgift att h¨amta data fr˚an de WCF-tj¨anster som fanns och rita detta till en karta. Klientsidan fick ¨aven m¨ojlighet att anv¨anda AJAX f¨or att h¨amta data utan att beh¨ova ladda om sidan.

4.6.1 Javascriptmodulen geo.js

P˚a grund av att m˚anga av vyerna delade mycket av initialiseringsprocessen och filtrering av vilka f¨orbindelser och noder som skulle visas p˚a kartan togs en javascriptmodul fram som sk¨otte detta arbete.

Modulen ansvarade f¨or att h˚alla koll p˚a h¨amtade kundplatser(site), no- der och kopplingar samt kunna visa ¨overvakningsinformation f¨or dessa asyn- kront. Den ansvarade ¨aven f¨or att dynamiskt uppdatera data i databasen n¨ar

¨andringar gjordes av anv¨andaren i kartvyn.

<script type="text/javascript">

var map = geo.createMap(’map-div’);

$.post(GetSiteUrl, {siteId: 1}, function(site) { var marker = geo.createSiteMarker(map, site);

});

</script>

<div id="map-div"></div>

Exempel p˚a att rita ut en kundplats(site”) med id 1 p˚a en karta Liknande funktionalitet lades ¨aven till f¨or stationer. P˚a grund av att all data f¨or en site (eller kundplats) skickades med till modulen ansvarade mo- dulen ¨aven f¨or att skapa informationsrutor som ¨oppnades n¨ar en mark¨or klickades p˚a.

Ett problem som uppstod var att n¨ar m˚anga mark¨orer skulle visas p˚a kar- tan (¨over 10,000 mark¨orer) blev kartvyn oresponsiv och ikonerna ¨overlappade varandra. F¨or att p˚a ett enkelt s¨att g¨ora kartan mer informativ och respon- siv anv¨andes Googles mark¨orklustrare [36] som klustrar ihop mark¨orer som

¨overlappar varandra.

22

(37)

Mark¨orklustraren modifierades f¨or att anv¨anda ¨overvakningsdata och f¨argade ikoner f¨or kluster f¨or att f¨orenkla ¨overblick vid avbrott p˚a f¨orbindelser. I f¨oljande kod visas den del av klusterkalkylatorn som bed¨ommer vilken ikon som skall v¨aljas till ett kluster.

module.clustererCalculator = function(markers, numStyles) { index = Math.min(nodes_down_count, numStyles);

return {

text: nodes_count + " - " + sites_count,

index: style_up //style_up / style_mixed / style_down };

};

Funktionen returnerar ett JSON-objekt med texten som skall visas, samt ett index f¨or vilken ikon som ska anv¨andas. Indexet anger positionen f¨or en ikon i listan av ikoner som klustraren skapas med.

4.6.2 Overvakning¨

Ett av ¨onskem˚alen som fanns f¨or kartan var att den skulle kunna visa realtidsdata med ¨overvakningsstatus f¨or stationer och kundplatser. F¨or sta- tionerna och f¨orbindelserna mellan dessa valdes det att klienten fick pol- la ¨overvakningen eftersom datam¨angden inte kr¨avde n˚agon optimering. F¨or kundplatserna var detta dock inte m¨ojligt i samma m˚an p˚a grund av antalet och att varje plats teoretiskt sett kunde ha flera f¨orbindelser. F¨or kundplat- ser h¨amtades d¨arf¨or ist¨allet ¨overvakningsdata n¨ar informationsbubblan f¨or en kundplats visades. Detta gjorde att f¨orbindelser mellan kundplatser in- te kunde visa ¨overvakning, men detta ans˚ags inte lika viktigt som att visa

¨overvakningsdata f¨or stationer.

Pollningen skedde med hj¨alp av javascripts inbyggda funktion setInterval.

Denna funktion tar emot en annan funktion som parameter samt ett inter- vall i millisekunder. Uppdateringen av ¨overvakningsdata gav dock ett pro- blem med mark¨orklustraren som inte uppdateras automatiskt f¨or att byta ikon. L¨osningen till detta blev att l˚ata klustraren rita om sig sj¨alv n¨ar alla efterfr˚agningar efter ¨overvakningsdata f¨or ett interval hade kommit tillbaka.

Med hj¨alp av JQuery ser det ut som exemplet nedan.

(38)

var nodes_requests = []

$.each(nodes, function() {

node_requests.push(/* ¨overvakningsf¨orfr˚agan */);

});

$.when.apply(undefined, node_requests).then(

function() {

if (module.maps[mapIndex].clusterer)

module.maps[mapIndex].clusterer.repaint();

} );

Denna kod sparar varje efterfr˚agan till servern i en array och anv¨ander sedan JQuerys funktion ’when’ f¨or att registrera en callback som exekveras n¨ar alla efterfr˚agningar i arrayen har f˚att svar fr˚an servern.

4.7 Publicering

Som avslutande moment i arbetet genomf¨ordes en ¨overgripande release. Samt- liga delar av projektet sl¨apptes samtidigt med s˚a mycket f¨ardig funktionalitet som m¨ojligt.

4.7.1 Beslut om geocoding

I samband med att de geografiska l¨osningarna sl¨apptes togs beslutet att en av de yttre leverant¨orerna av geocodes inte l¨angre skulle anv¨andas.

Bing hade n¨amligen under arbetets g˚ang anv¨ants med en test-nyckel, som endast var aktiv i 90 dagar. I och med det avgjorde man att Bing, som i

¨ovrigt heller inte gav exceptionellt goda s¨okresultat i j¨amf¨orelse med ¨ovriga leverant¨orer, inte l¨angre skulle anv¨andas.

Dessutom utf¨ordes sm˚a modifikationer p˚a ¨ovriga geocodeh¨amtare (fr¨amst f¨or Nominatim) g¨allande kontaktinformation. I och med det var de kontaktupp- gifter som gavs till Nominatim hela systemutvecklingsavdelningen p˚a DGC.

24

(39)

4.7.2 Tillkomna st¨od med tillh¨orande licenser

Eftersom valet gjordes att anv¨anda Google Earth som GIS (Geographic In- formation System)-utforskare i syftet att underl¨atta n¨atplanering och dylikt gjordes en extra unders¨okning av licenserna [37] f¨or anv¨andning av applika- tionen. I dessa beskrivs enbart restriktioner f¨or ˚aterf¨ors¨aljning i t.ex. kom- mersiella syften. Ingenting dock som bromsar anv¨andandet av Google Earth som ett internt st¨odverktyg hos DGC.

4.7.3 Verktyg

De st¨odverktyg som inkluderades n¨ar systemet publicerades var:

Overvakningsverktyg¨

Ett webbgr¨anssnitt baserat p˚a Google Maps som visade livedata f¨or

¨overvakningsstatus i stamn¨atet KML-generator

En webbsida med inst¨allningsval f¨or att kunna generera kartn˚alsutritning av n¨atet baserat p˚a bland annat accesstyper i Google Earth med en KMZ-fil (paketerad KML med egenvalda ikoner och bilder)

Integrerad systemvy

Ett integrerat gr¨anssnitt i ett befintligt system

(40)

5 Interna ¨ onskem˚ al

Efter halva projektets g˚ang genomf¨ordes en ¨onskem˚alsunders¨okning bland de tillt¨ankta anv¨andarna hos DGC.

Detta ledde till att ett antal troliga anv¨andningsomr˚aden togs fram. Dessa delades upp i anv¨andningsfall som diskuterades och utformades tillsammans med potentiella anv¨andare. Detta gav mer klarhet i hur information skulle presenteras och anv¨andargr¨anssnitt utformas.

5.1 Kundportal

I den kundportal som DGC tillhandah¨oll sina kunder ville man presentera l¨ankstatus och kunders VAN (logiska f¨orbindelser) p˚a en karta. Denna vy skulle ha ett tunnare och mer enkelt gr¨anssnitt med f¨argkodad status p˚a l¨ankar. Man ans˚ag att detta skulle underl¨atta f¨or kunder att se huruvida en l¨ank faktiskt havererat eller inte, och ge en snygg presentation av vad kunden k¨oper.

5.2 Vy med huskroppar

Genom att anv¨anda grafiken i en fullfj¨adrad GIS-utforskare som t.ex Google Earth kan man se huskroppar och gator, p˚a ett ¨annu mer detaljerat s¨att ¨an i de satellitvyer som finns i vanliga kartgranssnitt. Genom att anv¨anda detta kunde man se kabeldragningar mellan hus, utifr˚an de adresser som s¨oktes.

26

(41)

6 Resultat

De huvudsakliga m˚alen med projektet var att med hj¨alp av en webservice kunna sl˚a upp geocodes mot externa leverant¨orer, rita ut accessn¨atet i ett kartgr¨anssnitt och att med hj¨alp av framtagna verktyg kunna st¨odja order- processer genom att visa n¨arhet mellan befintliga kundf¨orbindelser.

Den enda delen av systemet som var m˚alsatt men f¨orbis˚ags var WPF- till¨ampningen, som beslutades vara ¨overfl¨odig.

6.1 Geocode service

Den f¨orsta delen, vilken l˚ag som st¨ottepelare f¨or ¨ovrig funktionalitet i syste- met, som framtogs var WCF-tj¨ansten Geocode service. Med den g˚ar det att sl˚a upp adresser till koordinater med h¨og tr¨affs¨akerhet tack vare att den f˚ar data fr˚an ett flertal yttre leverant¨orer, j¨amf¨or resultat och skickar tillbaka det h¨ogst trov¨ardiga svaret f¨or en s¨okning. Tj¨ansten implementerade ¨aven en cache, d¨ar s¨okningar sparades f¨or att till˚ata att gamla uppslagningar kunde h¨amtas direkt fr˚an tj¨anstens lagrade historik, ist¨allet f¨or att varje g˚ang en uppslagning g¨ors skicka f¨orfr˚agningar till leverant¨orer.

Tj¨ansten hade ¨aven en intern begr¨ansning, throttle, som var till f¨or att f¨ors¨akra att anv¨andandet av den inte ¨overskred de begr¨ansningar som externa leve- rant¨orer framst¨allde. Detta implementerades i form av ett serialiserat objekt som hade en tidsst¨ampel och en ”request-counter”. Om r¨aknaren ¨overskred 2000 lade sig tj¨ansten i v¨antel¨age tills dess att det nuvvarande dygnet pas- serat, och d˚a ˚aterst¨alldes r¨aknaren till 0.

6.2 Anv¨ andargr¨ anssnitt i form av kartor

Anv¨andargr¨anssnitten som utvecklades f¨or systemet hade i syfte att rita ut kartor med tillh¨orande information f¨or de platser i DGC:s n¨at som hade geocodes. I 6.2.1 beskrivs vad ¨overvakningsverktyget hade f¨or anv¨andningsomr˚ade, i 6.2.2 beskrivs vad som implementerades i befintliga system och slutligen i 6.2.3 ˚aterges hur Google Earth anv¨andes f¨or att st¨odja n¨atplanering.

(42)

6.2.1 Overvakningsvy¨

I en av webbvyerna som implementerades gick det att se realtidsdata f¨or

¨overvakning i DGC:s n¨at. D¨ar ritades f¨argkodade f¨orbindelser ut mellan sta- tioner i stamn¨atet f¨or att kunna se om l¨ankar var uppe (gr¨on), nere (r¨od) eller av n˚agon anledning saknade status (gr˚a). Javascriptmodulen som ansvarade f¨or kartgr¨anssnittet i ¨overvakningsvyn uppdaterade kartan i intervall om tre minuter, f¨or att minimera svarstiden i gr¨anssnittet. ¨Overvakningsverktyget var en av de delar i systemet som anv¨ande sig av de geocodes som h¨amtades fr˚an Geocode service f¨or att rita ut platsmarkeringar f¨or stationerna p˚a en Sverigekarta.

6.2.2 Kundvy

I ett av de befintliga interna systemen hos DGC implementerades en vy f¨or att kunna se kundplatser p˚a en karta. I denna vy gavs funktionalitet f¨or att kunna se om n¨arliggande kundplatser hade fiberf¨orbindelser. Detta verktyg gav st¨od i framf¨orallt orderprocesser, genom att visa om fiberf¨orbindelser hos befintliga kunder potentiellt kunde delas till nya kunder. I kartvyn f¨or kundplatser gick det ¨aven att se vilken stamn¨atsnod kundplatser var kopplade till. Kundvyn kopplades samman med det befintliga systemet i form av en WinForms Webbrowser i gr¨anssnittet.

6.2.3 KML i Google Earth

KML-generering med hj¨alp av LINQ to XML gav st¨od f¨or att rita ut ett urval av kundplatser, med tillh¨orande linjer f¨or att visa kopplingar mellan dem och stationer i stamn¨atet. KML-filerna gick att ¨oppna i Google Earth och gav en ¨overblicksbild av DGC:s n¨at. I Google Earth gick det att bl¨addra igenom mappar med sorterade kundplatser, med tillh¨orande f¨orbindelser, och statio- ner. Genom att dubbelklicka p˚a platser och stationer i katalogerna f¨ardades utforskarens gr¨anssnitt ¨over Sverigekartan och centrerade sig p˚a den plats som hade valts. Med hj¨alp av den funktionalitet som finns i Google Earth kunde man se huskroppar och kabeldragningar med ett verklighetstroget per- spektiv, vilket gav st¨od b˚ade f¨or att se m¨ojliga fibersplittar i orderprocesser, och allm¨an n¨atplanering.

28

(43)

6.3 Enhetstestning och dokumentation

I projektet anv¨andes TeamCity (TC) [38] f¨or CI (Continuous Integration) och som byggserver. Med hj¨alp av de verktyg som finns i TC kunde mycket av den kod som skrevs kvalitetss¨akras och redundanta publika metoder och dylikt st¨adas bort. NUnit [39] anv¨andes f¨or att enhetstesta klasser och metoder vilket gjorde systemet enklare att underh˚alla och vidareutveckla. Samtliga delar av systemet dokumenterades b˚ade i form av kommentarer i kod och systemdokumentation i interna verktyg.

6.4 Uppfyllande av m˚ alen

Enligt de m˚al som i b¨orjan sattes upp f¨or projektet genomf¨ordes f¨oljande:

• En webtj¨anst (Geocode Service) togs fram som anv¨ande flera olika da- tak¨allor f¨or att sl˚a upp adresser till positioner som kunde ritas ut p˚a en karta.

• Positionsdata lagrades i en databas med m¨ojlighet att logga ¨andringar av positionsdata samt visa om adressen ¨andrats efter att en uppslagning hade gjorts.

• Med hj¨alp av datatypen SqlGeography gavs det m¨ojligthet att hitta n¨arliggande platser direkt i databaslagret.

• En intern unders¨okning utf¨ordes f¨or att samla ihop anv¨andarfall.

• En webapplikation togs fram f¨or att presentera data i olika vyer.

• WPF-kontrollen ans˚ags ¨overfl¨odig och framst¨alldes d¨arf¨or inte.

• Vyerna i webapplikationen som togs fram visades i andra system med hj¨alp av WebBrowser-kontrollen i C# WinForms.

De vyer som implementerades anv¨ander sig av den grundl¨aggande funk- tionalitet som i b¨orjan av projektet togs fram, och till˚ater anv¨andare att bland annat se individuella kundplatser p˚a en karta. Se ¨aven 6.1 och 6.2.

(44)

7 Slutsatser

Geocoding ¨ar f¨orh˚allandevis simpelt att implementera, beroende p˚a ¨onskem˚al om tr¨affs¨akerhet, datam¨angd och s¨akerhet. Att skriva ett program som h¨amtar geocodes fr˚an en leverant¨or skulle f¨or en nyb¨orjare i t.ex. C# g˚a fort, men n¨ar det kommer till att skriva cachefunktionalitet och tr¨affs¨akerhetskrav fr˚an s¨okningar blir implementationen snabbt mer komplex.

Karttill¨ampningar som i sin tur anv¨ander sig av koordinater som h¨amtas fr˚an en geocoder skrivs med hj¨alp av t.ex. ett javascript-bibliotek.

I projektet utvecklades en webservice i form av en WCF-tj¨anst som fun- gerade som uppslagsverk f¨or adresser, och svarade med koordinater. De vyer och ¨ovriga delar av systemet som tillkom anv¨ande sig i sin tur av koordina- terna som h¨amtades f¨or att rita ut platser i anv¨andargr¨anssnitt, och hade funktionalitet f¨or att visa n¨arhet mellan platser och ¨overvakningsstatus f¨or dem. Vyerna skrevs i ASP.NET MVC 4 och implementerade kartor med hj¨alp av javascript-bibliotek.

De geografiska till¨ampningarna som utvecklades och publicerades i DGC:s st¨odsystem gav en bra grund f¨or att hj¨alpa DGC att visualisera sitt n¨at.

KML anv¨andes f¨or detta ¨andam˚al till att rita DGC:s n¨at i Google Earth.

Systemet som framtogs f¨orenklade ¨aven det dagliga arbetet i b˚ade orderpro- cessen och fels¨okning av f¨orbindelser genom ett ¨overvakningsverktyg och en geografisk kundvy i interna system.

Systemets alla delar dokumenterades och enhetstestades f¨or att ge m¨ojlighet till vidareutveckling och underh˚all.

30

(45)

8 Rekommendationer

Fr˚an unders¨okningen som gjordes kom det fram att det ¨aven var ¨onskv¨art att f˚a fram brandbreddsutnyttjande f¨or f¨orbindelser. Detta skulle ¨oppna upp f¨or att kunna se geografiska problemomr˚aden och eventuella flaskhalsar p˚a ett mer ¨oversk˚adligt s¨att. Detta f¨oll dock bort p˚a grund av tidsbrist, men ¨ar en stark rekommendation f¨or framtida implementation.

Innan implementeringen av vyerna i kundportalen rekommenderas det ocks˚a att ut¨oka ˚atkomsts¨akerheten f¨or dessa vyer eftersom de inneh˚aller l¨ankar och data som ¨ar menade att f¨orbli interna. Till exempel m¨ojligheten till att g¨ora nya uppslagningar och ¨andra data i databaserna.

En sista rekommendation f¨or att avhj¨alpa avsaknaden av kompilator f¨or ja- vascript skulle vara att skriva om javascript-modulen geo.js som togs fram till att anv¨anda sig av TypeScript ist¨allet. Detta skulle underl¨atta fels¨okningen av projektet samt ge en extra hj¨alp att f˚anga upp fel som annars l¨att missas n¨ar javascript ¨ar med i bilden.

(46)

K¨ allf¨ orteckning Referenser

[1] Lantm¨ateriet, ”Geodesi”,

http://www.lantmateriet.se/Kartor-och-geografisk-information/

GPS-och-geodetisk-matning/Om-geodesi/

[Senast bes¨okt 18 april 2013.]

[2] Nationalencyklopedin, ”Geodesi”, http://www.ne.se/geodesi [Senast bes¨okt 18 april 2013.]

[3] Fr˚an Wikipedia: ”Geografiska Koordinatsystem”, 10 april 2013, http://sv.wikipedia.org/wiki/Geografiska koordinatsystem [Senast bes¨okt 26 april 2013.]

[4] Jeremy Bradley, CNN, ”Mapping the world, one street at a time”, 12 au- gusti 2009, http://edition.cnn.com/2009/TECH/08/12/digital.

mapping/index.html [Senast bes¨okt 12 april 2013.]

[5] Microsoft, ”Bing Data Suppliers”, http://windows.microsoft.com/

en-us/windows-live/about-bing-data-suppliers [Senast bes¨okt 6 maj 2013.]

[6] GeoCoder Pro, ”Geocoding services”,

http://www.geocoderpro.com/en/resources/

geocoding-service/#accuracy [Senast bes¨okt 12 april 2013.]

[7] Microsoft, ”.NET Framework 4.5”, http://msdn.microsoft.com/

en-us/library/vstudio/w0x726c2.aspx [Senast bes¨okt 28 maj 2013.]

[8] Josie Wernecke, informIT, ”A Quick Tour of KML: Geographic Visuali- zation for the Web”, 14 september 2008, http://www.informit.com/

articles/article.aspx?p=1276353 [Senast bes¨okt 22 april 2013.]

32

(47)

[9] Open Geospatial Consortium, ”KML”,

http://www.opengeospatial.org/standards/kml/

[Senast bes¨okt 22 april 2013.]

[10] Neil Sweeney, Fubra, ”Google Maps Free Alternatives”, 24 no- vember 2011, http://www.fubra.com/blog/2011/11/24/

google-maps-free-alternatives/

[Senast bes¨okt 29 maj 2013.]

[11] Adam DuVander, Programmable Web, ”7 Free Geocoding APIs”, 21 juni 2012, http://blog.programmableweb.com/2012/06/21/

7-free-geocoding-apis-google-bing-yahoo-and-mapquest/

[Senast bes¨okt 18 maj 2013.]

[12] Google, ”Maps/Earth APIs Terms of Service”, 10 maj 2013, https://developers.google.com/maps/terms

[Senast bes¨okt 22 maj 2013.]

[13] Google, ”Maps/Earth APIs Terms of Service FAQ”, 15 maj 2013, https://developers.google.com/maps/faq#tos

[Senast bes¨okt 22 maj 2013.]

[14] Microsoft, ”Microsoft BingR TM Maps Platform APIs’ Terms Of Use”, april 2013, http://www.microsoft.com/maps/product/

terms.html

[Senast bes¨okt 19 mars 2013.]

[15] Yahoo! ”Yahoo! Maps API Terms of Use”, 3 maj 2008, http://info.yahoo.com/legal/us/yahoo/maps/mapsapi/

mapsapi-2141.html

[Senast bes¨okt 19 mars 2013.]

[16] Yahoo! ”Yahoo! Maps API developer network’, http://developer.yahoo.com/maps/

[Senast bes¨okt 29 mars 2013.]

[17] MapQuest, ”Licensing and Terms Overview”, 2012, http://developer.mapquest.com/web/tools/

getting-started/terms-overview [Senast bes¨okt 12 april 2013.]

(48)

[18] MapQuest Developers, ”MapQuest Open Geocoding API Web service”, http://developer.mapquest.com/web/products/open/

geocoding-service

[Senast bes¨okt 29 maj 2013.]

[19] Open Streetmap, ”Wiki: Nominatim”, 18 maj 2013, http://wiki.openstreetmap.org/wiki/Nominatim [Senast bes¨okt 22 maj 2013.]

[20] OpenStreetMap Foundation, ”Main Page”, 27 november 2012, http://wiki.osmfoundation.org/wiki/Main Page

[Senast bes¨okt 29 mars 2013.]

[21] Open Streetmap, ”Wiki: MapQuest Open Initiative”, 19 april 2013, http://wiki.openstreetmap.org/wiki/MapQuest

[Senast bes¨okt 22 maj 2013.]

[22] NavTeq, ”What We Do”, 2012, http://www.navteq.com/company what we do.htm

[Senast bes¨okt 12 april 2013.]

[23] Open Streetmap, ”Wiki: Nominatim Special Phrases”, 14 juni 2012, http://wiki.openstreetmap.org/wiki/Nominatim/Special Phrases/SV

[Senast bes¨okt 12 april 2013.]

[24] Open Streetmap, ”Wiki: Nominatim Usage Policy”, 15 april 2013, http://wiki.openstreetmap.org/wiki/Nominatim usage policy [Senast bes¨okt 22 maj 2013.]

[25] Marcel van de Hoef & Joram Kanner, Bloomberg, ”TomTom Agrees to Acquire Tele Atlas”, 23 juli 2007, http://www.bloomberg.com/

apps/news?pid=newsarchive&sid=agT1Po33faG4&refer=

home

[Senast bes¨okt 12 april 2013.]

[26] Google, ”The Google Geocoding API”, 13 februari 2013, https://developers.google.com/maps/

documentation/geocoding/#Results [Senast bes¨okt 12 april 2013.]

34

(49)

[27] Open Streetmap, ”Open Streemap Database”, 17 september 2012, http://wiki.openstreetmap.org/wiki/Database

[Senast bes¨okt 18 april 2013.]

[28] MapQuest Developers, ”Geocode Quality Code Details”, http://www.mapquestapi.com/geocoding/

geocodequality.html [Senast bes¨okt 12 april 2013.]

[29] von Malmborg, Helena (19 juni 2006), Lantm¨ateriet.

Rapportserie: Geodesi och Geografiska informationssystem, ”J¨amf¨orelse av Epos och n¨atverks-DGPS” blad 8-9, kapitel 2.

http://www.lantmateriet.se/Global/Kartor%20och%

20geografisk%20information/GPS%20och%20m%C3%

A4tning/Geodesi/Rapporter publikationer/Rapporter/

LMV-Rapport 2006 5.pdf

[30] MSDN, ”LINQ To XML”, 2 augusti 2012,

http://msdn.microsoft.com/en-us/library/bb387098.aspx [Senast bes¨okt 15 april 2013.]

[31] MSDN, ”SqlGeography Class”, http://msdn.microsoft.com/en-us/

library/microsoft.sqlserver.types.sqlgeography.aspx [Senast bes¨okt 10 maj 2013.]

[32] MSDN, ”DbGeography Class”, http://msdn.microsoft.com/

SV-SE/library/system.data.spatial.dbgeography.aspx [Senast bes¨okt 10 maj 2013.]

[33] MSDN, ”SqlDataReader Class”, http://msdn.microsoft.com/

en-us/library/system.data.sqlclient.sqldatareader.aspx [Senaste bes¨okt 10 maj 2013.]

[34] Microsoft, ”Entity Framework”, http://msdn.microsoft.com/

en-us/data/ef.aspx

[Senast bes¨okt 10 maj 2013.]

[35] Open Streetmap, ”Wiki: Tiles”, 18 april 2013, http://wiki.openstreetmap.org/wiki/Tiles [Senast bes¨okt 13 maj 2013.]

(50)

[36] Google Maps Utility, ”MarkerClustererPlus for Google Maps V3”, http://google-maps-utility-library-v3.googlecode.com/svn/

trunk/markerclustererplus/docs/reference.html [Senast bes¨okt 2 maj 2013.]

[37] Google, ”Google Maps/Earth Ytterligare anv¨andarvillkor”, 1 mars 2012, http://maps.google.com/help/terms maps.html

[Senast bes¨okt 29 maj 2013.]

[38] JetBrains, ”TeamCity - Continuous Integration for Everybody”, 2013, http://www.jetbrains.com/teamcity/

[Senast bes¨okt 13 juni 2013.]

[39] NUnit, ”Home”, 2013, http://www.nunit.org/

[Senast bes¨okt 13 juni 2013]

[40] MapQuest, ”Terms of Use”, 2 januari 2013, http://info.mapquest.com/terms-of-use/

[Senast bes¨okt 29 mars 2013.]

[41] Lantm¨ateriet, ”WGS 84”,

http://www.lantmateriet.se/Kartor-och-geografisk-information/

GPS-och-geodetisk-matning/Referenssystem/

Tredimensionella-system/WGS-84/

[Senast bes¨okt 18 april 2013.]

[42] Google, ”KML”, 1 mars 2012, https://developers.google.com/kml/

[Senast bes¨okt 22 april 2013.]

[43] TypeScript, http://www.typescriptlang.org/

[Senast bes¨okt 22 maj 2013.]

36

(51)

Bilagor

I det h¨ar avsnittet finns figurer och appendix f¨or projektrelaterat material som inte ¨ar i n˚agon direkt anknytning till texten. Nedan f¨oljer bland annat ett ¨oversk˚adligt diagram f¨or systemarkitektur och exempelbilder p˚a de kart- vyer som utvecklades i projektet.

A Systemarkitektur

Figur 1: ¨Overgripande arkitektur f¨or geografitj¨anster och anknutna system.

I denna skiss visar pilarna ˚at vilket h˚all data fl¨odar.

(52)

B KML i en geografisk l¨ asare

Figur 2: KML-fil som ¨oppnats i Google Earth. I det h¨ar exemplet motsva- ras varje kartn˚al av en <Placemark>-tag i KML. Linjerna ¨ar dragna med

<LineString>-element.

Filer som ska ¨oppnas med t.ex. Google Earth skrivs i KML, f¨orslagsvis i en text-editor, och sparas med ¨andringen .kml. D¨arefter ¨ar det enda som kr¨avs att Google Earth eller n˚agon annan GIS-utforskare finns installerad f¨or att kunna ¨oppna och se KML:en.

38

(53)

B.1 Exempeldata i KML

<?xml version="1.0" encoding="utf-8"?>

<kml xmlns="http://www.opengis.net/kml/2.2">

<Document>

<open>1</open>

<name>Exempel KML</name>

<!-- En folder med ett namn, l¨amnas st¨angd som default -->

<Folder>

<name>Kategori</name>

<open>0</open>

<Placemark>

<name>Platsmarkering 1</name>

<Point>

<coordinates>18.0642,59.3334,0</coordinates>

</Point>

</Placemark>

...

<Placemark>

<name>Linje 1</name>

<LineString>

<extrude>1</extrude>

<tessellate>1</tessellate>

<coordinates>

18.0642,59.3334,0 17.6187,59.8511,0

</coordinates>

</LineString>

<Style>

<LineStyle>

<color>#ffffffff</color>

<width>5</width>

</LineStyle>

</Style>

</Placemark>

</Folder>

</Document>

</kml>

(54)

B.2 KML-generering med LINQ To XML

Figur 3: Exempelkod f¨or att generera en ”Folder” i KML med en upps¨attning element d¨ar latitud och longitud finns som property.

40

(55)

C Kartvy

Figur 4: Exempel p˚a en av kartvyerna som implementerades

(56)

D How-To

D.1 Controller

public class MyMapController : Controller {

public ActionResult ViewASite(int siteId) { return View(siteId);

}

public JsonResult GetSiteJson(int siteId) {

using(var db_client = new DatabaseServiceClient()) { return Json(db_client.GetSite(siteId));

} } }

42

(57)

D.2 Modul

(var geo = (function(module) { module.maps = [];

module.createMap(divParent, useCluster) {

var map = new window.google.maps.Map(element, zoom: 10,

mapTypeId: window.google.maps.MapTypeId.ROADMAP, maxZoom: 18,

disableDefaultUI: false,

center: new google.maps.LatLng(59.0, 18.0), mapTypeControlOptions: {

style: window.google.maps.MapTypeControlStyle.DROPDOWN_MENU }

module.maps.push({

map: map,

clusterer: useClusterer ? new window.MarkerClusterer(map, []), sites: []

});

return module.maps.length-1;

};

module.createSiteMarker = function(mapIndex, site, draggable) {

var lat_lng = new window.google.maps.LatLng(site.Latitude, site.Longitude);

var marker = new window.google.maps.Marker({

position: lat_lng, title: ’Site’,

draggable: draggable ? true : false });

(58)

module.maps[mapIndex].sites.push({

site: site, marker: marker, info: info });

};

module.createSimpleInfoWindow = function(mapIndex, marker) { var info = new window.google.maps.InfoWindow({

content: ’<p>Hej</p>’

});

window.google.maps.event.addListener(marker, ’click’, function () {

info.open(module.maps[mapIndex].map, marker);

});

return info };

return module;

}(window.geo = window.geo || {}));

44

References

Related documents

Rutinen som anv¨ands f¨ or att definiera operatorn, kan ha antingen ett eller tv˚ a argument, men eftersom funktionen normalt definieras i samma modul som inneh˚

F¨or att f¨orvissa oss om att s˚ a ¨ar fallet g¨or vi oss en bild av situationen

I en produktionsprocess blir enheterna, oberoende av varandra, felak- tiga med sannolikhet 0.01 och 300 enheter tillverkas. I en urna finns vita och

Man kan faktiskt g¨ora ett konfidensintervall f¨or medianen med konfidensgrad minst lika med 1 − α helt utan n˚ agra som helst antaganden om den bakom- liggande f¨ordelningen

Till exempel fick jag inte med n˚ agot Ljus- och Optikland i f¨ orsta f¨ ors¨ oket, och pilen mot Kosmologi, som ligger utanf¨ or den h¨ ar kartan, borde peka mer upp˚ at,

L¨ osningen till uppgift 2(b)(ii) fr˚ an provduggan Vi m˚ aste visa tv˚ a

Endast definitioner och trigonometriska r¨ aknelagar f˚ ar anv¨ andas utan att de f¨ orst bevisas. Sida 2

Matematiska institutionen Stockholms