Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[js] Treinstations in de Google Maps API

Pagina: 1
Acties:

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Topicstarter
De grote vraag is: hoe maak ik treinstations in de Maps API klikbaar zoals ze dat zijn op de Google Maps, de website?

Als ik dit voorbeeld pak en in een html-bestand gooi, dan merk ik dat treinstations gewoon "loze" dingen zijn. Het zijn geen POI's op de kaart die een popup maken en informatie laten zien. Ik hoef niet per se de actuele vertrektijden e.d. te zien in de popup, maar wel op z'n minst basic info zoals naam, adres, en andere metadata. Die popup heb ik nodig om verder dingen mee te gaan doen - maar daarvoor zullen de stations op z'n allerminst klikbaar moeten zijn.

Ik kan nergens vinden hoe/waar je dit aanzet, dus ben ik zelf maar wat gaan klooien - met weinig resultaat waar ik écht blij van wordt. Ik ging er eigenlijk vanuit dat dit standaard(-ish) in Maps ingebouwd zit, omdat op de website heb je het ook - ook al werkt het ontzettend traag. Maar het is er. De gegevens van waar die icoontjes op de kaart precies zitten en wat erachter schuilt, is gewoon beschikbaar - maar waar en hoe?

Ik heb twee dingen geprobeerd. Eerste dat ik vond was de Transit Layer. Deze maakt stations alleen niet klikbaar, en voegt daadwerkelijk gekleurde lijntjes toe, die ik dan weer net niet wil. Qua kleuren wil gewoon de default style. Eigenlijk is deze layer dus precies het tegenovergestelde van waar ik naar op zoek ben.

Tweede wat ik heb geprobeerd, is goochelen met de Places API. Die kun je meenemen in de Maps API, en dan een bounds object eraan meegeven en dan een zooitjes places terugkrijgen. Zo kun je met wat truukerij een volledig transparante "marker" over het station-icoontje heen die dingen toch nog klikbaar krijgen, alleen... net niet. Heel veel stations hebben meerdere "places" over elkaar heen zonder mogelijkheid om te weten welke daarvan moet "winnen", en meer dan een handjevol stationslocaties komen niet overeen tussen de tiles van Maps en de locaties van Places API, zodat je er net naast moet klikken. En uiteraard stations die helemaal niet uit de Places API teruggegeven worden.

Testcase: http://home.thany.nl/apps/MYMaps/test2.html
De halfzwarte vakjes zijn de klikhokjes (mooi woord :P) van de stations. Je ziet in deze view wrs wel waarom dit het nét niet is, en waarom het zo veelbelovend leek.

Places API leek dus een veelbelovende oplossing (workaround eigenlijk), maar het is em gewoon net niet. Het is ook duidelijk *niet* wat Google Maps (de website) gebruikt. En ik wil (het liefst) wat de website gebruikt, omdat dat gewoon 100% accuraat is - de stations zijn klikbaar op de juiste plek, er zijn geen rare duplicates, en het zorgt niet voor nóg meer HTTP requests dan er toch al gedaan worden - althans niet voordat je op een station klikt.

Dusss. Lang verhaal :)
Maar weet iemand dus hoe je treinstations en hun klikbaarheid in de Maps API krijgt zoals op de website?

[ Voor 3% gewijzigd door _Thanatos_ op 14-10-2014 17:20 ]

日本!🎌


  • JJ93
  • Registratie: Maart 2013
  • Laatst online: 21-11 11:31

JJ93

Error 418

Als ik het zo lees dan voldoet Info Window aan de eisen? Info Window weergeven na een klik op een marker

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Topicstarter
Ja, en hoe zorg ik ervoor dat treinstations als klikbare markers in de maps komen? Het is nml een compleet "loos" stukje. Gewoon een stukje tile wat niets doet.

Dus, idd, InfoWindow ga ik zeker nodig hebben, maar voordat ik daaraan toe ben, moet ik iets van een klik-event af kunnen vangen op stations.

日本!🎌


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Kun je die treinstations lat/lon/overige-data niet gewoon server-side ophalen (en cachen) en die "omcatten" naar wat je wil?
Overigens geen idee of dat mag van Google.

