libgd-gis 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +80 -31
- data/examples/argentina_cities.rb +89 -0
- data/examples/argentina_museums.rb +70 -0
- data/examples/asia-peaks.rb +42 -0
- data/examples/avenue_ramirez.rb +44 -0
- data/examples/europe-peaks.rb +29 -0
- data/examples/flag.png +0 -0
- data/examples/ice-cream-shops.rb +37 -0
- data/examples/map.png +0 -0
- data/examples/mountains.rb +98 -0
- data/examples/output/argentina.png +0 -0
- data/examples/output/argentina_localidades.png +0 -0
- data/examples/parana-city.rb +29 -0
- data/examples/parana.osm +186897 -0
- data/examples/parana.png +0 -0
- data/examples/parana_museums.rb +48 -0
- data/examples/parana_streets.geojson +1 -0
- data/examples/parana_streets.rb +48 -0
- data/examples/streets.geojson +1 -0
- data/examples/streets.png +0 -0
- data/examples/streets_geojson.rb +33 -0
- data/examples/the_america_peaks.rb +43 -0
- data/examples/tmp/tiles/7_37_78.png +0 -0
- data/examples/tmp/tiles/7_37_79.png +0 -0
- data/examples/tmp/tiles/7_37_80.png +0 -0
- data/examples/tmp/tiles/7_37_81.png +0 -0
- data/examples/tmp/tiles/7_37_82.png +0 -0
- data/examples/tmp/tiles/7_37_83.png +0 -0
- data/examples/tmp/tiles/7_37_84.png +0 -0
- data/examples/tmp/tiles/7_37_85.png +0 -0
- data/examples/tmp/tiles/7_37_86.png +0 -0
- data/examples/tmp/tiles/7_38_71.png +0 -0
- data/examples/tmp/tiles/7_38_72.png +0 -0
- data/examples/tmp/tiles/7_38_73.png +0 -0
- data/examples/tmp/tiles/7_38_74.png +0 -0
- data/examples/tmp/tiles/7_38_75.png +0 -0
- data/examples/tmp/tiles/7_38_76.png +0 -0
- data/examples/tmp/tiles/7_38_77.png +0 -0
- data/examples/tmp/tiles/7_38_78.png +0 -0
- data/examples/tmp/tiles/7_38_79.png +0 -0
- data/examples/tmp/tiles/7_38_80.png +0 -0
- data/examples/tmp/tiles/7_38_81.png +0 -0
- data/examples/tmp/tiles/7_38_82.png +0 -0
- data/examples/tmp/tiles/7_38_83.png +0 -0
- data/examples/tmp/tiles/7_38_84.png +0 -0
- data/examples/tmp/tiles/7_38_85.png +0 -0
- data/examples/tmp/tiles/7_38_86.png +0 -0
- data/examples/tmp/tiles/7_38_87.png +0 -0
- data/examples/tmp/tiles/7_39_71.png +0 -0
- data/examples/tmp/tiles/7_39_72.png +0 -0
- data/examples/tmp/tiles/7_39_73.png +0 -0
- data/examples/tmp/tiles/7_39_74.png +0 -0
- data/examples/tmp/tiles/7_39_75.png +0 -0
- data/examples/tmp/tiles/7_39_76.png +0 -0
- data/examples/tmp/tiles/7_39_77.png +0 -0
- data/examples/tmp/tiles/7_39_78.png +0 -0
- data/examples/tmp/tiles/7_39_79.png +0 -0
- data/examples/tmp/tiles/7_39_80.png +0 -0
- data/examples/tmp/tiles/7_39_81.png +0 -0
- data/examples/tmp/tiles/7_39_82.png +0 -0
- data/examples/tmp/tiles/7_39_83.png +0 -0
- data/examples/tmp/tiles/7_39_84.png +0 -0
- data/examples/tmp/tiles/7_39_85.png +0 -0
- data/examples/tmp/tiles/7_39_86.png +0 -0
- data/examples/tmp/tiles/7_39_87.png +0 -0
- data/examples/tmp/tiles/7_40_71.png +0 -0
- data/examples/tmp/tiles/7_40_72.png +0 -0
- data/examples/tmp/tiles/7_40_73.png +0 -0
- data/examples/tmp/tiles/7_40_74.png +0 -0
- data/examples/tmp/tiles/7_40_75.png +0 -0
- data/examples/tmp/tiles/7_40_76.png +0 -0
- data/examples/tmp/tiles/7_40_77.png +0 -0
- data/examples/tmp/tiles/7_40_78.png +0 -0
- data/examples/tmp/tiles/7_40_79.png +0 -0
- data/examples/tmp/tiles/7_40_80.png +0 -0
- data/examples/tmp/tiles/7_40_81.png +0 -0
- data/examples/tmp/tiles/7_40_82.png +0 -0
- data/examples/tmp/tiles/7_40_83.png +0 -0
- data/examples/tmp/tiles/7_40_86.png +0 -0
- data/examples/tmp/tiles/7_40_87.png +0 -0
- data/examples/tmp/tiles/7_41_71.png +0 -0
- data/examples/tmp/tiles/7_41_72.png +0 -0
- data/examples/tmp/tiles/7_41_73.png +0 -0
- data/examples/tmp/tiles/7_41_74.png +0 -0
- data/examples/tmp/tiles/7_41_75.png +0 -0
- data/examples/tmp/tiles/7_41_76.png +0 -0
- data/examples/tmp/tiles/7_41_77.png +0 -0
- data/examples/tmp/tiles/7_41_78.png +0 -0
- data/examples/tmp/tiles/7_41_79.png +0 -0
- data/examples/tmp/tiles/7_41_80.png +0 -0
- data/examples/tmp/tiles/7_41_81.png +0 -0
- data/examples/tmp/tiles/7_41_87.png +0 -0
- data/examples/tmp/tiles/7_42_71.png +0 -0
- data/examples/tmp/tiles/7_42_72.png +0 -0
- data/examples/tmp/tiles/7_42_73.png +0 -0
- data/examples/tmp/tiles/7_42_74.png +0 -0
- data/examples/tmp/tiles/7_42_75.png +0 -0
- data/examples/tmp/tiles/7_42_76.png +0 -0
- data/examples/tmp/tiles/7_42_77.png +0 -0
- data/examples/tmp/tiles/7_42_78.png +0 -0
- data/examples/tmp/tiles/7_42_79.png +0 -0
- data/examples/tmp/tiles/7_42_85.png +0 -0
- data/examples/tmp/tiles/7_43_71.png +0 -0
- data/examples/tmp/tiles/7_43_72.png +0 -0
- data/examples/tmp/tiles/7_43_73.png +0 -0
- data/examples/tmp/tiles/7_43_74.png +0 -0
- data/examples/tmp/tiles/7_43_75.png +0 -0
- data/examples/tmp/tiles/7_43_76.png +0 -0
- data/examples/tmp/tiles/7_43_77.png +0 -0
- data/examples/tmp/tiles/7_43_78.png +0 -0
- data/examples/tmp/tiles/7_43_85.png +0 -0
- data/examples/tmp/tiles/7_44_71.png +0 -0
- data/examples/tmp/tiles/7_44_72.png +0 -0
- data/examples/tmp/tiles/7_44_73.png +0 -0
- data/examples/tmp/tiles/7_44_74.png +0 -0
- data/examples/tmp/tiles/7_44_75.png +0 -0
- data/examples/tmp/tiles/7_44_76.png +0 -0
- data/examples/tmp/tiles/7_44_77.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10871_19430.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10871_19431.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10871_19432.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10871_19433.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10871_19434.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10871_19435.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10872_19430.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10872_19431.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10872_19432.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10872_19433.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10872_19434.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10872_19435.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10873_19430.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10873_19431.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10873_19432.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10873_19433.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10873_19434.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10873_19435.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10874_19430.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10874_19431.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10874_19432.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10874_19433.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10874_19434.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10874_19435.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10875_19430.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10875_19431.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10875_19432.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10875_19433.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10875_19434.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10875_19435.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10876_19430.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10876_19431.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10876_19432.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10876_19433.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10876_19434.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10876_19435.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10877_19430.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10877_19431.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10877_19432.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10877_19433.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10877_19434.png +0 -0
- data/examples/tmp/tiles/carto_light_15_10877_19435.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18365.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18366.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18367.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18368.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18369.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18370.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18371.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18372.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18373.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18374.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18375.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18376.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18377.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18378.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18379.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18380.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18381.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18382.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18383.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18384.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18385.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18386.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18387.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18388.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18389.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18390.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18391.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18392.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18393.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18394.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18395.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18396.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18397.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18398.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18399.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18400.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18401.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18402.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18403.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18404.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18405.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18406.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18407.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18408.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18409.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18410.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18411.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18412.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18413.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18414.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18415.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18416.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18417.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18418.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18419.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18420.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18421.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18422.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18423.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18424.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18425.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18426.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18427.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18428.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18429.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18430.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18431.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18432.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18433.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18434.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18435.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18436.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18437.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18438.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18439.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18440.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18441.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18442.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18443.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18444.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18445.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18446.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18447.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18448.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18449.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18450.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18451.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18452.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18453.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18454.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18455.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18456.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18457.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18458.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18459.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18460.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18461.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18462.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18463.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18464.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18465.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18466.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18467.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18468.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18469.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18470.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18471.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18472.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18473.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18474.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18475.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18476.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18477.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18478.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18479.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18480.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18481.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18482.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18483.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18484.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18485.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18486.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18487.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18488.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18489.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18490.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18491.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18492.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18493.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18494.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18495.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18496.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18497.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18498.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18499.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18500.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18501.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18502.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18503.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18504.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18505.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18506.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18507.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18508.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18509.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18510.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18511.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18512.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18513.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18514.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18515.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18516.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18517.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18518.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18519.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18520.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18521.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18522.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18523.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18524.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18525.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18526.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18527.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18528.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18529.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18530.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18531.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18532.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18533.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18534.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18535.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18536.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18537.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18538.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18539.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18540.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18541.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18542.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18543.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18544.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18545.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18546.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18547.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18548.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18549.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18550.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18551.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18552.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18553.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18554.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18555.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18556.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18557.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18558.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18559.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18560.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18561.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18562.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18563.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18564.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18565.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18566.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18567.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18568.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18569.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18570.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18571.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18572.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18573.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18574.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18575.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18576.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18577.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18578.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18579.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18580.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18581.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18582.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18583.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18584.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18585.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18586.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18587.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18588.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18589.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18590.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18591.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18592.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18593.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18594.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18595.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18596.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18597.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18598.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18599.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18600.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18601.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18602.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18603.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18604.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18605.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18606.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18607.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18608.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18609.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18610.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18611.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18612.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18613.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18614.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18615.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18616.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18617.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18618.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18619.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18620.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18621.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18622.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18623.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18624.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18625.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18626.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18627.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18628.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18629.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18630.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18631.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18632.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18633.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18634.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18635.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18636.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18637.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18638.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18639.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18640.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18641.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18642.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18643.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18644.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18645.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18646.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18647.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18648.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18649.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18650.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18651.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18652.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18653.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18654.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18655.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18656.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18657.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18658.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18659.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18660.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18661.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18662.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18663.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18664.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18665.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18666.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18667.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18668.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18669.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18670.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18671.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18672.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18673.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18674.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18675.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18676.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18677.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18678.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18679.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18680.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18681.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18682.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18683.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18684.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18685.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18686.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18687.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18688.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18689.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18690.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18691.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18692.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18693.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18694.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18695.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18696.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18697.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18698.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18699.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18700.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18701.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18702.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18703.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18704.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18705.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18706.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18707.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18708.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18709.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18710.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18711.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18712.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18713.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18714.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18715.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18716.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18717.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18718.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18719.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18720.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18721.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18722.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18723.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18724.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18725.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18726.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18727.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18728.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18729.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18730.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18731.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18732.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18733.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18734.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18735.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18736.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18737.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18738.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18739.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18740.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18741.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18742.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18743.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18744.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18745.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18746.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18747.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18748.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18749.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18750.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18751.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18752.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18753.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18754.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18755.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18756.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18757.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18758.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18759.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18760.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18761.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18762.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18763.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18764.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18765.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18766.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18767.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18768.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18769.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18770.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18771.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18772.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18773.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18774.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18775.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18776.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18777.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18778.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18779.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18780.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18781.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18782.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18783.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18784.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18785.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18786.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18787.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18788.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18789.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18790.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18791.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18792.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18793.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18794.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18795.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18796.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18797.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18798.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18799.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18800.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18801.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18802.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18803.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18804.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18805.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18806.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18807.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18808.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18809.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18810.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18811.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18812.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18813.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18814.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18815.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18816.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18817.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18818.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18819.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18820.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18821.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18822.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18823.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18824.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18825.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18826.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18827.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18828.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18829.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18830.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18831.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18832.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18833.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18834.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18835.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18836.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18837.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18838.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18839.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18840.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18841.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18842.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18843.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18844.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18845.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18846.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18847.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18848.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18849.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18850.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18851.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18852.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18853.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18854.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18855.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18856.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18857.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18858.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18859.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18860.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18861.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18862.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18863.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18864.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18865.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18866.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18867.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18868.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18869.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18870.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18871.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18872.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18873.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18874.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18875.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18876.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18877.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18878.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18879.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18880.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18881.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18882.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18883.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18884.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18885.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18886.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18887.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18888.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18889.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18890.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18891.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18892.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18893.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18894.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18895.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18896.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18897.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18898.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18899.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18900.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18901.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18902.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18903.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18904.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18905.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18906.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18907.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18908.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18909.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18910.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18911.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18912.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18913.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18914.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18915.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18916.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18917.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18918.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18919.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18920.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18921.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18922.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18923.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18924.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18925.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18926.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18927.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18928.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18929.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18930.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18931.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18932.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18933.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18934.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18935.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18936.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18937.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18938.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18939.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18940.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18941.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18942.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18943.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18944.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18945.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18946.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18947.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18948.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18949.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18950.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18951.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18952.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18953.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18954.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18955.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18956.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18957.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18958.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18959.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18960.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18961.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18962.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18963.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18964.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18965.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18966.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18967.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18968.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18969.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18970.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18971.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18972.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18973.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18974.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18975.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18976.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18977.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18978.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18979.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18980.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18981.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18982.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18983.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18984.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18985.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18986.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18987.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18988.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18989.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18990.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18991.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18992.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18993.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18994.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18995.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18996.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18997.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18998.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_18999.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19000.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19001.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19002.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19003.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19004.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19005.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19006.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19007.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19008.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19009.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19010.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19011.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19012.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19013.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19014.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19015.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19016.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19017.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19018.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19019.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19020.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19021.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19022.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19023.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19024.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19025.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19026.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19027.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19028.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19029.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19030.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19031.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19032.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19033.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19034.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19035.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19036.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19037.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19038.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19039.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19040.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19041.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19042.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19043.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19044.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19045.png +0 -0
- data/examples/tmp/tiles/carto_light_15_9693_19046.png +0 -0
- data/examples/tmp/tiles/carto_light_5_10_17.png +0 -0
- data/examples/tmp/tiles/carto_light_5_10_18.png +0 -0
- data/examples/tmp/tiles/carto_light_5_10_19.png +0 -0
- data/examples/tmp/tiles/carto_light_5_10_20.png +0 -0
- data/examples/tmp/tiles/carto_light_5_10_21.png +0 -0
- data/examples/tmp/tiles/carto_light_5_11_17.png +0 -0
- data/examples/tmp/tiles/carto_light_5_11_18.png +0 -0
- data/examples/tmp/tiles/carto_light_5_11_19.png +0 -0
- data/examples/tmp/tiles/carto_light_5_11_20.png +0 -0
- data/examples/tmp/tiles/carto_light_5_11_21.png +0 -0
- data/examples/tmp/tiles/carto_light_5_9_17.png +0 -0
- data/examples/tmp/tiles/carto_light_5_9_18.png +0 -0
- data/examples/tmp/tiles/carto_light_5_9_19.png +0 -0
- data/examples/tmp/tiles/carto_light_5_9_20.png +0 -0
- data/examples/tmp/tiles/carto_light_5_9_21.png +0 -0
- data/examples/verbose.txt +11 -0
- data/lib/gd/gis/basemap.rb +116 -9
- data/lib/gd/gis/geometry.rb +40 -0
- data/lib/gd/gis/layer_geojson.rb +75 -0
- data/lib/gd/gis/layer_lines.rb +36 -0
- data/lib/gd/gis/layer_points.rb +31 -1
- data/lib/gd/gis/layer_polygons.rb +38 -0
- data/lib/gd/gis/map.rb +58 -78
- data/lib/gd/gis/projection.rb +14 -0
- metadata +932 -278
- data/examples/a-world_peaks.rb +0 -42
- data/examples/argentina.png +0 -0
- data/examples/argentina_con_localidades.rb +0 -89
- data/examples/argentina_museos.rb +0 -70
- data/examples/hydro.png +0 -0
- data/examples/hydro_plants.geojson +0 -25
- data/examples/montanas.rb +0 -118
- data/examples/output/argentina_museos.png +0 -0
- data/examples/output/tanzania_hydro.png +0 -0
- data/examples/output/world_peaks-s.png +0 -0
- data/examples/output/world_peaks.png +0 -0
- data/examples/peak.png +0 -0
- data/examples/picks.json +0 -50
- data/examples/render_tile.rb +0 -31
- data/examples/tmp/tiles/4_0_13.png +0 -0
- data/examples/tmp/tiles/4_0_14.png +0 -0
- data/examples/tmp/tiles/4_0_15.png +0 -0
- data/examples/tmp/tiles/4_0_3.png +0 -0
- data/examples/tmp/tiles/4_0_4.png +0 -0
- data/examples/tmp/tiles/4_0_5.png +0 -0
- data/examples/tmp/tiles/4_0_8.png +0 -0
- data/examples/tmp/tiles/4_10_1.png +0 -0
- data/examples/tmp/tiles/4_10_11.png +0 -0
- data/examples/tmp/tiles/4_10_12.png +0 -0
- data/examples/tmp/tiles/4_10_13.png +0 -0
- data/examples/tmp/tiles/4_10_14.png +0 -0
- data/examples/tmp/tiles/4_10_15.png +0 -0
- data/examples/tmp/tiles/4_10_2.png +0 -0
- data/examples/tmp/tiles/4_10_3.png +0 -0
- data/examples/tmp/tiles/4_10_4.png +0 -0
- data/examples/tmp/tiles/4_10_5.png +0 -0
- data/examples/tmp/tiles/4_10_6.png +0 -0
- data/examples/tmp/tiles/4_10_7.png +0 -0
- data/examples/tmp/tiles/4_10_8.png +0 -0
- data/examples/tmp/tiles/4_10_9.png +0 -0
- data/examples/tmp/tiles/4_11_1.png +0 -0
- data/examples/tmp/tiles/4_11_10.png +0 -0
- data/examples/tmp/tiles/4_11_12.png +0 -0
- data/examples/tmp/tiles/4_11_13.png +0 -0
- data/examples/tmp/tiles/4_11_14.png +0 -0
- data/examples/tmp/tiles/4_11_15.png +0 -0
- data/examples/tmp/tiles/4_11_2.png +0 -0
- data/examples/tmp/tiles/4_11_3.png +0 -0
- data/examples/tmp/tiles/4_11_4.png +0 -0
- data/examples/tmp/tiles/4_11_5.png +0 -0
- data/examples/tmp/tiles/4_11_6.png +0 -0
- data/examples/tmp/tiles/4_11_7.png +0 -0
- data/examples/tmp/tiles/4_12_1.png +0 -0
- data/examples/tmp/tiles/4_12_11.png +0 -0
- data/examples/tmp/tiles/4_12_12.png +0 -0
- data/examples/tmp/tiles/4_12_13.png +0 -0
- data/examples/tmp/tiles/4_12_14.png +0 -0
- data/examples/tmp/tiles/4_12_15.png +0 -0
- data/examples/tmp/tiles/4_12_2.png +0 -0
- data/examples/tmp/tiles/4_12_3.png +0 -0
- data/examples/tmp/tiles/4_12_4.png +0 -0
- data/examples/tmp/tiles/4_12_5.png +0 -0
- data/examples/tmp/tiles/4_12_6.png +0 -0
- data/examples/tmp/tiles/4_12_7.png +0 -0
- data/examples/tmp/tiles/4_12_8.png +0 -0
- data/examples/tmp/tiles/4_13_11.png +0 -0
- data/examples/tmp/tiles/4_13_12.png +0 -0
- data/examples/tmp/tiles/4_13_13.png +0 -0
- data/examples/tmp/tiles/4_13_14.png +0 -0
- data/examples/tmp/tiles/4_13_15.png +0 -0
- data/examples/tmp/tiles/4_13_2.png +0 -0
- data/examples/tmp/tiles/4_13_3.png +0 -0
- data/examples/tmp/tiles/4_13_4.png +0 -0
- data/examples/tmp/tiles/4_13_5.png +0 -0
- data/examples/tmp/tiles/4_13_6.png +0 -0
- data/examples/tmp/tiles/4_13_7.png +0 -0
- data/examples/tmp/tiles/4_13_8.png +0 -0
- data/examples/tmp/tiles/4_13_9.png +0 -0
- data/examples/tmp/tiles/4_14_10.png +0 -0
- data/examples/tmp/tiles/4_14_11.png +0 -0
- data/examples/tmp/tiles/4_14_12.png +0 -0
- data/examples/tmp/tiles/4_14_13.png +0 -0
- data/examples/tmp/tiles/4_14_14.png +0 -0
- data/examples/tmp/tiles/4_14_15.png +0 -0
- data/examples/tmp/tiles/4_14_2.png +0 -0
- data/examples/tmp/tiles/4_14_3.png +0 -0
- data/examples/tmp/tiles/4_14_4.png +0 -0
- data/examples/tmp/tiles/4_14_5.png +0 -0
- data/examples/tmp/tiles/4_14_6.png +0 -0
- data/examples/tmp/tiles/4_14_8.png +0 -0
- data/examples/tmp/tiles/4_14_9.png +0 -0
- data/examples/tmp/tiles/4_15_10.png +0 -0
- data/examples/tmp/tiles/4_15_12.png +0 -0
- data/examples/tmp/tiles/4_15_13.png +0 -0
- data/examples/tmp/tiles/4_15_14.png +0 -0
- data/examples/tmp/tiles/4_15_15.png +0 -0
- data/examples/tmp/tiles/4_15_3.png +0 -0
- data/examples/tmp/tiles/4_15_4.png +0 -0
- data/examples/tmp/tiles/4_15_5.png +0 -0
- data/examples/tmp/tiles/4_15_8.png +0 -0
- data/examples/tmp/tiles/4_15_9.png +0 -0
- data/examples/tmp/tiles/4_1_13.png +0 -0
- data/examples/tmp/tiles/4_1_14.png +0 -0
- data/examples/tmp/tiles/4_1_15.png +0 -0
- data/examples/tmp/tiles/4_1_3.png +0 -0
- data/examples/tmp/tiles/4_1_4.png +0 -0
- data/examples/tmp/tiles/4_1_7.png +0 -0
- data/examples/tmp/tiles/4_2_12.png +0 -0
- data/examples/tmp/tiles/4_2_13.png +0 -0
- data/examples/tmp/tiles/4_2_14.png +0 -0
- data/examples/tmp/tiles/4_2_15.png +0 -0
- data/examples/tmp/tiles/4_2_2.png +0 -0
- data/examples/tmp/tiles/4_2_3.png +0 -0
- data/examples/tmp/tiles/4_2_4.png +0 -0
- data/examples/tmp/tiles/4_2_5.png +0 -0
- data/examples/tmp/tiles/4_2_6.png +0 -0
- data/examples/tmp/tiles/4_3_1.png +0 -0
- data/examples/tmp/tiles/4_3_12.png +0 -0
- data/examples/tmp/tiles/4_3_13.png +0 -0
- data/examples/tmp/tiles/4_3_14.png +0 -0
- data/examples/tmp/tiles/4_3_15.png +0 -0
- data/examples/tmp/tiles/4_3_2.png +0 -0
- data/examples/tmp/tiles/4_3_3.png +0 -0
- data/examples/tmp/tiles/4_3_4.png +0 -0
- data/examples/tmp/tiles/4_3_5.png +0 -0
- data/examples/tmp/tiles/4_3_6.png +0 -0
- data/examples/tmp/tiles/4_3_7.png +0 -0
- data/examples/tmp/tiles/4_3_8.png +0 -0
- data/examples/tmp/tiles/4_4_0.png +0 -0
- data/examples/tmp/tiles/4_4_1.png +0 -0
- data/examples/tmp/tiles/4_4_10.png +0 -0
- data/examples/tmp/tiles/4_4_12.png +0 -0
- data/examples/tmp/tiles/4_4_13.png +0 -0
- data/examples/tmp/tiles/4_4_14.png +0 -0
- data/examples/tmp/tiles/4_4_15.png +0 -0
- data/examples/tmp/tiles/4_4_2.png +0 -0
- data/examples/tmp/tiles/4_4_3.png +0 -0
- data/examples/tmp/tiles/4_4_4.png +0 -0
- data/examples/tmp/tiles/4_4_5.png +0 -0
- data/examples/tmp/tiles/4_4_6.png +0 -0
- data/examples/tmp/tiles/4_4_7.png +0 -0
- data/examples/tmp/tiles/4_4_8.png +0 -0
- data/examples/tmp/tiles/4_4_9.png +0 -0
- data/examples/tmp/tiles/4_5_0.png +0 -0
- data/examples/tmp/tiles/4_5_1.png +0 -0
- data/examples/tmp/tiles/4_5_10.png +0 -0
- data/examples/tmp/tiles/4_5_11.png +0 -0
- data/examples/tmp/tiles/4_5_12.png +0 -0
- data/examples/tmp/tiles/4_5_13.png +0 -0
- data/examples/tmp/tiles/4_5_14.png +0 -0
- data/examples/tmp/tiles/4_5_15.png +0 -0
- data/examples/tmp/tiles/4_5_2.png +0 -0
- data/examples/tmp/tiles/4_5_3.png +0 -0
- data/examples/tmp/tiles/4_5_4.png +0 -0
- data/examples/tmp/tiles/4_5_5.png +0 -0
- data/examples/tmp/tiles/4_5_7.png +0 -0
- data/examples/tmp/tiles/4_5_8.png +0 -0
- data/examples/tmp/tiles/4_5_9.png +0 -0
- data/examples/tmp/tiles/4_6_0.png +0 -0
- data/examples/tmp/tiles/4_6_1.png +0 -0
- data/examples/tmp/tiles/4_6_10.png +0 -0
- data/examples/tmp/tiles/4_6_13.png +0 -0
- data/examples/tmp/tiles/4_6_14.png +0 -0
- data/examples/tmp/tiles/4_6_15.png +0 -0
- data/examples/tmp/tiles/4_6_2.png +0 -0
- data/examples/tmp/tiles/4_6_3.png +0 -0
- data/examples/tmp/tiles/4_6_4.png +0 -0
- data/examples/tmp/tiles/4_6_6.png +0 -0
- data/examples/tmp/tiles/4_6_7.png +0 -0
- data/examples/tmp/tiles/4_6_8.png +0 -0
- data/examples/tmp/tiles/4_6_9.png +0 -0
- data/examples/tmp/tiles/4_7_0.png +0 -0
- data/examples/tmp/tiles/4_7_1.png +0 -0
- data/examples/tmp/tiles/4_7_12.png +0 -0
- data/examples/tmp/tiles/4_7_13.png +0 -0
- data/examples/tmp/tiles/4_7_14.png +0 -0
- data/examples/tmp/tiles/4_7_15.png +0 -0
- data/examples/tmp/tiles/4_7_2.png +0 -0
- data/examples/tmp/tiles/4_7_3.png +0 -0
- data/examples/tmp/tiles/4_7_4.png +0 -0
- data/examples/tmp/tiles/4_7_5.png +0 -0
- data/examples/tmp/tiles/4_7_6.png +0 -0
- data/examples/tmp/tiles/4_7_7.png +0 -0
- data/examples/tmp/tiles/4_8_1.png +0 -0
- data/examples/tmp/tiles/4_8_12.png +0 -0
- data/examples/tmp/tiles/4_8_13.png +0 -0
- data/examples/tmp/tiles/4_8_14.png +0 -0
- data/examples/tmp/tiles/4_8_15.png +0 -0
- data/examples/tmp/tiles/4_8_2.png +0 -0
- data/examples/tmp/tiles/4_8_3.png +0 -0
- data/examples/tmp/tiles/4_8_4.png +0 -0
- data/examples/tmp/tiles/4_8_5.png +0 -0
- data/examples/tmp/tiles/4_8_6.png +0 -0
- data/examples/tmp/tiles/4_8_7.png +0 -0
- data/examples/tmp/tiles/4_8_8.png +0 -0
- data/examples/tmp/tiles/4_8_9.png +0 -0
- data/examples/tmp/tiles/4_9_1.png +0 -0
- data/examples/tmp/tiles/4_9_12.png +0 -0
- data/examples/tmp/tiles/4_9_13.png +0 -0
- data/examples/tmp/tiles/4_9_14.png +0 -0
- data/examples/tmp/tiles/4_9_15.png +0 -0
- data/examples/tmp/tiles/4_9_2.png +0 -0
- data/examples/tmp/tiles/4_9_3.png +0 -0
- data/examples/tmp/tiles/4_9_4.png +0 -0
- data/examples/tmp/tiles/4_9_5.png +0 -0
- data/examples/tmp/tiles/4_9_6.png +0 -0
- data/examples/tmp/tiles/4_9_7.png +0 -0
- data/examples/tmp/tiles/4_9_8.png +0 -0
- data/examples/tmp/tiles/4_9_9.png +0 -0
- /data/examples/{museos.png → museum.png} +0 -0
- /data/examples/{museos_datosabiertos.csv → museums.csv} +0 -0
- /data/examples/tmp/tiles/{4_0_0.png → 7_37_71.png} +0 -0
- /data/examples/tmp/tiles/{4_0_1.png → 7_37_72.png} +0 -0
- /data/examples/tmp/tiles/{4_0_10.png → 7_37_73.png} +0 -0
- /data/examples/tmp/tiles/{4_0_11.png → 7_37_74.png} +0 -0
- /data/examples/tmp/tiles/{4_0_12.png → 7_37_75.png} +0 -0
- /data/examples/tmp/tiles/{4_0_2.png → 7_37_76.png} +0 -0
- /data/examples/tmp/tiles/{4_0_6.png → 7_37_77.png} +0 -0
- /data/examples/tmp/tiles/{4_0_7.png → 7_37_87.png} +0 -0
- /data/examples/tmp/tiles/{4_0_9.png → 7_40_84.png} +0 -0
- /data/examples/tmp/tiles/{4_10_0.png → 7_40_85.png} +0 -0
- /data/examples/tmp/tiles/{4_10_10.png → 7_41_82.png} +0 -0
- /data/examples/tmp/tiles/{4_11_0.png → 7_41_83.png} +0 -0
- /data/examples/tmp/tiles/{4_11_11.png → 7_41_84.png} +0 -0
- /data/examples/tmp/tiles/{4_11_8.png → 7_41_85.png} +0 -0
- /data/examples/tmp/tiles/{4_11_9.png → 7_41_86.png} +0 -0
- /data/examples/tmp/tiles/{4_12_0.png → 7_42_80.png} +0 -0
- /data/examples/tmp/tiles/{4_12_10.png → 7_42_81.png} +0 -0
- /data/examples/tmp/tiles/{4_12_9.png → 7_42_82.png} +0 -0
- /data/examples/tmp/tiles/{4_13_0.png → 7_42_83.png} +0 -0
- /data/examples/tmp/tiles/{4_13_1.png → 7_42_84.png} +0 -0
- /data/examples/tmp/tiles/{4_13_10.png → 7_42_86.png} +0 -0
- /data/examples/tmp/tiles/{4_14_0.png → 7_42_87.png} +0 -0
- /data/examples/tmp/tiles/{4_14_1.png → 7_43_79.png} +0 -0
- /data/examples/tmp/tiles/{4_14_7.png → 7_43_80.png} +0 -0
- /data/examples/tmp/tiles/{4_15_0.png → 7_43_81.png} +0 -0
- /data/examples/tmp/tiles/{4_15_1.png → 7_43_82.png} +0 -0
- /data/examples/tmp/tiles/{4_15_11.png → 7_43_83.png} +0 -0
- /data/examples/tmp/tiles/{4_15_2.png → 7_43_84.png} +0 -0
- /data/examples/tmp/tiles/{4_15_6.png → 7_43_86.png} +0 -0
- /data/examples/tmp/tiles/{4_15_7.png → 7_43_87.png} +0 -0
- /data/examples/tmp/tiles/{4_1_0.png → 7_44_78.png} +0 -0
- /data/examples/tmp/tiles/{4_1_1.png → 7_44_79.png} +0 -0
- /data/examples/tmp/tiles/{4_1_10.png → 7_44_80.png} +0 -0
- /data/examples/tmp/tiles/{4_1_11.png → 7_44_81.png} +0 -0
- /data/examples/tmp/tiles/{4_1_12.png → 7_44_82.png} +0 -0
- /data/examples/tmp/tiles/{4_1_2.png → 7_44_83.png} +0 -0
- /data/examples/tmp/tiles/{4_1_5.png → 7_44_84.png} +0 -0
- /data/examples/tmp/tiles/{4_1_6.png → 7_44_85.png} +0 -0
- /data/examples/tmp/tiles/{4_1_8.png → 7_44_86.png} +0 -0
- /data/examples/tmp/tiles/{4_1_9.png → 7_44_87.png} +0 -0
- /data/examples/tmp/tiles/{4_2_0.png → carto_light_15_9693_18339.png} +0 -0
- /data/examples/tmp/tiles/{4_2_1.png → carto_light_15_9693_18340.png} +0 -0
- /data/examples/tmp/tiles/{4_2_10.png → carto_light_15_9693_18341.png} +0 -0
- /data/examples/tmp/tiles/{4_2_11.png → carto_light_15_9693_18342.png} +0 -0
- /data/examples/tmp/tiles/{4_2_7.png → carto_light_15_9693_18343.png} +0 -0
- /data/examples/tmp/tiles/{4_2_8.png → carto_light_15_9693_18344.png} +0 -0
- /data/examples/tmp/tiles/{4_2_9.png → carto_light_15_9693_18345.png} +0 -0
- /data/examples/tmp/tiles/{4_3_0.png → carto_light_15_9693_18346.png} +0 -0
- /data/examples/tmp/tiles/{4_3_10.png → carto_light_15_9693_18347.png} +0 -0
- /data/examples/tmp/tiles/{4_3_11.png → carto_light_15_9693_18348.png} +0 -0
- /data/examples/tmp/tiles/{4_3_9.png → carto_light_15_9693_18349.png} +0 -0
- /data/examples/tmp/tiles/{4_4_11.png → carto_light_15_9693_18350.png} +0 -0
- /data/examples/tmp/tiles/{4_5_6.png → carto_light_15_9693_18351.png} +0 -0
- /data/examples/tmp/tiles/{4_6_11.png → carto_light_15_9693_18352.png} +0 -0
- /data/examples/tmp/tiles/{4_6_12.png → carto_light_15_9693_18353.png} +0 -0
- /data/examples/tmp/tiles/{4_6_5.png → carto_light_15_9693_18354.png} +0 -0
- /data/examples/tmp/tiles/{4_7_10.png → carto_light_15_9693_18355.png} +0 -0
- /data/examples/tmp/tiles/{4_7_11.png → carto_light_15_9693_18356.png} +0 -0
- /data/examples/tmp/tiles/{4_7_8.png → carto_light_15_9693_18357.png} +0 -0
- /data/examples/tmp/tiles/{4_7_9.png → carto_light_15_9693_18358.png} +0 -0
- /data/examples/tmp/tiles/{4_8_0.png → carto_light_15_9693_18359.png} +0 -0
- /data/examples/tmp/tiles/{4_8_10.png → carto_light_15_9693_18360.png} +0 -0
- /data/examples/tmp/tiles/{4_8_11.png → carto_light_15_9693_18361.png} +0 -0
- /data/examples/tmp/tiles/{4_9_0.png → carto_light_15_9693_18362.png} +0 -0
- /data/examples/tmp/tiles/{4_9_10.png → carto_light_15_9693_18363.png} +0 -0
- /data/examples/tmp/tiles/{4_9_11.png → carto_light_15_9693_18364.png} +0 -0
data/lib/gd/gis/basemap.rb
CHANGED
|
@@ -5,6 +5,7 @@ module GD
|
|
|
5
5
|
module GIS
|
|
6
6
|
class Basemap
|
|
7
7
|
TILE_SIZE = 256
|
|
8
|
+
attr_reader :origin_x, :origin_y
|
|
8
9
|
|
|
9
10
|
def initialize(zoom, bbox, provider=:carto_light)
|
|
10
11
|
@zoom = zoom
|
|
@@ -12,8 +13,93 @@ module GD
|
|
|
12
13
|
@provider = provider
|
|
13
14
|
end
|
|
14
15
|
|
|
15
|
-
def url(z,x,y)
|
|
16
|
-
|
|
16
|
+
def url(z, x, y, style = :osm)
|
|
17
|
+
case style
|
|
18
|
+
|
|
19
|
+
# ==============================
|
|
20
|
+
# OpenStreetMap
|
|
21
|
+
# ==============================
|
|
22
|
+
when :osm
|
|
23
|
+
"https://tile.openstreetmap.org/#{z}/#{x}/#{y}.png"
|
|
24
|
+
|
|
25
|
+
when :osm_hot
|
|
26
|
+
"https://tile.openstreetmap.fr/hot/#{z}/#{x}/#{y}.png"
|
|
27
|
+
|
|
28
|
+
when :osm_fr
|
|
29
|
+
"https://a.tile.openstreetmap.fr/osmfr/#{z}/#{x}/#{y}.png"
|
|
30
|
+
|
|
31
|
+
# ==============================
|
|
32
|
+
# CARTO
|
|
33
|
+
# ==============================
|
|
34
|
+
when :carto_light
|
|
35
|
+
"https://a.basemaps.cartocdn.com/light_all/#{z}/#{x}/#{y}.png"
|
|
36
|
+
|
|
37
|
+
when :carto_light_nolabels
|
|
38
|
+
"https://a.basemaps.cartocdn.com/light_nolabels/#{z}/#{x}/#{y}.png"
|
|
39
|
+
|
|
40
|
+
when :carto_dark
|
|
41
|
+
"https://a.basemaps.cartocdn.com/dark_all/#{z}/#{x}/#{y}.png"
|
|
42
|
+
|
|
43
|
+
when :carto_dark_nolabels
|
|
44
|
+
"https://a.basemaps.cartocdn.com/dark_nolabels/#{z}/#{x}/#{y}.png"
|
|
45
|
+
|
|
46
|
+
# ==============================
|
|
47
|
+
# ESRI / ArcGIS (Satellite, terrain, hybrid)
|
|
48
|
+
# ==============================
|
|
49
|
+
when :esri_satellite
|
|
50
|
+
"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/#{z}/#{y}/#{x}"
|
|
51
|
+
|
|
52
|
+
when :esri_streets
|
|
53
|
+
"https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/#{z}/#{y}/#{x}"
|
|
54
|
+
|
|
55
|
+
when :esri_terrain
|
|
56
|
+
"https://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/#{z}/#{y}/#{x}"
|
|
57
|
+
|
|
58
|
+
when :esri_hybrid
|
|
59
|
+
"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/#{z}/#{y}/#{x}"
|
|
60
|
+
|
|
61
|
+
# ==============================
|
|
62
|
+
# STAMEN
|
|
63
|
+
# ==============================
|
|
64
|
+
when :stamen_toner
|
|
65
|
+
"https://stamen-tiles.a.ssl.fastly.net/toner/#{z}/#{x}/#{y}.png"
|
|
66
|
+
|
|
67
|
+
when :stamen_toner_lite
|
|
68
|
+
"https://stamen-tiles.a.ssl.fastly.net/toner-lite/#{z}/#{x}/#{y}.png"
|
|
69
|
+
|
|
70
|
+
when :stamen_terrain
|
|
71
|
+
"https://stamen-tiles.a.ssl.fastly.net/terrain/#{z}/#{x}/#{y}.png"
|
|
72
|
+
|
|
73
|
+
when :stamen_watercolor
|
|
74
|
+
"https://stamen-tiles.a.ssl.fastly.net/watercolor/#{z}/#{x}/#{y}.jpg"
|
|
75
|
+
|
|
76
|
+
# ==============================
|
|
77
|
+
# OpenTopoMap
|
|
78
|
+
# ==============================
|
|
79
|
+
when :topo
|
|
80
|
+
"https://a.tile.opentopomap.org/#{z}/#{x}/#{y}.png"
|
|
81
|
+
|
|
82
|
+
# ==============================
|
|
83
|
+
# Wikimedia
|
|
84
|
+
# ==============================
|
|
85
|
+
when :wikimedia
|
|
86
|
+
"https://maps.wikimedia.org/osm-intl/#{z}/#{x}/#{y}.png"
|
|
87
|
+
|
|
88
|
+
# ==============================
|
|
89
|
+
# OpenRailwayMap
|
|
90
|
+
# ==============================
|
|
91
|
+
when :railway
|
|
92
|
+
"https://tiles.openrailwaymap.org/standard/#{z}/#{x}/#{y}.png"
|
|
93
|
+
|
|
94
|
+
# ==============================
|
|
95
|
+
# CyclOSM
|
|
96
|
+
# ==============================
|
|
97
|
+
when :cyclosm
|
|
98
|
+
"https://a.tile-cyclosm.openstreetmap.fr/cyclosm/#{z}/#{x}/#{y}.png"
|
|
99
|
+
|
|
100
|
+
else
|
|
101
|
+
raise "Unknown basemap style: #{style}"
|
|
102
|
+
end
|
|
17
103
|
end
|
|
18
104
|
|
|
19
105
|
def lon2tile(lon)
|
|
@@ -36,30 +122,51 @@ module GD
|
|
|
36
122
|
@x_min = x_min
|
|
37
123
|
@y_min = y_min
|
|
38
124
|
|
|
125
|
+
@origin_x = x_min * TILE_SIZE
|
|
126
|
+
@origin_y = y_min * TILE_SIZE
|
|
127
|
+
|
|
39
128
|
FileUtils.mkdir_p("tmp/tiles")
|
|
40
129
|
|
|
41
130
|
tiles = []
|
|
42
131
|
|
|
43
132
|
(x_min..x_max).each do |x|
|
|
44
133
|
(y_min..y_max).each do |y|
|
|
45
|
-
path =
|
|
46
|
-
|
|
47
|
-
|
|
134
|
+
path = nil
|
|
135
|
+
|
|
136
|
+
unless File.exist?("tmp/tiles/#{@provider}_#{@zoom}_#{x}_#{y}.png") ||
|
|
137
|
+
File.exist?("tmp/tiles/#{@provider}_#{@zoom}_#{x}_#{y}.jpg")
|
|
138
|
+
|
|
139
|
+
uri = URI(url(@zoom, x, y, @provider))
|
|
48
140
|
|
|
49
141
|
Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
|
|
50
142
|
req = Net::HTTP::Get.new(uri)
|
|
51
143
|
req["User-Agent"] = "libgd-gis/0.1 (Ruby)"
|
|
52
144
|
|
|
53
145
|
res = http.request(req)
|
|
146
|
+
raise "Tile fetch failed #{res.code}" unless res.code == "200"
|
|
147
|
+
|
|
148
|
+
content_type = res["content-type"]
|
|
54
149
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
150
|
+
ext =
|
|
151
|
+
if content_type&.include?("png")
|
|
152
|
+
"png"
|
|
153
|
+
elsif content_type&.include?("jpeg") || content_type&.include?("jpg")
|
|
154
|
+
"jpg"
|
|
155
|
+
else
|
|
156
|
+
raise "Unsupported tile type: #{content_type}"
|
|
157
|
+
end
|
|
58
158
|
|
|
159
|
+
path = "tmp/tiles/#{@provider}_#{@zoom}_#{x}_#{y}.#{ext}"
|
|
59
160
|
File.binwrite(path, res.body)
|
|
60
161
|
end
|
|
61
|
-
|
|
162
|
+
else
|
|
163
|
+
if File.exist?("tmp/tiles/#{@provider}_#{@zoom}_#{x}_#{y}.png")
|
|
164
|
+
path = "tmp/tiles/#{@provider}_#{@zoom}_#{x}_#{y}.png"
|
|
165
|
+
else
|
|
166
|
+
path = "tmp/tiles/#{@provider}_#{@zoom}_#{x}_#{y}.jpg"
|
|
167
|
+
end
|
|
62
168
|
end
|
|
169
|
+
|
|
63
170
|
tiles << [x,y,path]
|
|
64
171
|
end
|
|
65
172
|
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module GD
|
|
2
|
+
module GIS
|
|
3
|
+
module Geometry
|
|
4
|
+
def self.buffer_line(coords, meters)
|
|
5
|
+
left = []
|
|
6
|
+
right = []
|
|
7
|
+
|
|
8
|
+
coords.each_cons(2) do |a,b|
|
|
9
|
+
x1,y1 = a
|
|
10
|
+
x2,y2 = b
|
|
11
|
+
|
|
12
|
+
dx = x2 - x1
|
|
13
|
+
dy = y2 - y1
|
|
14
|
+
|
|
15
|
+
len = Math.sqrt(dx*dx + dy*dy)
|
|
16
|
+
next if len == 0
|
|
17
|
+
|
|
18
|
+
# normal vector
|
|
19
|
+
nx = -dy / len
|
|
20
|
+
ny = dx / len
|
|
21
|
+
|
|
22
|
+
# offset in degrees (approx)
|
|
23
|
+
# 1 meter ≈ 1 / 111_320 degrees
|
|
24
|
+
off = meters / 111_320.0
|
|
25
|
+
|
|
26
|
+
left << [x1 + nx*off, y1 + ny*off]
|
|
27
|
+
right << [x1 - nx*off, y1 - ny*off]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# add last point
|
|
31
|
+
x2,y2 = coords.last
|
|
32
|
+
left << [x2, y2]
|
|
33
|
+
right << [x2, y2]
|
|
34
|
+
|
|
35
|
+
polygon = left + right.reverse
|
|
36
|
+
polygon
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
require "json"
|
|
2
|
+
|
|
3
|
+
module GD
|
|
4
|
+
module GIS
|
|
5
|
+
class LayerGeoJSON
|
|
6
|
+
def initialize(path, options = {})
|
|
7
|
+
@geojson = JSON.parse(File.read(path))
|
|
8
|
+
@color = options[:color]
|
|
9
|
+
@icon = options[:icon]
|
|
10
|
+
@label = options[:label]
|
|
11
|
+
@font = options[:font]
|
|
12
|
+
@size = options[:size] || 10
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def render!(img, projection)
|
|
16
|
+
features = @geojson["features"] || []
|
|
17
|
+
|
|
18
|
+
features.each do |f|
|
|
19
|
+
geom = f["geometry"]
|
|
20
|
+
next unless geom
|
|
21
|
+
|
|
22
|
+
type = geom["type"]
|
|
23
|
+
coords = geom["coordinates"]
|
|
24
|
+
|
|
25
|
+
case type
|
|
26
|
+
when "Point"
|
|
27
|
+
draw_points(img, projection, [coords], f["properties"])
|
|
28
|
+
when "MultiPoint"
|
|
29
|
+
draw_points(img, projection, coords, f["properties"])
|
|
30
|
+
when "LineString"
|
|
31
|
+
draw_lines(img, projection, [coords])
|
|
32
|
+
when "MultiLineString"
|
|
33
|
+
coords.each { |l| draw_lines(img, projection, [l]) }
|
|
34
|
+
when "Polygon"
|
|
35
|
+
draw_polygons(img, projection, coords)
|
|
36
|
+
when "MultiPolygon"
|
|
37
|
+
coords.each { |p| draw_polygons(img, projection, p) }
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
private
|
|
43
|
+
|
|
44
|
+
def draw_lines(img, projection, lines)
|
|
45
|
+
color = @color || [120,120,120]
|
|
46
|
+
|
|
47
|
+
lines.each do |line|
|
|
48
|
+
pts = line.map { |p| projection.call(p[0], p[1]) }
|
|
49
|
+
|
|
50
|
+
pts.each_cons(2) do |(x1, y1), (x2, y2)|
|
|
51
|
+
img.line(x1, y1, x2, y2, color)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def draw_polygons(img, projection, rings)
|
|
57
|
+
fill = @color || [200,200,200]
|
|
58
|
+
stroke = [120,120,120]
|
|
59
|
+
|
|
60
|
+
rings.each do |ring|
|
|
61
|
+
pts = ring.map { |p| projection.call(p[0], p[1]) }
|
|
62
|
+
|
|
63
|
+
img.polygon(pts, fill: fill, stroke: stroke, width: 1)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def draw_polygons(map, rings)
|
|
68
|
+
map.add_polygons(
|
|
69
|
+
rings.map { |r| r.map { |p| [p[0], p[1]] } },
|
|
70
|
+
color: @color || [200,200,200]
|
|
71
|
+
)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module GD
|
|
2
|
+
module GIS
|
|
3
|
+
class LinesLayer
|
|
4
|
+
def initialize(features, stroke:, width:)
|
|
5
|
+
@features = features
|
|
6
|
+
@stroke = stroke
|
|
7
|
+
@width = width
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def render!(img, projection)
|
|
11
|
+
@features.each do |f|
|
|
12
|
+
geom = f["geometry"]
|
|
13
|
+
|
|
14
|
+
case geom["type"]
|
|
15
|
+
when "LineString"
|
|
16
|
+
draw_line(geom["coordinates"], img, projection)
|
|
17
|
+
when "MultiLineString"
|
|
18
|
+
geom["coordinates"].each do |line|
|
|
19
|
+
draw_line(line, img, projection)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def draw_line(coords, img, projection)
|
|
26
|
+
pts = coords.map { |p| projection.call(p[0], p[1]) }
|
|
27
|
+
|
|
28
|
+
(0...pts.size-1).each do |i|
|
|
29
|
+
x1,y1 = pts[i]
|
|
30
|
+
x2,y2 = pts[i+1]
|
|
31
|
+
img.line(x1,y1,x2,y2,@stroke, thickness: @width)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
data/lib/gd/gis/layer_points.rb
CHANGED
|
@@ -5,7 +5,12 @@ module GD
|
|
|
5
5
|
@data = data
|
|
6
6
|
@lon = lon
|
|
7
7
|
@lat = lat
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
if icon
|
|
10
|
+
@icon = GD::Image.open(icon)
|
|
11
|
+
else
|
|
12
|
+
@icon = build_default_marker
|
|
13
|
+
end
|
|
9
14
|
|
|
10
15
|
@label = label
|
|
11
16
|
@font = font
|
|
@@ -16,6 +21,31 @@ module GD
|
|
|
16
21
|
@icon.save_alpha = true
|
|
17
22
|
end
|
|
18
23
|
|
|
24
|
+
def build_default_marker
|
|
25
|
+
size = 32
|
|
26
|
+
img = GD::Image.new(size, size)
|
|
27
|
+
img.alpha_blending = true
|
|
28
|
+
img.save_alpha = true
|
|
29
|
+
|
|
30
|
+
transparent = GD::Color.rgba(0,0,0,0)
|
|
31
|
+
img.filled_rectangle(0,0,size,size,transparent)
|
|
32
|
+
|
|
33
|
+
white = GD::Color.rgb(255,255,255)
|
|
34
|
+
black = GD::Color.rgb(0,0,0)
|
|
35
|
+
|
|
36
|
+
cx = size / 2
|
|
37
|
+
cy = size / 2
|
|
38
|
+
r = 12
|
|
39
|
+
|
|
40
|
+
# borde blanco
|
|
41
|
+
img.arc(cx, cy, r*2+4, r*2+4, 0, 360, white)
|
|
42
|
+
|
|
43
|
+
# relleno negro
|
|
44
|
+
img.filled_arc(cx, cy, r*2, r*2, 0, 360, black)
|
|
45
|
+
|
|
46
|
+
img
|
|
47
|
+
end
|
|
48
|
+
|
|
19
49
|
def render!(img, projector)
|
|
20
50
|
w = @icon.width
|
|
21
51
|
h = @icon.height
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module GD
|
|
2
|
+
module GIS
|
|
3
|
+
class PolygonsLayer
|
|
4
|
+
def initialize(polygons, fill:, stroke: nil, width: nil)
|
|
5
|
+
@polygons = polygons
|
|
6
|
+
@fill = fill
|
|
7
|
+
@stroke = stroke
|
|
8
|
+
@width = width
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.from_lines(features, stroke:, fill:, width:)
|
|
12
|
+
polys = []
|
|
13
|
+
|
|
14
|
+
features.each do |f|
|
|
15
|
+
coords = f["geometry"]["coordinates"]
|
|
16
|
+
poly = Geometry.buffer_line(coords, width)
|
|
17
|
+
polys << poly
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
new(polys, fill: fill, stroke: stroke)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def render!(img, projection)
|
|
24
|
+
@polygons.each do |poly|
|
|
25
|
+
pts = poly.map { |p| projection.call(p[0], p[1]) }
|
|
26
|
+
|
|
27
|
+
img.filled_polygon(pts, @fill)
|
|
28
|
+
|
|
29
|
+
if @stroke
|
|
30
|
+
pts.each_cons(2) do |a,b|
|
|
31
|
+
img.line(a[0],a[1],b[0],b[1],@stroke, thickness: 1)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
data/lib/gd/gis/map.rb
CHANGED
|
@@ -1,19 +1,29 @@
|
|
|
1
1
|
require "gd"
|
|
2
2
|
require_relative "basemap"
|
|
3
3
|
require_relative "projection"
|
|
4
|
+
require_relative "geometry"
|
|
4
5
|
require_relative "layer_points"
|
|
6
|
+
require_relative "layer_lines"
|
|
7
|
+
require_relative "layer_polygons"
|
|
8
|
+
require_relative "layer_geojson"
|
|
5
9
|
|
|
6
10
|
module GD
|
|
7
11
|
module GIS
|
|
8
12
|
class Map
|
|
13
|
+
TILE_SIZE = 256
|
|
14
|
+
|
|
9
15
|
def initialize(bbox:, zoom:, basemap:)
|
|
10
|
-
@bbox
|
|
11
|
-
@zoom
|
|
16
|
+
@bbox = bbox
|
|
17
|
+
@zoom = zoom
|
|
12
18
|
@basemap = Basemap.new(zoom, bbox, basemap)
|
|
13
19
|
@layers = []
|
|
14
20
|
end
|
|
15
21
|
|
|
16
|
-
|
|
22
|
+
# ------------------------------
|
|
23
|
+
# Layer DSL
|
|
24
|
+
# ------------------------------
|
|
25
|
+
|
|
26
|
+
def add_points(data, lon:, lat:, icon: nil, label: nil, font: nil, size: 12, color: [0,0,0])
|
|
17
27
|
@layers << PointsLayer.new(
|
|
18
28
|
data,
|
|
19
29
|
lon: lon,
|
|
@@ -26,98 +36,68 @@ module GD
|
|
|
26
36
|
)
|
|
27
37
|
end
|
|
28
38
|
|
|
29
|
-
def
|
|
39
|
+
def add_lines(features, stroke:, width:)
|
|
40
|
+
@layers << LinesLayer.new(features, stroke: stroke, width: width)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def add_polygons(polygons, fill:, stroke: nil, width: nil)
|
|
44
|
+
@layers << PolygonsLayer.new(polygons, fill: fill, stroke: stroke, width: width)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def add_geojson(path, **options)
|
|
48
|
+
@layers << LayerGeoJSON.new(path, options)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# ------------------------------
|
|
52
|
+
# Rendering
|
|
53
|
+
# ------------------------------
|
|
54
|
+
|
|
55
|
+
def render(path = "map.png")
|
|
30
56
|
tiles, x_min, y_min = @basemap.fetch_tiles
|
|
31
57
|
|
|
32
|
-
|
|
33
|
-
|
|
58
|
+
xs = tiles.map { |t| t[0] }
|
|
59
|
+
ys = tiles.map { |t| t[1] }
|
|
60
|
+
|
|
61
|
+
cols = xs.max - xs.min + 1
|
|
62
|
+
rows = ys.max - ys.min + 1
|
|
34
63
|
|
|
35
|
-
cols
|
|
36
|
-
|
|
64
|
+
width = cols * TILE_SIZE
|
|
65
|
+
height = rows * TILE_SIZE
|
|
37
66
|
|
|
38
|
-
|
|
39
|
-
|
|
67
|
+
origin_x = x_min * TILE_SIZE
|
|
68
|
+
origin_y = y_min * TILE_SIZE
|
|
40
69
|
|
|
41
|
-
@img = GD::Image.new(width,height)
|
|
70
|
+
@img = GD::Image.new(width, height)
|
|
42
71
|
@img.alpha_blending = true
|
|
43
72
|
@img.save_alpha = true
|
|
44
73
|
|
|
45
|
-
|
|
46
|
-
|
|
74
|
+
# Draw basemap
|
|
75
|
+
tiles.each do |x, y, file|
|
|
76
|
+
tile = GD::Image.open(file)
|
|
47
77
|
cx = x - x_min
|
|
48
78
|
cy = y - y_min
|
|
49
|
-
@img.copy(tile, cx*
|
|
79
|
+
@img.copy(tile, cx * TILE_SIZE, cy * TILE_SIZE, 0, 0, TILE_SIZE, TILE_SIZE)
|
|
50
80
|
end
|
|
51
81
|
|
|
52
|
-
# projection
|
|
53
|
-
|
|
54
|
-
max_x = Projection.mercator_x(@bbox[2])
|
|
55
|
-
min_y = Projection.mercator_y(@bbox[1])
|
|
56
|
-
max_y = Projection.mercator_y(@bbox[3])
|
|
57
|
-
|
|
58
|
-
projector = ->(lon,lat) {
|
|
59
|
-
px = ((lon + 180.0) / 360.0 * (2 ** @zoom) * 256)
|
|
60
|
-
rad = lat * Math::PI / 180.0
|
|
61
|
-
py = ((1 - Math.log(Math.tan(rad) + 1 / Math.cos(rad)) / Math::PI) / 2 * (2 ** @zoom) * 256)
|
|
62
|
-
|
|
63
|
-
[ (px - x0).to_i, (py - y0).to_i ]
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
@layers.each { |l| l.render!(@img, projector) }
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def tile2lon(x, z)
|
|
70
|
-
x.to_f / (2**z) * 360.0 - 180.0
|
|
71
|
-
end
|
|
82
|
+
# WebMercator projection → local pixels
|
|
83
|
+
scale = TILE_SIZE * (2 ** @zoom)
|
|
72
84
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
180.0 / Math::PI * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n)))
|
|
76
|
-
end
|
|
85
|
+
projection = lambda do |lon, lat|
|
|
86
|
+
x = (lon + 180.0) / 360.0 * scale
|
|
77
87
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
east = tile2lon(x+1, z)
|
|
81
|
-
north = tile2lat(y, z)
|
|
82
|
-
south = tile2lat(y+1, z)
|
|
83
|
-
[west, south, east, north]
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
def intersect_bbox(a,b)
|
|
87
|
-
[
|
|
88
|
-
[a[0], b[0]].max,
|
|
89
|
-
[a[1], b[1]].max,
|
|
90
|
-
[a[2], b[2]].min,
|
|
91
|
-
[a[3], b[3]].min
|
|
92
|
-
]
|
|
93
|
-
end
|
|
88
|
+
lat_rad = lat * Math::PI / 180.0
|
|
89
|
+
y = (1.0 - Math.log(Math.tan(lat_rad) + 1.0 / Math.cos(lat_rad)) / Math::PI) / 2.0 * scale
|
|
94
90
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
# Si no hay intersección, devolvemos tile vacío
|
|
100
|
-
if ib[0] >= ib[2] || ib[1] >= ib[3]
|
|
101
|
-
return GD::Image.new(256,256)
|
|
91
|
+
[
|
|
92
|
+
(x - origin_x).round,
|
|
93
|
+
(y - origin_y).round
|
|
94
|
+
]
|
|
102
95
|
end
|
|
103
96
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
)
|
|
109
|
-
|
|
110
|
-
# copiar capas
|
|
111
|
-
@layers.each { |l| submap.instance_variable_get(:@layers) << l }
|
|
112
|
-
|
|
113
|
-
submap.render
|
|
114
|
-
|
|
115
|
-
# recortar al tamaño exacto del tile
|
|
116
|
-
img = GD::Image.new(256,256)
|
|
117
|
-
img.alpha_blending = true
|
|
118
|
-
img.save_alpha = true
|
|
119
|
-
img.copy(submap.instance_variable_get(:@img), 0,0,0,0,256,256)
|
|
120
|
-
img
|
|
97
|
+
# Draw layers
|
|
98
|
+
@layers.each do |layer|
|
|
99
|
+
layer.render!(@img, projection)
|
|
100
|
+
end
|
|
121
101
|
end
|
|
122
102
|
|
|
123
103
|
def save(path)
|
data/lib/gd/gis/projection.rb
CHANGED
|
@@ -20,6 +20,20 @@ module GD
|
|
|
20
20
|
|
|
21
21
|
[px.to_i, py.to_i]
|
|
22
22
|
end
|
|
23
|
+
|
|
24
|
+
TILE_SIZE = 256
|
|
25
|
+
|
|
26
|
+
def self.lonlat_to_global_px(lon, lat, zoom)
|
|
27
|
+
lat = [[lat, 85.05112878].min, -85.05112878].max
|
|
28
|
+
n = 2.0 ** zoom
|
|
29
|
+
|
|
30
|
+
x = (lon + 180.0) / 360.0 * n * TILE_SIZE
|
|
31
|
+
|
|
32
|
+
lat_rad = lat * Math::PI / 180.0
|
|
33
|
+
y = (1.0 - Math.log(Math.tan(lat_rad) + 1.0 / Math.cos(lat_rad)) / Math::PI) / 2.0 * n * TILE_SIZE
|
|
34
|
+
|
|
35
|
+
[x, y]
|
|
36
|
+
end
|
|
23
37
|
end
|
|
24
38
|
end
|
|
25
39
|
end
|