Categorïau
Cerrig milltir

Mae Mapio Cymru bellach yn llwytho’n gyflymach. Dyma beth wnaethon ni i gyflymu’r gweinydd

Rydyn ni’n adeiladu map cyhoeddus agored o Gymru gyda’r holl enwau yn Gymraeg. Mae’r map bellach yn llwytho’n gyflymach i chi oherwydd gwaith diweddar.

Dyma beth wnaethon ni i wella cyflymder llwytho’r map.

Pan rydych chi’n llwytho’r map, rydych chi’n gweld grid o deiliau. Mae pob un yn ffeil delwedd sgwâr, fel hwn:

Dyma ddarn bach o Dyddewi ar lefel chwyddo 17.

Mae llyfrgell JavaScript o’r enw Leaflet yn rheoli eich llywio o amgylch y map (tremio a chwyddo). Y prif bwynt yw taw delweddau sy’n gwneud y map.

Mae’r delweddau teil yn cael eu rendro o ddata map o fewn OpenStreetMap, sydd yn cael eu cadw fel pwyntiau, llwybrau, a pherthnasau. Yn ogystal â’r data, mae’r pentwr meddalwedd a ddatblygwyd gan brosiect OpenStreetMap wedi ei drwyddedu’n rhydd.

Wrth fynd ati i ddangos map cyfredol i ddefnyddiwr, trawsnewid data i ddelweddau yw’r darn o’r gwaith sydd yn cymryd y rhan fwyaf o amser. Fel arfer mae hyn yn digwydd tra bod y defnyddiwr yn llwytho’r map, mae’r gweinydd yn cynhyrchu a darparu’r delweddau, ac yn eu cadw mewn storfa hefyd.

Pe tasai’r map yn orffenedig a therfynol byddai hynny’n help. Gallen ni sicrhau bod yr holl ddelweddau teil ar y gweinydd, wedi eu rendro a chadw, a darparu nhw bob tro. Ond nid yw hynny’n opsiwn ar gyfer y map cyfan am gwpl o resymau.

Ar hyn o bryd mae map Mapio Cymru yn cael ei ddiweddaru unwaith bob nos tra bod y mwyafrif ohonom yn cysgu, ac mae capasiti’r gweinydd yn dueddol o fod yn uwch. Mae angen y diweddariadau achos mae nodweddion map daearyddol ac enwau yn newid yn aml, bob tro mae rhywun yn golygu OpenStreetMap. Fel arfer mae hyn yn welliant i’r map, e.e. rhywun yn ychwanegu enw i nodwedd. Mae’r elfennau data agored yn cael ei ddiwygio’n gyson, fel Wicipedia y maes mapio. Mae’r golygiad yn gallu bod yn ymateb i rywbeth sy’n newid yn y byd corfforol, e.e. caffi yn newid ei enw, neu orsaf drên hyfryd newydd sbon…!

Felly nid oes modd i ni gadw’r map mewn aspig, mae’n newid trwy amser.

Mae rhwystr arall i’r syniad o rendro a chadw’r holl fap i gyflymu llwytho. Mae set gwahanol o deiliau ar bob lefel chwyddo. Ar y lefelau mwyaf pell mae’n bosib cadw’r holl ddelweddau. Ond ar lefelau chwyddo agosach, mae’r nifer o deiliau’n tyfu’n esbonyddol. Yn fuan mae angen llwythi o amser a le storio, sydd yn fwy nag sydd gyda ni.

Er enghraifft oedd Cymru gyfan ar lefel chwyddo 17 yn cymryd ychydig dros saith awr i’w rendro dros nos. Mae hynny’n ormod o amser.

Oes modd i ni rendro a chadw rhai teiliau dethol, a rendro rhai eraill ar-elw. Oes, fel mae’n digwydd. Yr her yw i benderfynu beth i’w rendro am y mantais cyflymder mwynaf, wrth ystyried cyfyngiadau amser a storfa.

Beth yw’r ardaloedd map o ‘ddiddordeb’ neu ‘berthnasedd’, a sut ydyn ni’n gallu bod yn fwy fanwl pendant am hyn?