[ Voor 15% gewijzigd door RobIII op 15-10-2014 14:23 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Umbrah
  • Registratie: Mei 2006
  • Laatst online: 23:24

Umbrah

The Incredible MapMan

Staat er geen dataset op PDOK die je kan gebruiken, en kun je niet een viewer maken met PDROK/Openlayers/etc...?

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Topicstarter
Ja, ik kan best dingen van de Places API downloaden en cachen (en het zal een worst wezen of dat mag, het is Google's fout om deze data niet gewoon in Maps te integreren zoals op hun eigen Maps website). Ik kan ook stations van Wikipedia halen, gezien veel ervan wel coordinaten hebben. Ik kan ook alle namen van alle stations oplepen (van wikipedia bijv) en die in de Reverse Geocoding API gooien en dat cachen.

Het probleem is dan nog steeds welke daarvan ik weer moet geven. Ik heb nml geen mogelijkheid om te weten welke treinstations er op de kaart (in de tiles) zichtbaar zijn, en daarmee welke markers ik zichtbaar/klikbaar moet maken.

OpenLayer heb ik heel even snelletjes naar gekeken. Daarin is (in een eenvoudige implementatie) *geen enkele* POI uberhaupt klikbaar, laat staan stations. En veel te veel zit daar ook gewoon niet in.

Een ander alternatief in Bing Maps. Maar nog niet gekeken wat die biedt, en of daar uberhaupt wel een API van is.

[ Voor 32% gewijzigd door _Thanatos_ op 15-10-2014 15:11 ]

日本!🎌


  • asstastic
  • Registratie: Oktober 2014
  • Laatst online: 24-09-2023
Een anders opties is (minder leuk), zelf alle trein stations in kaart brengen met long lat en dit in een xml of database gooien, een javascript gebruiken voor de maps integratie met de info bubble en de gegevens aanroepen als iemand er op klikt

Doe eens klik

[ Voor 16% gewijzigd door asstastic op 16-10-2014 13:49 . Reden: url ]


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Topicstarter
Dat zou kunnen.

Maar dan nóg heb ik geen idee waneer het icoon van een station zichtbaar komt op de kaart. Verschillende stations worden bij verschillende zoomniveau's zichtbaar. En ik wil uiteraard dat je kunt klikken op dat wat zichtbaar is, en niet kunt klikken op dat wat niet zichtbaar is.

Plus dat GM meestal niet blij is met heel veel markers. Ik richt mijn applicatie op het Japanse grondgebied, en ik heb een database met alle stations, more or less, maar het zijn er meer dan 9000 (echt :))

Maargoed, allemaal leuke alternatieven, maar hoe kan het dat ik niet de functionaliteit van Google Maps hiervoor kan gebruiken? Het zit er al in, en het werkt prima. Waarom zou ik dan een vierkant wiel opnieuw gaan uitvinden? Dat lijkt me niet logisch. De voorkeur ligt dus nog steeds bij de functionaliteit uit GM halen, en niet zelf iets halfs in elkaar batsen...

Om het anders te zeggen; hotels wil ik ook klikbaar hebben. En dat werkt. Maar daarvoor ga ik dus niet zelf een database met tig-duizenden hotels erin stampen. Voor stations zou dat toch ook moeten gelden?

[ Voor 23% gewijzigd door _Thanatos_ op 17-10-2014 17:54 ]

日本!🎌


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Topicstarter
Iemand nog een idee verder? Google Maps zelf zal toch *iets* gebruiken om te tonen wat ze tonen? Die data komt toch niet uit de lucht vallen?

日本!🎌


  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 18-11 20:57
Via de NS-API kun je een XML-bestand krijgen met daarop lat/long-coördinaten van alle treinstations in Nederland en een aantal in het buitenland. Bij OpenOV kun je diezelfde data vinden in CSV-formaat.

[ Voor 24% gewijzigd door Alex) op 21-10-2014 21:54 ]

We are shaping the future


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Topicstarter
Sorry voor de late reply. Maar kijk eens aan, dat is goed nieuws zeg :)

Alleen nu nog, hoe kom ik te weten welke treinstation-icoontjes werkelijk zichtbaar zijn in de tiles?

日本!🎌


  • Mulder_fox
  • Registratie: Mei 2004
  • Laatst online: 13-11 14:21
Volgens mij is dat niet te bepalen.

De tiles zijn letterlijk gewoon plaatjes.

Als ik het goed begrijp wil je een eigen laag linken aan de stations in de tiles?
Of wil je een station in de tile klikbaar maken en daar je eigen info aanhangen?

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Topicstarter
Dat laatste ja.

Ik bedoel, als google die icoontjes in de tiles weet te zetten, zal er toch ook wel ergens op te vissen zijn welke dat dan precies zijn. Dat lijstje wil ik hebben, zodat ik daar op z'n allerminst een klikbaar vierkantje van kan maken (en wat er na klikken gebeurt, daar kom ik wel uit, maar het klikbaar maken is het grootste probleem).

日本!🎌


  • Umbrah
  • Registratie: Mei 2006
  • Laatst online: 23:24

Umbrah

The Incredible MapMan

De tiles zul je niet zomaar kunnen aanpassen tenzij je zelf een GIS server host met een WMS service er op die tiles/afbeeldingen kan uitspuwen op basis van je symbologie (het plaatje) en een laag (de geospatiele data).

Je zult ook moeten nadenken over wat het doel is van je service. Als het om japan gaat, zul je met de standaard Google mercator projectie een leuke kaart kunnen maken, maar waarschijnlijk zullen de japanners zelf een regionale lambert projectie fijner vinden/logischer.

Google's WSG84/WebMercator projectie is vrij "westen" geörienteerd. Om de invloed van die projectie even aan te tonen: https://gmaps-samples.goo...runk/poly/puzzledrag.html

In Nederland geven we regionaal eigenlijk alles weer in RD_New. Ik heb hier even een simpel kaartje gepubliceerd (oplaadpalen, 3 lagen, 2 datasets): http://www.arcgis.com/hom..._NL%2FMapServer&source=sd

Ik heb de dataset oplaadpunten op basis van een query van plaatjes voorzien, om ze in categorieën in te delen. Je kunt in die viewer door op "modify map" te drukken met een SQL-esque taaltje op die manier ook op ladertype filteren. De overige lagen (provincies/gemeentes) is een "geospatial join" op basis van de punten (oplaadpalen) binnen de administratieve gebieden (provincies en gemeentes) datasets, met een simpele "sum" die daarop ook symbologie baseerd, dus, een soort heatmap.

Je kan de lagen uitzetten, en aanzetten... en alles wordt gewoon als een WMS aangeboden zodat je het binnen elke website kan gebruiken. De link die ik je gaf is gewoon de ESRI viewer die er een leuk achtergrond kaartje (kan je ook wisselen, Bing, OSM, NationalGeographic, en als je wat moeite doet: Google is ook mogelijk).

Je zult dit denk ik wat simpeler aan moeten pakken. Top-down:

1. Wat is je doelgroep (Japanners) > Kies een "kaart" die bij ze past. Een lokaal CRS of als je twijfelt, een globale projectie zoals WSG84/WebMercator. Dikke kans dat je coordinaten al in die typische doubles zijn, sommige projecties hebben eigen coordinaten. NL's RD_New gaat grofweg van 0>300.000 in de breedte, en 300.000>600.000 in de hoogte (ons nulpunt zit in Parijs, dat is dus punt 0,0, vroeger was het Amersfoort maar toen hebben we beslist dat we geen negatieve nummers meer willen)
2. Wat is je data? > stations.
3. Wat is je symbologie? > je plaatje
4. Hoe bouw je die laag op? > Je GIS/dienst. Je kan met de Google API vaak wel wat knutselen maar ideaal is het zelden. Volgens mij kan je met KML wel een hoop in Google Maps. Misschien kun je je eigen laag beter aanbieden via iets van Geoserver...
5. Hoe bouw je met die laag een kaart? Heb ik meer lagen nodig? Je wilt dus een "basiskaart". Je keuze is Google. Is dat wel het beste? OSM is makkelijker mee te werken...

Om mijn laadpalen voorbeeld er weer even bij te halen, een REST interface-achtig schermpje voor de laag:
http://81.95.155.2/arcgis.../Oplaadpalen_NL/MapServer

Het draait op ArcGIS server, maar je kan in feite op zoveel manieren die dienst aanbieden dat ik hem zelfs in Google kan krijgen (druk maar eens op Generate KML). Je kan hem zelfs in bijvoorbeeld de PDOK viewer of openlayers gebruiken:

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<script src="http://kaart.pdok.nl/api/js/OpenLayers.js"></script>
<script src="http://kaart.pdok.nl/api/js/proj4js-compressed.js"></script>
<script src="http://kaart.pdok.nl/api/js/pdok-api.js"></script>
<link rel="stylesheet" href="http://kaart.pdok.nl/api/styles/default/style.css" type="text/css">
<link rel="stylesheet" href="http://kaart.pdok.nl/api/styles/api.css" type="text/css">
<script>
OpenLayers.ImgPath="http://kaart.pdok.nl/api/img/";
var config = {
"zoom":0,
"baselayer":'BRT',
"loc":'394271.52, 795301.76',
"pdoklayers":'BRT,BRTTIJDELIJK,BRTGRIJSTIJDELIJK,LUFO',
"wmsurl":'http://81.95.155.2/arcgis/services/external/Oplaadpalen_NL/MapServer/WMSServer',
"wmslayers":'2',
"markersdef":'http://kaart.pdok.nl/api/js/pdok-markers.js',
"layersdef":'http://kaart.pdok.nl/api/js/pdok-layers.js'
};

function createPDOKKaart() {var api = new Pdok.Api(config);return api;}
</script>

[ Voor 19% gewijzigd door Umbrah op 30-10-2014 12:06 ]


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Topicstarter
Mooi verhaal, maar zo in detail hoeft het niet. Wat ik wil is zo simpel als het maar zijn kan:

Een Google map, standaard. Met alle klikbaar POI's die er klikbaar uitzien, inclusief stations. Dus letterlijk wat maps.google.com ook doet.

Om op je punten in te gaan:

1. Doelgroep is gewoon iedereen. Of niemand. Aanvankelijk mezelf, maar uiteindelijk de hele wereld. Net als bij Google Maps dus.
2. Data is eigenlijk de POI's die Google verzuimt om mee te geven in de kaart. Stations dus.
3. Geen idee. De icoontjes die in de tiles staan, zijn prima en mensen zullen die ook gewoon herkennen voor wat ze zijn. Geen reden om iets nieuws te verzinnen.
4. Ik bouw geen lagen. Ik heb een basislaag en heb daarin een "gebiedjes" die klikbaar moeten zijn. Of dat een extra laag moet zijn of niet, is triviaal, en nu niet belangrijk.
5. OSM is geen optie: te weinig detail. Ik wil nml alle POI's die GM biedt, beschikbaar hebben, en de in GM missende POI's (stations) daaraan toevoegen. Wederom, hoe dat in de maps-systematiek werkt, boeit me niet, ik moet eerst aan de juiste data komen, en op de juiste manier beslissen wat ik wanneer moet weergeven.

日本!🎌


  • Umbrah
  • Registratie: Mei 2006
  • Laatst online: 23:24

Umbrah

The Incredible MapMan

Tsja, wat je wilt is dus toch niet zo simpel. Vooral punt 4. Je vind dat een kaart niet genoeg detail heeft, dus wil je hem verreiken. Dat is een laag... Dat zul je moeten aanbieden ergens. Mijn advies is om een Japanse GIS-er te zoeken of eens in een OSM community te posten,.

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Topicstarter
Een alternatieve GIS gaat em niet worden, want ik wil ook alle andere POI's die in GM zitten. Niet alleen stations, maar ik wil ook hotels, restaurants, dierentuinen, parken, tempels, en al het andere klikbaar houden, liefst met de popup die je standaard krijgt. Die functionaliteit moet absoluut niet verloren gaan. En ook met de krankzinnige hoeveelheid detail die GM biedt.

Ik snap dat je OSM steeds aanraadt, en ik zie daar de voordelen ook wel van, maar dat is voor dit gewoon geen optie.

日本!🎌


  • Umbrah
  • Registratie: Mei 2006
  • Laatst online: 23:24

Umbrah

The Incredible MapMan

Dan denk ik dat je gewoon een KMZ moet gaan maken en aanleveren, en op die manier je laag moet aanbrengen in Google Maps:

https://developers.google.com/maps/support/kmlmaps

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Topicstarter
Ja, dat is leuk en aardig, maar dat is het probleem niet. Het probleem is hoe ik ervoor zorg dat de POI's in de KMZ matchen met de icoontjes in de files!

Daarom zal ik, hoe je het ook wendt of keert, of de een of andere manier te weten moeten komen wat er allemaal aan features *zichtbaar* is binnen de bounds van de view.

Google Maps, de website, bewijst dat dit kan. Nu nog: hoe?

日本!🎌


  • Sthomkop
  • Registratie: April 2010
  • Laatst online: 28-07 10:51
Volgens mij denk je op een te laag niveau. Als je een bibliotheek gaat gebruiken (wat je toch zult moeten doen als je per se Google Maps wilt hebben), dan moet je helemaal niet na willen denken over wat er zichtbaar is of niet. Dat moet die bibliotheek voor je doen (en dat doet hij ook, voor zover ik weet dan toch).

Als je echt Google Maps wilt hebben, aangevuld met wat plaatsen die jij belangrijk vindt, dan klinkt het naar mijn mening het meest logische om die plaatsen dan ook in te voeren bij Google en vervolgens een 'gewone' Google Maps view te maken met jouw kaart met extra informatie erin.

Mocht je dat niet willen, dan zit er volgens mij toch echt niks anders op dan Umbrah's advies op te volgen en de hele reutemeteut zelf te gaan hosten/maken (wat hij naar mijn mening keurig uitlegt overigens :)).

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Topicstarter
Uh ja. Wat wil je daar nou precies mee zeggen? Dat is *precies* wat ik wil. Een stuk data die GM aanvult met de data die ik wil (stations). De vraag is: waar is de data, en hoe giet ik dat in GM?

NOGmaals: Google heeft die data. Google weet hoe de kaart aan die data te koppelen is. Dat wil ik ook. Gewoon precies dat. Ik wil niet lullig doen, maar ga gewoon es naar maps.google.com en klik op een treinstation. Dat wil ik ook. Simple as that.

Hoe dat moet, kan me niet schelen, maar ik moet het wel weten.

Wat dat betreft denk ik dus juist op een heel hoog niveau. Ik zit nml helemaal niet in de details te roeren. Die zijn op dit moment nog helemaal niet belangrijik.

日本!🎌


  • Sthomkop
  • Registratie: April 2010
  • Laatst online: 28-07 10:51
Oké, sorry, ik heb je geloof ik verkeerd begrepen. Meerdere mensen trouwens, volgens mij, als ik deze thread lees. Een plaatje zegt meer dan duizend woorden zegt men altijd, dus voor de zekerheid: je wilt deze informatie?

Afbeeldingslocatie: http://imageshack.com/a/img540/6862/8hzc0y.png

Dus kortgezegd: de dienstregeling/vertrektijden?

Indien ja
Zoals je al ziet in het plaatje lijkt het erop dat Google die informatie van verschillende plekken haalt, waarschijnlijk periodiek. De eerste (maar niet erg realistische, wellicht) optie is dus om zelf data van verschillende sites te halen. De NS heeft een API geloof ik, maar ik heb er nooit mee gewerkt, dus ik weet niet hoe (goed) hij werkt.

De tweede optie is om te proberen het via Google te krijgen. Dat is lastig, zo niet onmogelijk. Enigszins begrijpelijk wellicht, maar Google maakt niet al zijn data eenvoudig beschikbaar.

De derde optie is om Google te scrapen. Traag, lastig en waarschijnlijk niet legaal. En zelfs al is het legaal, dan is het niet netjes. Maar goed, het kan.

Indien nee
Zou je alsjeblieft een plaatje kunnen laten zien van wat je wilt hebben, want anders begrijp ik het waarschijnlijk gewoon niet en kan ik je ook niet helpen :)

edit:
Ik zie dat je ook op andere plekken hebt rondgevraagd. Het lijkt er eerlijk gezegd gewoon op dat er geen goede oplossing is, omdat Google zijn data niet vrijgeeft...

[ Voor 10% gewijzigd door Sthomkop op 02-11-2014 17:51 ]


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Topicstarter
Okay:
Afbeeldingslocatie: http://home.thany.nl/browsable/dit-wil-ik.png
Die blauwe treinstation-icoontjes zijn klikbaar en krijgen een handje als je erover hovert. Het naampje erbij is het resultaat van zo'n hover. Als je klikt, krijg je een InfoWindow met vanalles erin.

Enige dat ik wil, is dat die icoontjes *klikbaar* worden. En *verder niets*. Meer is fijn, maar niet nodig.

Waarom Places API niet werkt:
1) Het returnt plaatsen die geen icoontje hebben
2) Het returns plaatsen niet, die wel een icoontje hebben.
Niet accuraat genoeg dus.

Ik heb ook al zitten kijken naar Directions API, maar daarmee kun je alleen maar een "van A naar B" request doen, en niet een "wat is hier allemaal" request.
/edit3
En de Directions API werkt alleen voor stations in gebieden waar coverage is voor het OV. In mijn voorbeeld hierboven, in de stad Istanbul, is geen Direction API coverage, maar de stations hebben nog steeds een popup. Dat is het tweede bewijs dat de Directions API niet is wat ik hebben moet.

Dus wat nu?...

/edit: waarom werkt dat plaatje niet? url klopt echt... /edit-edit: nvm, het werkt weer

/edit2: jouw edit: ja nooit op 1 paard wedden heh. experts zitten in alle hoeken ;)

[ Voor 24% gewijzigd door _Thanatos_ op 04-11-2014 10:19 ]

日本!🎌


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Topicstarter
Iemand nog een idee?

日本!🎌


Verwijderd

Ik ben echt bang dat je moet accepteren dat dit niet kan. Als je deze functionaliteit "aan" zou kunnen zetten, dan had je dat wel gevonden in de documentatie of had iemand het je kunnen vertellen. Je zou het Google kunnen vragen, maar reken niet op het antwoord dat je graag wilt horen.

Als je iets wilt dat een ander niet mogelijk wil of kan maken, dan is helaas de enige optie om het zelf te gaan bouwen. Als je je eigen pins plaatst kun je ze ook aanklikbaar maken met wat je maar wilt.

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Topicstarter
Zoals al een paar keer eerder gemeld, ja ik kan eigen pins toevoegen, maar NEE, google weet niet automagisch wanneer ze wel en niet getoond moeten worden, dus dat moet ik per zoomniveau gaan bijhouden/uitpluizen. Dat is klotewerk, zeker voor informatie die al ergens moet bestaan.