I ddechrau, roedd gennym ragdybiaeth y byddai’r ardaloedd â phoblogaeth wasgaredig yn cael eu hymweld ar y map yn llai aml nag ardaloedd poblog iawn. Un dull fyddai rendro ardaloedd uwchlaw trothwy dwysedd poblogaeth penodol.

Yna sylweddolais fod datrysiad arall yn llawer mwy parod i fynd, a hyd yn oed yn well. Gallem gyfeirio at geisiadau porwr agregedig am deiliau i weld pa rannau o’n map yr ymwelwyd â hwy fwyaf. Mae hyn yn caniatáu i ni edrych ar boblogrwydd hanesyddol ardaloedd hyd at lefel teiliau unigol. Roedd hwn yn ddata a oedd gennym eisoes, o fewn logiau gweinydd.

Dyma fap gwres a gynhyrchwyd gan Ben Proctor.

Map gwres o flwyddyn o ymweliadau ar bob lefel chwyddo.

Mae’n ymddangos bod yr ardaloedd poblogaidd yn cyfateb i ddwysedd y boblogaeth. Efallai y bydd perthynas hefyd â nifer a/neu ganran y siaradwyr Cymraeg mewn gwahanol ardaloedd, sydd ar gael o ddata’r Cyfrifiad.

Dw i wedi cyfarwyddo’r gweinydd i rendro’r teiliau a’u storio. Rydym wedi dewis yr ardaloedd hyn:

Mae lefelau chwyddo 3 i 16 bellach wedi’u rendro’n llwyr.

Mae lefelau chwyddo 17 a 18 bellach wedi’u rendro’n rhannol.

Nawr mae’r gweinydd yn rendro’r ardaloedd hyn yn awtomatig bob nos, yn syth ar ôl mewnforio’r data cyfoes.

Roedd y gwahaniaeth yn amlwg iawn pan wnes i lwytho’r wefan cyn ac ar ôl y newid. Cyn hyn, roeddwn i wedi codi cywilydd braidd am yr ardaloedd gwag enfawr a rhewi cyson y map, tra bod y gweinydd yn baglu ymlaen. Dw i ddim yn cael y profiad hynny bellach – o leiaf am y tro!

Ar gyfartaledd, mae teiliau yn llwytho mewn 40% o’r amser os maen nhw wedi eu rendro ymlaen llaw. Mae hynny’n welliant syfrdanol, er bod graddfa’r cyflymu yn ddibynnol iawn ar faint o ddefnyddwyr sy’n cyrchu’r gweinydd ar unwaith.

Mae hyd yn oed teiliau nad ydynt wedi’u rendro ymlaen llaw yn llwytho’n gyflymach oherwydd mae mwy o gapasiti ar y gweinydd fel arfer.

Gyda llaw, mae rhedeg y gweinydd yn llyfn hefyd yn dibynnu ar ddewis y gosodiadau cywir. (Gwnaethom ystyried nginx fel dewis arall yn lle Apache ond ymddengys nad oes ganddo modiwl addas fel mod_tile.)

Wrth i ni ennill mwy o ddiddordeb a defnyddwyr ar gyfer y map dw i’n disgwyl y bydd yn rhaid i mi ymweld â hyn eto. Mae eich cyfraniadau at gostau prosiect bob amser yn ddefnyddiol.

Categorïau
Canllawiau

Sut i chwarae gyda data map: canllaw cam-wrth-gam i Overpass ac OpenStreetMap

Map: llefydd yng Nghymru sy’n cynnwys ‘llan’ yn eu henwau

Hoffech chi ddod o hyd i gestyll, afonydd, blychau post, neu ffyrdd seiclo yng Nghymru ar fap?

Beth am archwilio enwau llefydd Cymraeg yn eich ardal?

Beth am gael nodweddion eraill o Gymru a thu hwnt, fel data agored o fap?

Bydd yr eitem blog hon yn dangos i chi sut i gael data agored o OpenStreetMap, gyda phwyslais arbennig ar ddata Cymraeg.

Y bwriad yw i gael cyflwyniad hwyl, nid adnodd gwbl gynhwysfawr. Nid oes angen profiad o flaen llaw.

Byddwn yn pasio ymholiadau i API Overpass, sy’n un hawdd i gychwyn arni. Mae’r ymholiadau yn gallu rhedeg o’ch porwr gwe o fewn Overpass Turbo, sydd yn ap arbennig o dda a cŵl iawn. Fel arall eich chwilfrydedd yw’r unig beth arall sydd angen!