Het erge is nog, "het kan niet" is gewoon niet waar. Je kunt duidelijk zien dat je op maps.google.com stations gewoon kunt aanklikken. Die functionaliteit zal toch érgens vandaan komen?...

日本!🎌


  • Umbrah
  • Registratie: Mei 2006
  • Laatst online: 23:24

Umbrah

The Incredible MapMan

Tsja, je maakt toch echt een denkfout hier. Dat je zelf al per pin de locatie zit te bepalen wil zeggen dat je data mogelijk geen coordinatenstelsel heeft. Je zult je data coordinaten in webmercator moeten geven voor Google Maps.

Daarnaast maak je een denkfout in de orde: "als ik rechts klik, save as doe op een webpagina heb ik toch ook de broncode?". Die functionaliteit komt uit de data en wordt gepresenteerd door Google's server -- waar jij geen toegang toe hebt.

Kort door de bocht ziet >ELK< GIS er zo uit. Of het nou google is, open source (postgresql/geoserver/openlayers), of ESRI (SDE/Post/MSSQL/Oracle > ArcGIS Server < ArcGIS for JavaScript/Online/Silverlight/Mobile/etc), of bloody BING: de kern architectuur is hetzelfde.

Je hebt een database server die geospatiale features (polygonen, punten, lijnen, tabellen, rasters) "host". Elke klasse is een tabel in een database, en elke feature is een record. Het is een database... meer niet. Met één extra: bijna elke record heeft direct of indirect een geo-component. Je hebt dus een laag die bijvoorbeeld de volgende velden heeft:
* ID
* Type (station/metro/bushalte)
* Naam
* Datum open
* Website
* etc...

Vervolgens heb je een server, die al dan niet via OGC-standaarden die data vooraf gedefinieerd inleest, verrijkt, en aanbied met een set capabilities. Zo bepaald die server: kleurtjes, dat die dataset met stations op basis van het veld "type" andere symbologie krijgt, en dat hij ze clustert als je verder dan een bepaald zoomniveau komt. Dit ontsluit hij naar buiten toe dus via zo'n OGC standaard (of Google's eigen dingetje waar wij alleen via wat er in de API's staat bij kunnen). Omdat elke feature een locatie heeft, een grootte (indien het een lijn, raster, of polygoon is), kan de server keurig netjes "tiles" genereren. Doorgaans bied de server óf gewoon features aan (zodat de client zelf kan weten HOE hij ze rendert), of kant en klare tiles in PNG/PNG32/JPG/GIF/BMP/TIFF/SVG formaat. Google doet zowel PNG als SVG, waar vooral de laatste groot aan het worden is.

De client applicatie (maps.google.com, of je android app, etc...) bepaalt vervolgens WAT er aan data bevraagd wordt van de server, die vervolgens het op de achtergrond goed maakt met de database. Een request kan zijn: "teken deze schaal voor mij met dit als bounding box (X/Y coördinaten linksboven, X/Y coördinaten rechtsonder)". Of, indien er "fixed scales" zijn gemaakt (zoals bij Google) ter behoeve van een cache, "geef me alle tiles binnen deze bounding box van die schaal". En ga er maar vanuit dat Google cached. Ik doe het op mijn kleine GIS servertjes doorgaans niet, omdat juist tile-caches je het nadeel geven van "fixed scales", terwijl ik liever heb dat mensen traploos kunnen zoomen. Hoewel SVG-Tiles dat een beetje opvangen. Enfin:

* Je hebt geen controle over de presentatie laag.
* Die GIS server heb je milde controle over via die API's maar die doen niet wat je wilt.
* De database heb je helemaal niks over te zeggen. Je wilt juist dat de server wat van jouw data gaat aanbieden op jouw stijl, dus een tweede databron.

De enige manier waarop ik kan bedenken dat je dit zelf kan doen is door het helemaal zelf te doen. BING bied basiskaarten aan met in feite alles wat Google heeft. Wat je dan nog moet hebben is een GIS server (geen zorgen, database kan je nog ontwijken voor iets simpels), waar je dmv. QGIS (desktop) of iets dergelijks een mooie "shape file" aan vast zet met al je stations er in. Vervolgens maak je een service (basiskaart + shape file) aan, en ga je die in openlayers ontsluiten met je eigen popups en alles er in geprogrammeerd. De sky is de limiet.

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Topicstarter
Dat je zelf al per pin de locatie zit te bepalen wil zeggen dat je data mogelijk geen coordinatenstelsel heeft
Dit snap ik niet. Het isn mijn data niet. Het is Google's data. En die heeft wel degelijk een coordinatenstelsel. Hoe anders komen die treinstation-icoontjes op de kaart? Dat moet érgens vandaan komen.
Daarnaast maak je een denkfout in de orde: "als ik rechts klik, save as doe op een webpagina heb ik toch ook de broncode?".
Dat doe ik helemaal niet. Ik vind het alleen raar dat het zo ingewikkeld moet zijn. Ik bedoel, als de treinstation-icoontjes getekend kunnen worden, is het toch een werkje van niks om ook gelijk mee te geven waar ze getekend zijn? Het is zó simpel dat ik gewoon niet kan geloven dat Google (zelfs Google!) dit vergeten is. Zeker als je bedenkt dat ALLE andere poi's wel klikbaar zijn.

En vervolgens een heel verhaal over GIS servers. Ja, ehm. Bedankt voor de uitleg, daar gaat het niet om, maar het had niet gehoeven.

In the end moet ik, hoe je het ook wendt of keert, van Google weten welke stations in welke tiles getekend zijn. Hoe anders kan ik vakjes maken die de icoontjes klikbaar maken :?
Ik heb al die data ook niet. En al zou ik alle stations ter wereld met lat/lon in een database hebben, dan nóg weet ik niet welke stations op welke zoomniveaus getekend worden.

Ik denk dus dat jij juist een denkfout maakt, nml dat je probeert het allemaal zo moeilijk mogelijk te maken. Het is voor jou misschien gesneden koek, maar ik wil "gewoon" een kaartje. Voor nu, niets meer dan dat. Maar dan wel met stations die op z'n minst iets van een event afvuren als je erop klikt. Dat al, zou genoeg zijn.

日本!🎌


  • FotW
  • Registratie: Juli 2012
  • Laatst online: 24-10 13:17
Je kunt toch de NS api gebruiken om de stations met lat/long te krijgen: http://www.ns.nl/api/api ?. Vervolgens voeg je die als marker toe aan een map https://developers.google...tation/javascript/markers . En tot slot knoop je daar een infowindow aan https://developers.google...xamples/infowindow-simple.

Of denk ik nu te simpel?

  • Kenhas
  • Registratie: Oktober 2006
  • Laatst online: 21-11 16:06
FotW heeft al grotendeels het antwoord gegeven maar misschien nog even een kleine aanvulling

Stap 1 : lat & long ophalen via NS API
Stap 2 : Kies welke icoontje je wil: http://mapicons.nicolasmollet.com/ https://developers.google...ustomizing/custom-markers
Stap 3 : extent van de kaart instellen : https://developers.google...erence?csw=1#LatLngBounds
Stap 4 : Markers toevoegen met lat long (link van FotW)
Stap 5 : Stel het zoom niveau in waarop de markers zichtbaar worden
code:
1
2
3
4
5
6
google.maps.event.addListener(map, 'zoom_changed', function() {
    zoomLevel = map.getZoom();
    if (zoomLevel == 10) {

        marker.visible = true;
    }

Stap 7 : info window : zie link fotW

2x Marstek Venus E 5.12 v153 - CT003 V117 - BMS 212 en 215


Verwijderd

_Thanatos_ schreef op maandag 24 november 2014 @ 16:52:
Dat doe ik helemaal niet. Ik vind het alleen raar dat het zo ingewikkeld moet zijn. Ik bedoel, als de treinstation-icoontjes getekend kunnen worden, is het toch een werkje van niks om ook gelijk mee te geven waar ze getekend zijn? Het is zó simpel dat ik gewoon niet kan geloven dat Google (zelfs Google!) dit vergeten is. Zeker als je bedenkt dat ALLE andere poi's wel klikbaar zijn.
Als treinstations bij Google een POI waren, had je ze inderdaad kunnen aanklikken. Kennelijk zijn het echter een soort illustraties, vergelijkbaar met wegnummers, straatnamen en plaatsnamen. Ook dat zijn elementen waar je niet bijkunt. Men heeft er voor gekozen deze niet op te nemen in de API.

Accepteer dat en plaats je eigen icoontjes op basis van een eigen database. Het is ook niet zo lastig om zelf, op basis van de weergave van de gebruiker (posities+zoom) te bepalen welke stations je wilt tonen. Praktisch elke mashup met Google Maps doet dit d:)b

  • iH8
  • Registratie: December 2001
  • Laatst online: 17-06-2024

iH8

Umbrah schreef op maandag 24 november 2014 @ 07:41:
Kort door de bocht ziet >ELK< GIS er zo uit. Of het nou google is, open source (postgresql/geoserver/openlayers), of ESRI (SDE/Post/MSSQL/Oracle > ArcGIS Server < ArcGIS for JavaScript/Online/Silverlight/Mobile/etc), of bloody BING: de kern architectuur is hetzelfde.
Er zijn zoveel meer mogelijkheden dan de architectuur die je hier probeert te slijten.
Umbrah schreef op maandag 24 november 2014 @ 07:41:
Je hebt een database server die geospatiale features (polygonen, punten, lijnen, tabellen, rasters) "host". Elke klasse is een tabel in een database, en elke feature is een record. Het is een database... meer niet. Met één extra: bijna elke record heeft direct of indirect een geo-component. Je hebt dus een laag die bijvoorbeeld de volgende velden heeft:
* ID
* Type (station/metro/bushalte)
* Naam
* Datum open
* Website
* etc...
Dat hoeft dus helemaal niet je kunt je data gewoon rustig in CSV, JSON, GeoJSON oid hebben zitten.
Umbrah schreef op maandag 24 november 2014 @ 07:41:
Vervolgens heb je een server, die al dan niet via OGC-standaarden die data vooraf gedefinieerd inleest, verrijkt, en aanbied met een set capabilities. Zo bepaald die server: kleurtjes, dat die dataset met stations op basis van het veld "type" andere symbologie krijgt, en dat hij ze clustert als je verder dan een bepaald zoomniveau komt. Dit ontsluit hij naar buiten toe dus via zo'n OGC standaard (of Google's eigen dingetje waar wij alleen via wat er in de API's staat bij kunnen). Omdat elke feature een locatie heeft, een grootte (indien het een lijn, raster, of polygoon is), kan de server keurig netjes "tiles" genereren. Doorgaans bied de server óf gewoon features aan (zodat de client zelf kan weten HOE hij ze rendert), of kant en klare tiles in PNG/PNG32/JPG/GIF/BMP/TIFF/SVG formaat. Google doet zowel PNG als SVG, waar vooral de laatste groot aan het worden is.
Dat hoeft dus ook helemaal niet zo. Je kunt best een losse tileserver hebben die tiles serveert met pure imagery zonder vooraf definieerde geometries daarop aan te brengen en die naderhand aan de hand van losse datasets clientside genereren.
Umbrah schreef op maandag 24 november 2014 @ 07:41:
De client applicatie (maps.google.com, of je android app, etc...) bepaalt vervolgens WAT er aan data bevraagd wordt van de server, die vervolgens het op de achtergrond goed maakt met de database. Een request kan zijn: "teken deze schaal voor mij met dit als bounding box (X/Y coördinaten linksboven, X/Y coördinaten rechtsonder)". Of, indien er "fixed scales" zijn gemaakt (zoals bij Google) ter behoeve van een cache, "geef me alle tiles binnen deze bounding box van die schaal". En ga er maar vanuit dat Google cached. Ik doe het op mijn kleine GIS servertjes doorgaans niet, omdat juist tile-caches je het nadeel geven van "fixed scales", terwijl ik liever heb dat mensen traploos kunnen zoomen. Hoewel SVG-Tiles dat een beetje opvangen.
Tiles on the fly genereren voor traploze zoom is misschien leuk op een intranet met GB verbindingen maar voor webmaps natuurlijk totaal not done en een complete performance drama. Ik snap ook niet waarom je daar hier over begint.
Umbrah schreef op maandag 24 november 2014 @ 07:41:
De enige manier waarop ik kan bedenken dat je dit zelf kan doen is door het helemaal zelf te doen. BING bied basiskaarten aan met in feite alles wat Google heeft. Wat je dan nog moet hebben is een GIS server (geen zorgen, database kan je nog ontwijken voor iets simpels), waar je dmv. QGIS (desktop) of iets dergelijks een mooie "shape file" aan vast zet met al je stations er in. Vervolgens maak je een service (basiskaart + shape file) aan, en ga je die in openlayers ontsluiten met je eigen popups en alles er in geprogrammeerd. De sky is de limiet.
Dat hoeft helemaal niet met Bing, kan ook keurig met Mapbox, OpenLayers, OpenStreetMaps om er maar een paar te noemen. Je hebt helemaal geen GIS server nodig voor het aanbieden van features. Je kunt overal gewoon open datasets krijgen en als deze al niet in GeoJSON aangeleverd worden ze makkelijk omzetten met tools zoals bijvoorbeeld TopoJSON en dan deze gewoon aanbieden via HTTP.

Ik vind het echt uitermate jammer dat jij webmapping over doet komen als dat het niet zonder GIS applicaties en servers kan want dat is helemaal niet zo. Die perceptie wordt alleen maar in stand gehouden door mensen die hun geld er mee verdienen moeten. Slecht voor de consument.

Hier paar demos: Mapbox imagery, GeoJSON dataset, Leaflet map. Is geen GIS aan te pas gekomen:



[ Voor 0% gewijzigd door iH8 op 25-11-2014 14:23 . Reden: Extra vid geupped voor de duidelijkheid ]

Aunt bunny is coming to get me!


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Topicstarter
Maar zijn daarop de (trein)stations discrete aanklikbare punten, net als hotels, parken, winkels, banken, en bergtoppen?

Want dat is waar het in dit topic om gaat. Niet om het maken van een zo ingewikkeld mogelijk systeem, of om te showcasen wat bepaalde systemen allemaal nog meer kunnen. No offense, maar ik zoek alleen een map die ongeveer werkt zoals Google Maps (of die GM zelf) maar dan met aanklikbare stations.

Dat is het. Meer niet. Echt waar. Wat ik daarmee allemaal van plan ben, ga ik zelf maken. Dat vraag ik hier ook niet ;)