Cysyniadau i ddechrau

Mae croeso i chi neidio dros yr adran hon os ydych chi eisiau mynd i’r darn ymarferol yn syth.

Mae OpenStreetMap yn fap byd-eang sydd wedi ei adeiladu gan filoedd o bobl. Mae’n defnyddio dulliau wici-aidd i fapio – mae unrhyw un yn gallu golygu ac ailddefnyddio’r cynnwys. Mae’n ddata agored ac rydych chi’n gallu eu defnyddio yn eich dysgu, gwaith, a hamdden.

Mae llwythi o ddata Cymraeg yn OpenStreetMap.

Mae’n annibynnol o ddarparwyr mapio perchnogol, sydd yn rhoi rhyddid i chi weithio gyda’r data yn eich prosiectau chi.

Mae’r feddalwedd sy’n gyrru’r cyfan yn god agored sy’n parchu rhyddid. Fel prosiect Mapio Cymru rydyn ni wedi adeiladu map i arddangos enwau Cymraeg am nodweddion fel llefydd, heolydd, afonydd, ac ati.

Sut i weithredu ymholiad Overpass

Y ffordd gyflymaf o drio ymgeisiadau Overpass yw i ymweld â gwefan Overpass Turbo.

Mae’r sgrîn yn cael ei rhannu rhwng panel golygydd a phanel gweld map/data. Nawr dilynwch y camau:

  1. Ysgrifennwch (neu ludwch!) ymholiad i mewn i’r golygydd.
  2. Cliciwch y botwm Run.
  3. Bydd y canlyniadau yn ymddangos y panel data.
  4. O fewn y panel data rydych chi’n gallu dethol tab Map neu’r tab Data.

Byddwch chi’n dilyn y camau uchod bob tro rydych chi’n gweithredu ymholiad.

Trefi: ymholiad

Dyma ymholiad syml rydych chi’n gallu defnyddio. Yn gyntaf llusgwch y map a chwyddo i mewn nes bod e’n dangos yr ardal rydych chi eisiau ymchwilio, e.e. darn o Gymru. Wedyn dilynwch y camau uchod gyda’r ymholiad hwn:

node["place"="town"]({{bbox}});
out;

Dyna ni, dylech chi nawr weld trefi fel pwyntiau ar yr ardal o’r map a ddetholwyd. Llongyfarchiadau ar gyflawni’ch ymholiad Overpass cyntaf!

Y data

Detholwch y tab Data yn y panel data i weld y data. XML ydy fformat diofyn y data.

Dyma ddarn o’r data XML rydych chi’n gweld am ganlyniadau’r ymholiad uchod, am ddwy dref.

<node id="8997358" lat="51.5912466" lon="-2.7517629">
  <tag k="name" v="Caldicot"/>
  <tag k="name:cy" v="Cil-y-coed"/>
  <tag k="place" v="town"/>
  <tag k="population" v="11200"/>
  <tag k="postal_code" v="NP26 4"/>
  <tag k="wikidata" v="Q722585"/>
  <tag k="wikipedia" v="en:Caldicot, Monmouthshire"/>
</node>

<node id="21413062" lat="51.8591257" lon="-4.3115907">
  <tag k="is_in" v="Wales"/>
  <tag k="name" v="Carmarthen"/>
  <tag k="name:br" v="Caerfyrddin"/>
  <tag k="name:cy" v="Caerfyrddin"/>
  <tag k="name:en" v="Carmarthen"/>
  <tag k="name:ja" v="カーマーゼン"/>
  <tag k="name:la" v="Moridunum"/>
  <tag k="name:ru" v="Кармартен"/>
  <tag k="place" v="town"/>
  <tag k="population" v="14185"/>
  <tag k="population:date" v="2011"/>
  <tag k="source" v="NPE"/>
  <tag k="source:population" v="Census"/>
  <tag k="wikidata" v="Q835835"/>
</node>

Fel rydych chi’n gweld, mae’r tag name:cy yn darparu enw’r dref yn Gymraeg. Mae tagiau tebyg mewn ieithoedd eraill. Mae hefyd tag o’r enw name heb god iaith, dyma ddiffiniad yr allwedd name.