[ Voor 63% gewijzigd door _Thanatos_ op 25-11-2014 22:41 ]

日本!🎌


  • iH8
  • Registratie: December 2001
  • Laatst online: 17-06-2024

iH8

_Thanatos_ schreef op dinsdag 25 november 2014 @ 22:39:
Maar zijn daarop de (trein)stations discrete aanklikbare punten, net als hotels, parken, winkels, banken, en bergtoppen?

Want dat is waar het in dit topic om gaat. Niet om het maken van een zo ingewikkeld mogelijk systeem, of om te showcasen wat bepaalde systemen allemaal nog meer kunnen. No offense, maar ik zoek alleen een map die ongeveer werkt zoals Google Maps (of die GM zelf) maar dan met aanklikbare stations.

Dat is het. Meer niet. Echt waar. Wat ik daarmee allemaal van plan ben, ga ik zelf maken. Dat vraag ik hier ook niet ;)
Mits jij die datasets tot je beschikking dan kun je die op gewoon erop projecteren ja. Maar ik kwam hier niet om jou te laten zien dat dat mogelijk was, want ik volg dit topic al weken en dan had ik allang kunnen reageren. Ik had allang door dat je daar geen zin in had en een kant en klare oplossing zoekt. Ik reageerde louter en alleen even omdat Umbrah het overlaat komen dat je zonder GIS servers en andere poespas niets kunt. Dat wilde ik eventjes debunken voordat mensen nog gaan denken dat het waar is ook. Meer niet.

Veel succes met je zoektocht, ik denk dat je bedrogen uit gaat komen. Google heeft het gewoon express zo dichtgetimmerd zodat je het niet helemaal naar je hand zetten kan. Daar zullen ze hun redenen wel weer voor hebben, is gewoon hetzelfde verhaal als in dit topic: [JS] Kan niet bij waarde van Object Google, altijd adders onder het gras.

Aunt bunny is coming to get me!


  • Umbrah
  • Registratie: Mei 2006
  • Laatst online: 23:24

Umbrah

The Incredible MapMan

Volgens mij zeg jij precies hetzelfde wat ik zeg: Google heeft het dichtgetimmert, en dat was dan ook de kern van mijn uitleg GIS systemen. Ik heb al eerder KML/KMZ aangehaald als een alternatief, maar GeoJSON (hate it or love it) zal ook volstaan (dat is dan puur je presentatie-laag, met data-laag geintegreerd), en dan kan je als je OpenLayers e.d., of desnoods: ArcGIS for Javascript (puur voor het viewen), alle kanten op. Behalve Google. Google kan niet je base-map worden namelijk.

On-the-fly tiles genereren is vaak onnodig. Je hebt immers SVG tegenwoordig, maar ik denk dat jij juist dáár genuanceerd in moet staan. Fixed scales, met pre-generated tiles, kunnen namelijk een beperking zijn. Daarnaast dwingt het je om van te voren na te denken: hoe ga ik mijn informatieproduct presenteren. GeoJSON heb je dit probleem niet mee, uiteraard, maar als er iets complexers zou zijn geweest, en dan nogmaals, een puur hypothetisch scenario, ga jij écht voor al die 8 viewers per maand van sommige services tiles cachen? Dynamisch genereren kan juist voordelig zijn. Zeker als je het de client kan laten doen, waar jij nu dus op aanstuurt.

Maar goed, mijn verhaal van GIS architectuur ging om precies hetzelfde wat jij zegt: google's architectuur kan je helemaal niet bij. Kies dus andere onderdelen (en daar heb je twee goeden aangegeven, een had ik zelf ook al aangeraden) waar je meer zeggenschap over hebt. Google is leuk tot op zekere hoogte, maar het kan niet wat de TS wil dat het kan.

En ik ben het met je eens: voor de onderste twee lagen een dikke postgis server neer te zetten, vervolgens een geoserver er op te knallen, en één service met maximaal een 300-400 punten-features te hosten... overkill. Kun je natuurlijk wel alles van begin tot eind hosten, maar hoewel mijn kennis van Japan natuurlijk compleet 0 is, de twee landen waar ik het meest in thuis ben is een hoop data gewoon beschikbaar die je niet zelf hoeft te hosten. (Ordnance survey + PDOK data + GJson)+OpenLayers = precies wat je wilt.

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Topicstarter
Nouja, ik wil het best proberen.

OpenLayers ken ik. Heb ik weleens wat mee gedaan.
Maar ook hier worden pregenerated tiles getoond waar de POI's al in ingebed zitten. Ik heb tot dusver géén manier gevonden om die punten in een gestructureerd lijstje terug te krijgen. Dus "whatever er nu op de kaart staat, geef me dat". Maargoed, jij beweert dat het kan?

Ordinance Survey: wat is het, waar haal ik het, en hoe krijg ik het in de kaart?
PDOK data: wat is het, waar haal ik het, en hoe krijg ik het in de kaart?
GJson: wat is het, waar haal ik het, en hoe krijg ik het in de kaart?

Sorry, maar ik ben *echt* *niet* bekend met die dingen. Wat ik wil is "gewoon een laagje" met de POI's aanklikbaar. Of dat GM, Bing, of OSM is, boeit me verder niet.

日本!🎌


  • Umbrah
  • Registratie: Mei 2006
  • Laatst online: 23:24

Umbrah

The Incredible MapMan

Als jij je stations/data in een formaat als GeoJSON kan zetten:

http://en.wikipedia.org/wiki/GeoJSON

Dan kan je dat met OpenLayers vrij eenvoudig inladen:
http://openlayers.org/en/v3.0.0/examples/geojson.html

Dat is dan dus een "lege" viewer met puur je punten er in. Dan wil je nog iets op de achtergrond hebben, en dat kan je erg leuk met een WMS doen. Voorbeeldje van een WMS in GeoJSON:

http://dev.openlayers.org/examples/wms.html

Nou, waar haal je een WM(T)S vandaan? In Nederland alleen al hebben we iets van 200 openbare WM(T)S-en varierend van mosselbanken, tot een volle achtergrondkaart:

http://geodata.nationaalg...0&request=GetCapabilities

  • iH8
  • Registratie: December 2001
  • Laatst online: 17-06-2024

iH8

Dat kan zeker, hier een simpel voorbeeldje, GeoCommons dataset, CartoDB tilesets in Leaflet library. (met cluster plugin want 10.000+ markers op low zoom is een beetje lelijk)

http://ih8.nl/public/leaflet-japan/

[ Voor 10% gewijzigd door iH8 op 27-11-2014 21:33 ]

Aunt bunny is coming to get me!


  • Kenhas
  • Registratie: Oktober 2006
  • Laatst online: 21-11 16:06
Ga met toch eens verdiepen in die leaflet. Tot nu toe met de esri js api en bootstrapmap gewerkt maar die leaflet lijkt met toch net iets "gemakkelijker" om mee te werken.

Die publieke data PDOK ziet er ook wel mooie verzameling uit. Beetje de Nederlandse tegenhanger van Geopunt.be met dat verschil dat PDOK enkel informatie van de overheid is terwijl geopunt.be ook andere data toont. Als je Vlaamse stations op een kaart wil tonen, zou het redelijk simpel zijn ( http://www.geopunt.be/cat...00-4110-bbca-9a5354eb32f9 ) ;)

Is er eigenlijk een reden dat er genegeerd wordt wat Fotw en mezelf geschreven hebben? Je hebt alles om de stations op google maps te tonen met zoomniveau, aanklikbare icoontjes, popup, ...

2x Marstek Venus E 5.12 v153 - CT003 V117 - BMS 212 en 215


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 02:07

alienfruit

the alien you never expected

Zelf gebruiken we Google Maps met een systeem waarbij we alle POIs ophaalden binnen de boundaries van de map. Vervolgens gebruikten we de TfL API om alle interessante POIs op te halen. Zoals als de busstations, treinstations e.d. Op basis van de zoomlevel lieten we een gedetailleerde marker zien of een eenvoudige variant.

Zie een uitgebreidere variant werkend op: https://www.tfl.gov.uk/maps/
Pagina: 1