Yn gyffredinol bydd name:cy yn darparu’r enw Cymraeg am unrhyw beth ar y map – pe bai ar gael yn y gronfa ddata.

Bydd y data eraill yn yr enghreifftiau uchod yn eithaf hunan-esboniadol, a chynnwys hydred (longitude), lledred (latitude), cod eitem Wiciddata, a phethau eraill.

Nodwch fod OpenStreetMap wastad yn waith anghyflawn. Byddech chi’n gweld data eithaf data am sawl ymholiad ond bydd eraill yn dangos bylchau. (Rydych chi’n gallu golygu/ychwanegu enwau llefydd i’r map, a nodweddion eraill a’i tagiau.)

Newid eich map Overpass Turbo i Mapio Cymru

O fewn Overpass Turbo mae’n debyg taw prif fap OpenStreetMap fyddech chi’n gweld. Mae hynny’n iawn ond ni fydd e’n ymddangos pob enw yn Gymraeg.

Rydych chi’n gallu newid e i weinydd Mapio Cymru, fel hyn:

  1. Dethol dewislen Settings
  2. Dethol Map
  3. Yn y blwch Tile-Server rhowch:
    //openstreetmap.cymru/osm_tiles/{z}/{x}/{y}.png

Noder, pan gliciwch ar unrhyw bin ar y map bydd dolenni’n dal i fynd i’r prif OpenStreetMap.

Ffermydd, dinasoedd, a llefydd eraill

Rydych chi’n gallu golygu’r ymholiad uchod:

node["place"="farm"]({{bbox}});
out;

Sylwch ar y gwahaniaeth rhwng yr ymholiad hwn a’r un flaenorol. Fel arall defnyddiwch un o’r gwerthoedd posibl am place. Er enghraifft gallech chi ddefnyddio “village”, “city”, “island” ac ati.

Eich blwch terfyn

Yn gyffredinol:

  • Os mae’ch ymholiad yn cyfeirio at bbox (blwch terfyn, neu bounding box) bydd yr ymholiad yn rhedeg ar y map gweledol, y darn o’r map rydych chi wedi dethol.
  • Rydych chi hefyd yn gallu lleihau lled y map: llusgwch ei ffin i leihau’r maint, a chynyddu maint y golygydd.
  • Os mae’n ymholiad yn cynnwys llawer o ganlyniadau, mae’n bosib bydd gormod o ddata i blotio ar y map Overpass Turbo yn eich porwr. Ceisiwch chwyddo i mewn i leihau maint eich blwch terfyn.

Trefi Cymru yn unig

Does dim ots faint rydych chi’n symud y blwch terfyn ni fydd hi’n bosib i gael Cymru gyfan, a Chymru’n unig. Mae’n rhaid newid ein hymholiad.

Y tro hwn, cliciwch y botwm Wizard a theipiwch ‘towns in Wales’ a chliciwch Build Query. Pan redais i e awgrymodd ‘town in Wales’ ac wedyn ces i’r ymholiad isod, a bydd eich un chi yn debyg neu’r un peth.

/*
This has been generated by the overpass-turbo wizard.
The original search was:
“town in wales”
*/
[out:json][timeout:25];
// fetch area “wales” to search in
{{geocodeArea:wales}}->.searchArea;
// gather results
(
  // query part for: “town”
  node["place"="town"](area.searchArea);
  way["place"="town"](area.searchArea);
  relation["place"="town"](area.searchArea);
);
// print results
out body;
>;
out skel qt;

Ble bo hynny’n bosibl bydd y dewin yma yn cymryd y Saesneg rydych chi’n teipio a darparu ymholiad mewn iaith ymholi Overpass. Hyd y gwn i mae Wizard ond ar gael yn Saesneg ar y foment.

Mae searchArea uchod yn newidyn sy’n cynnwys ein hardal geo-cod am Gymru. Mae’n cael ei osod yn ystod yr ymholiad. Does dim rhaid galw fe’n searchArea, mae modd i ni alw fe’n unrhyw beth (e.e. ardalChwilio neu ardalCymru) – cyn belled nad oes gwrthdaro gyda thermau a gedwir yn ôl.

Mae’r ymholiad uchod yn cynnwys sylwadau sydd ddim yn cael effaith ar yr ymholiad. Ceir dwy ffordd:

/* sylw o fewn slash seren */

// sylw rhwng dau slash a diwedd llinell

Enwau llefydd Llan

Yn ogystal â Llanelwy bydd hwn yn dychwelyd Rhosllannerchrugog yn y canlyniadau – ac yn y blaen. Mae’n chwiliad yn sensitif i lythrennau bras/bach.

[out:json][timeout:50];
(
  node["name"~"Llan",i][place]({{bbox}});
);
out center;

Dyma chwiliad culach am Llan gyda L fawr.

[out:json][timeout:50];
(
  node["name"~"Llan"][place]({{bbox}});
);
out center;

Dyma chwiliad sy’n cynnwys tagiau name a name:cy er mwyn cael map cynhwysfawr – sy’n cynnwys llefydd sydd ddim o fewn name:cy eto ac enwau fel Llanandras a Llanllieni (diolch am eich holl ymatebion Twitter!).

(
node({{bbox}})["name:cy"~"Llan"][place];
node({{bbox}})["name"~"Llan"][place];
);
out;

Bydd hwn yn rhoi holl lefydd Cymru gyda Llan yn yr enw. Mae’n rhoi data yn unig – o fewn Overpass Turbo bydd y tab map yn wag. Rydych chi’n gallu defnyddio’r canlyniadau data CSV mewn prosiect, e.e. mewn taenlen.

[out:csv("name:cy", "name", ::lat, ::lon, "place", ::id; true; ",")][timeout:50];
{{geocodeArea:wales}}->.searchArea;
(
node["name"~"Llan"][place](area.searchArea);
node["name:cy"~"Llan"][place](area.searchArea);
);
out;

Rydych chi’n gallu newid un o’r uchod gyda ‘Aber’, ‘Caer’, ‘Tre’, ac ati.

Cestyll mewn unrhyw ardal

Rhowch gais ar yr ymholiad hwn.

[out:json][timeout:25];
// gather results
(
  // query part for: “castle”
  node["historic"="castle"]({{bbox}});
  way["historic"="castle"]({{bbox}});
  relation["historic"="castle"]({{bbox}});
);
// print results
out body;
>;
out skel qt;

Mae hyn yn iawn ond beth am y cestyll yng Nghymru yn unig? Defnyddiwch hwn:

[out:json][timeout:25];
{{geocodeArea:wales}}->.searchArea;
// gather results
(
  // query part for: “castle”
  node["historic"="castle"](area.searchArea);
  way["historic"="castle"](area.searchArea);
  relation["historic"="castle"](area.searchArea);
);
// print results
out body;
>;
out skel qt;

Dyma rai eraill i’w defnyddio. Ym mhob achos dylech chi ddisodli’r tri datganiad uchod i ofyn am nodau, ffyrdd, a pherthnasau (nodes, ways a relations) yn y chwiliad. Fe wnawn ni edrych at ddiffiniadau o rein mewn ychydig…

"natural"="peak"

"site_type"="megalith"

"historic:civilization"="ancient_roman"

"amenity"="bicycle parking"

"amenity"="recycling"

"amenity"="bus station"

Elfennau OpenStreetMap

Mae miliynau o ymholiadau Overpass yn bosib.

Gallech chi chwarae o gwmpas gydag ymholiadau syml heb ddealltwriaeth gynhwysfawr o OpenStreetMap. Gall y dewin helpu.

Maes o law byddech chi siŵr o fod eisiau mwy o gyd-destun i helpu ysgrifennu ymholiad arbennig ar gyfer eich diddordeb eich hunain. Bydd y darn isod o’r ddogfennaeth ar elfennau yn cynnwys diffiniadau pwysig i’ch helpu:

Elfennau yw hanfodion sylfaenol OpenStreetMap a’i fodel data cysyniadol o’r byd corfforol. Dyma nhw:

  • nodau [nodes] (sydd yn diffinio pwyntiau mewn gofod)
  • llwybrau [ways] (yn diffinio nodweddion llinellog a ffiniau ardaloedd)
  • perthnasau [relations] (sydd weithiau yn cael eu defnyddio i esbonio sut mae elfennau eraill yn gweithio gyda’i gilydd)

Mae’r cyfan uchod yn gallu cynnwys un neu fwy o dagiau perthnasol (sydd yn disgrifio ystyr unrhyw elfen benodol).

Os ydych chi eisiau gweld enghreifftiau o nodau, defnyddiwch yr ymholiad hwn.

Ar Overpass Turbo fe fydd hwn ond yn gweithio o fewn flwch terfyn bach achos mae maint y data yn eithaf mawr.

Dangos Llwybr Arfordir Cymru

Mae ymholiad syml hwn yn dangos un perthynas – darn gogleddol Llwybr Arfordir Cymru.

relation(1850847);>;out;

Mae hwn yn dangos yr holl Lwybr Arfordir Cymru. (Mae e’n cael ei gadw fel perthynas o berthnasau, felly mae’r ymholiad yn defnyddio gweithredydd ‘cyrchu i lawr perthnasau yn ddychweliadol’ >> i ddangos y perthnasau, llwybrau, a nodau o fewn y perthynas cyffredinol. Dyma ragor o wybodaeth ar y gweithredydd >>.)

[out:json][timeout:25];
rel(1820890);
(._;>>;);
out;

Teithiau cerdded

Mae hwn yn dod o enghreifftiau Overpass API. Mae’n debyg y bydd rhaid i chi chwyddo mewn i flwch terfyn.

[bbox:{{bbox}}];
(
  relation[route=hiking][network~"^.wn$"];
  way(r);
  >;
);
out;

{{style:
way
{ color:green; fill-color:green; }

relation[network=lwn] way
{ color:blue; fill-color:cyan; }

relation[network=iwn] way
{ color:red; fill-color:red; }

relation[network=nwn] way
{ color:green; fill-color:green; }

relation[network=rwn] way
{ color:yellow; fill-color:yellow; }

}}

Adeiladau petryal sydd yn dalach nag y maen nhw yn eang

Mae’r un yma wedi ei addasu o’r enghreifftiau.

[out:json][timeout:25];
{{geocodeArea:wales}}->.searchArea;
// Find rectangular buildings that are taller then they are wide
(
  // Compare the height to the average length of a side
  way["building"]["height"](area.searchArea)(if:
    count_members() < 6 && is_closed() &&
    number(t["height"]) > length() / 4);
  // Assume a floor is 3 m tall
  way["building"]["building:levels"](area.searchArea)(if:
    count_members() < 6 && is_closed() &&
    number(t["building:levels"]) * 3 > length() / 4);
);

// Print results
out body;
>;
out skel qt;

Beth nesaf? Golygu’r map

Os ydych chi’n sylwi ar unrhyw fylchau yn y data mae modd i chi olygu’r map. Croeso i’r gymuned mapio data agored!

Mae modd defnyddio Overpass i chwilio am gyfleoedd i wella’r map.

Overpass Turbo yn Gymraeg?

Mae rhyngwyneb Overpass Turbo ar gael mewn sawl iaith ond nid yw’r Gymraeg ar gael fel iaith rhyngwyneb eto. Os hoffech chi gyfrannu i’r cyfieithiad ewch i’w brosiect Transifex.

Ysgrifennu ymholiadau eich hunain

Dechreuwch gydag enghreifftiau Overpass Turbo ac enghreifftiau API Overpass a darparwyd gan gymuned OSM.

Gallech chi fynd mewn i lawlyfr defnyddwyr Overpass hyd yn oed.

Defnyddio Python yn lle Overpass Turbo

Os ydych chi’n gallu defnyddio Python gallech chi redeg ymholiadau Overpass yn eich cod gyda’r amlapiwr syml hwn yn lle rhyngwyneb gwe Overpass Turbo. Ysgrifennwch ap a chreu cyffro!

Fel arall mae ffyrdd eraill o wneud ymholiad Overpass trwy god.

Yn gyffredinol mae Overpass Turbo yn defnyddio ar gyfer perffeithio’ch ymholiadau.

Categorïau
Cerrig milltir

Cartref newydd Mapio Cymru

Dyma gartref newydd Mapio Cymru lle rydym yn trin a thrafod mapio yn Gymraeg.

Ewch i openstreetmap.cymru i weld y map.

Rhowch arian i ddatblygiad gwasnaethau mapio Cymraeg.