350 Commits

Author SHA1 Message Date
Emux
0a374bc635 0.14.0 2020-08-25 18:39:22 +03:00
marq24
8602b5780a Fix issue with drawing elements with false style (#778)
When the style of the drawable has changed the level needs to adjusted before draw(...) is called - in any other case then you have the risk, that the false style will be applied to the drawable [since the false bucket (with wrong style) will be returned when calling t.buckets.get{.*}Bucket(level)]
2020-08-03 11:08:43 +03:00
Emux
ab32f25a7c Update Android Gradle plugin 2020-07-15 11:30:28 +03:00
Emux
ebfb7bd85d Merge pull request #776 from mapsforge/buffer
ReadBuffer.readFromFile: handle byte allocation
2020-07-14 15:04:45 +03:00
Emux
ed739c59f5 ReadBuffer.readFromFile: handle byte allocation 2020-07-14 15:00:49 +03:00
Emux
238a5f8f14 PointDrawable: correct constructor parameters, fix #775 2020-07-14 10:08:11 +03:00
Emux
126c47dfd7 Update samples 2020-07-03 14:22:35 +03:00
Emux
e8389e6887 LineStyle: rename constructor parameter stroke to color 2020-06-23 13:00:33 +03:00
Emux
81f526dc56 Merge pull request #773 from mapsforge/density
Android: use DisplayMetrics density
2020-06-22 15:11:33 +03:00
Emux
23ae072ed6 Android: use DisplayMetrics density 2020-06-22 14:02:06 +03:00
Emux
20f4fad7f3 Revert "Update Android build tools"
This reverts commit 1805e861
2020-06-11 11:21:38 +03:00
Emux
1805e86173 Update Android build tools 2020-06-11 11:15:00 +03:00
Emux
8acda4fbf5 Update Gradle 2020-05-29 14:35:14 +03:00
Emux
65d8bd9675 Merge pull request #771 from mapsforge/item
More mutable itemized layer
2020-05-01 10:25:13 +03:00
Emux
34ea0af92d Update changelog 2020-05-01 10:17:27 +03:00
Emux
2d64186a1a More mutable itemized layer 2020-04-28 14:15:05 +03:00
Emux
4604f07042 ItemizedLayer: fix populate in addItem 2020-04-26 16:00:29 +03:00
Emux
52f47bd797 Update docs 2020-04-24 14:45:21 +03:00
Emux
50f885b5f8 Update Android Gradle plugin 2020-04-21 11:26:58 +03:00
Emux
742405a193 Update documentation 2020-04-20 18:47:10 +03:00
Jan Lippert
18ee0a393f Update vtm-jeo module (#770) 2020-04-20 18:39:29 +03:00
Emux
29634d29b5 Update changelog 2020-04-16 18:52:12 +03:00
Andrey Novikov
635d5bacdd Render themes: symbol styles (#769) 2020-04-16 18:52:12 +03:00
Emux
1156976ea5 Disable vtm-jeo module, fix #768 2020-04-13 10:35:07 +03:00
Emux
964736d60f Update Android Gradle plugin 2020-04-01 14:52:07 +03:00
Emux
2de19ef080 Update documentation 2020-03-18 09:57:02 +02:00
Emux
0faf3eca66 InternalItem: make public 2020-03-17 12:18:46 +02:00
Emux
c239d8c1b7 Samples: set user agent for OpenStreetMap provider
https://operations.osmfoundation.org/policies/tiles/
2020-03-17 12:03:03 +02:00
Emux
c28aec5f59 MarkerRenderer: sort option 2020-03-17 11:34:53 +02:00
Emux
e0efff50a8 Update Android Gradle plugin 2020-03-02 15:51:02 +02:00
Emux
8364ff83d1 Update Mapsforge providers 2020-02-25 11:33:30 +02:00
Emux
5d7a4e0954 Update Gradle 2020-02-25 11:03:13 +02:00
Emux
2785d22a3a Update Mapsforge-Maps.md 2020-02-22 16:40:39 +02:00
Emux
2768f84a5f Update ISSUE_TEMPLATE.md 2020-02-22 14:28:34 +02:00
Emux
1ede5c5456 Update CONTRIBUTING.md 2020-02-22 14:26:10 +02:00
Emux
5778d0e74a Update Mapsforge providers 2020-02-21 14:27:41 +02:00
Emux
6672c57f05 Update Mapsforge server 2020-02-21 14:16:56 +02:00
Emux
c1fbdb42be Merge pull request #766 from zimmi/allow-clearing-event-listeners
Add EventDispatcher::clear
2020-02-10 17:50:03 +02:00
thomas
841b3af042 Add EventDispatcher::clear 2020-02-09 13:51:36 +01:00
Emux
bdd08e3486 Update Android build tools 2020-01-30 10:49:20 +02:00
Emux
68679c6dc0 Merge pull request #765 from Meibes/improvement/android/examples
android-examples: demonstrate usage of VectorTileLayer.getTileSource()
2020-01-30 10:32:59 +02:00
Stephan Brandt
9f280a41c0 ViewController: allow rotation around map view center, fix drift (#764) 2020-01-30 10:03:44 +02:00
Meibes
65c8d5199f small improvements to examples, demonstrating the new VectorTileLayer.getTileSource()-method 2020-01-28 19:42:42 +01:00
Emux
2b8326f465 Update changelog 2020-01-26 18:16:19 +02:00
Emux
488b350671 Merge pull request #763 from Meibes/feature/MapScaleBarLayer/onDetach
MapScaleBarLayer: add onDetach-method to free resources automatically
2020-01-26 18:12:58 +02:00
Emux
5285b0c272 Merge pull request #762 from Meibes/getTileSource
VectorTileLayer.getTileSource
2020-01-26 17:55:40 +02:00
Meibes
ebe98c8990 add onDetach-method to MapScaleBarLayer to free resources automatically
removed mapScaleBar.destroy() methods from onDestroy-Activity methods
changed global mapScaleBar-variables to local
2020-01-26 16:39:44 +01:00
Meibes
c30095c59d add getter for mTileSource in VectorTileLayer 2020-01-26 15:56:08 +01:00
Emux
f449a0a6fb Update Applications.md 2020-01-20 20:13:27 +02:00
Emux
74dfa07c81 Update Applications.md 2020-01-14 10:34:40 +02:00
Emux
bf6b325ce8 0.13.0 2020-01-12 15:31:31 +02:00
Emux
b43dfc53e4 Gradle: declare UTF-8 encoding for Java compile 2020-01-02 15:06:47 +02:00
Emux
883ed23272 Merge pull request #759 from mapsforge/themes
Render themes: avoid patterns and textures because of old GPU issues
2019-12-25 13:58:17 +02:00
Emux
0a0c2b3ce0 Render themes: avoid patterns and textures because of old GPU issues 2019-12-25 13:36:42 +02:00
Emux
c783255b97 Mapsforge: reduce points on-the-fly while reading from map files (except lines) #757 2019-12-17 17:54:27 +02:00
Emux
c689ad9e67 Merge pull request #758 from mapsforge/cap
Fix stroke cap line ending
2019-12-15 15:40:48 +02:00
Emux
0fabe4c738 Update changelog 2019-12-15 15:39:49 +02:00
Emux
d4a95dad19 Fix stroke cap line ending 2019-12-15 15:30:02 +02:00
Emux
4405b6235a AwtPaint: use round as default cap / join, like Mapsforge #92 2019-12-15 15:14:34 +02:00
Emux
766b0d9914 Mapsforge: reduce points on-the-fly while reading from map files (improvements) #757 2019-12-14 15:29:26 +02:00
Emux
412cacd1c2 Merge pull request #757 from mapsforge/mapsforge
Mapsforge: reduce points on-the-fly while reading from map files
2019-12-12 12:55:49 +02:00
Emux
299592d352 Update changelog 2019-12-12 12:53:30 +02:00
Emux
d512731d06 Mapsforge: reduce points on-the-fly while reading from map files 2019-12-12 12:26:19 +02:00
Emux
b2a8d3040a Render themes: area outlines as separate lines #121 2019-12-11 15:00:12 +02:00
Emux
892ea92580 Render themes: revert tessellation in water areas except sea #224 2019-12-11 12:37:03 +02:00
Emux
f7acfd9017 Samples improvements 2019-12-10 13:26:31 +02:00
Emux
701ac43746 Update Mapsforge-Maps.md 2019-12-09 14:58:18 +02:00
Emux
b926310296 Update Android Gradle plugin (#755) 2019-12-07 16:46:06 +02:00
Carlos Alberto Martínez Gadea
49d1e7bafc ItemizedLayer: Added a check that prevents Gestures from being processed if the Layer is not enabled (#754) 2019-12-04 11:18:08 +02:00
Emux
6f697ed6f8 Update changelog 2019-12-02 11:23:39 +02:00
Justus Schmidt
cdcae29ae1 Mapsforge: Move tileprojection to convert E6 int directly to tile coordinates (#752) 2019-12-02 11:10:01 +02:00
Emux
a13c4a3793 Merge pull request #753 from mapsforge/bitmap
AndroidGraphics: drawable to bitmap for Android >= 9
2019-11-30 15:43:19 +02:00
Emux
031a3bfa00 Android samples: simplify bitmap reading 2019-11-30 15:24:27 +02:00
Emux
7122e1fbc5 AndroidGraphics: drawable to bitmap for Android >= 9 2019-11-30 15:17:14 +02:00
Emux
6ed00d9a94 Style.Builder: make strokeColor public 2019-11-20 20:23:26 +02:00
Emux
327d6f1466 Animator: smooth scaling 2019-11-12 17:54:27 +02:00
Emux
17a135813b Update Android Gradle plugin 2019-11-08 10:02:55 +02:00
Emux
0dd82cb68f MapScaleBar: fix scaling 2019-11-05 15:03:18 +02:00
Emux
ae04fa83f6 MapScaleBar: minor code improvements 2019-11-04 18:26:34 +02:00
Emux
4bfcdadb76 MapScaleBar: minor optimization 2019-11-04 13:41:05 +02:00
Emux
fa5a72f20d MercatorProjection: minor code improvements 2019-11-04 13:39:45 +02:00
Emux
d81eb3d706 LocationRenderer: keep the position for which the overlay is compiled 2019-10-29 10:00:40 +02:00
Emux
97332e3e73 Merge pull request #750 from mapsforge/location
Location texture renderer: rewrite and optimize
2019-10-25 11:50:25 +03:00
Emux
e4a4857eb8 Update changelog 2019-10-25 11:50:03 +03:00
Emux
80018de754 Location texture renderer: rewrite and optimize 2019-10-25 11:43:51 +03:00
Emux
01bb7ca074 Merge pull request #749 from mapsforge/opengl
Android: OpenGL ES 2.0 default for performance / stability
2019-10-25 11:17:43 +03:00
Emux
a8f5eee505 Update changelog 2019-10-25 11:16:37 +03:00
Emux
644cf9dcb6 Android: OpenGL ES 2.0 default for performance / stability 2019-10-25 11:03:33 +03:00
Emux
cb0109ba42 Samples: use Mapsforge release version 2019-10-23 19:04:42 +03:00
Emux
2fa5afec11 Layers: make updateLayers public 2019-10-23 18:59:45 +03:00
Emux
69ea1e414a Location shader improvements 2019-10-22 18:21:43 +03:00
Emux
4866abe38e Merge pull request #748 from mapsforge/location
Location renderers: allow fixed center position
2019-10-18 14:12:33 +03:00
Emux
4c10d5848b Location renderers: allow fixed center position 2019-10-17 15:00:53 +03:00
Emux
faed3d05a5 VectorLayer: hide non usable add(Geometry, Style) method 2019-10-17 11:10:26 +03:00
Emux
88a9a9ee7f Polygon labels: use centroid position if available #734 2019-10-04 18:24:14 +03:00
Emux
3915e3343d Merge pull request #745 from Gustl22/s3db_profile
S3DB: shape profiles as constants
2019-10-04 10:10:36 +03:00
Gustl22
b22c023f1a S3DB: shape profiles as constants 2019-10-03 16:48:55 +02:00
Emux
5de7c9ec38 Update Android Gradle plugin 2019-10-03 09:39:10 +03:00
Gustl22
14c485914c S3DB: roof shape profiles (#744) 2019-10-03 09:32:57 +03:00
Emux
c20922b5f5 Tile decoders refactoring 2019-10-01 18:48:10 +03:00
Emux
1294ff9fea Symbols on lines doc improvements #743 2019-10-01 09:41:58 +03:00
Emux
992d9c8e66 Samples improvements 2019-09-30 20:03:15 +03:00
Emux
948449b3ec Fix Android samples on old Android 2019-09-29 15:09:46 +03:00
Emux
0c1c06c1bb Allow threaded system initialization 2019-09-28 22:36:17 +03:00
Emux
7ad3f4a0b1 Merge pull request #743 from mapsforge/symbol
Render themes - symbols on lines: add billboard, rotate options
2019-09-28 19:45:05 +03:00
Emux
c5836adc17 Update changelog 2019-09-28 19:44:29 +03:00
Emux
107a429517 Render themes: use symbols on lines for oneways 2019-09-28 19:38:54 +03:00
Emux
2cb0a80c47 LineStyle, SymbolStyle: use scale on repeat values 2019-09-28 19:38:22 +03:00
Emux
db9f83120a Render themes - symbols on lines: add billboard, rotate options 2019-09-28 18:50:20 +03:00
Emux
5facdb9888 XmlThemeBuilder: disable mipmap for sharper rendering 2019-09-28 18:29:47 +03:00
Emux
3f3caa1912 Update changelog 2019-09-23 19:39:33 +03:00
Emux
03b9f224b2 Render themes: improve nature park & reserve rendering 2019-09-23 19:17:52 +03:00
Emux
c013465d49 Render themes: improve nature reserve rendering 2019-09-23 18:39:52 +03:00
Emux
c91833519e Update dependencies 2019-09-18 21:11:15 +03:00
Emux
055cd54beb 0.12.0 2019-09-17 10:11:09 +03:00
Emux
3eaad42903 Update changelog 2019-09-14 20:13:49 +03:00
Emux
6ab98419df Update documentation 2019-09-09 13:12:22 +03:00
Konstantinos Tzounopoulos
a9e18a2add MBTiles vector tile source (#740)
Support offline vector maps (MBTiles, MVT, gzipped pbf)
2019-09-09 12:47:24 +03:00
Emux
83aed13683 Scale bar: allow extend unit adapters 2019-08-27 15:00:26 +03:00
Emux
5779d10632 Update Gradle 2019-08-21 12:51:32 +03:00
Emux
85e818d788 Merge pull request #739 from marq24/just_docupdate
Application: added GPSLogger II
2019-08-12 17:22:35 +03:00
Matthias Marquardt
cc1d4cf6d9 added GPSLogger II (available since 12.08.2019 with VTM) 2019-08-12 15:25:05 +02:00
Emux
0404effca3 Update Android build tools 2019-08-08 12:22:39 +03:00
Emux
eef1a8c779 ViewController: make syncViewport public 2019-08-07 10:59:29 +03:00
Emux
527fc3d42d Update changelog 2019-08-06 18:25:22 +03:00
Emux
53b262f190 Merge pull request #737 from mapsforge/bg
Render themes: text background color (highway shields)
2019-08-06 18:22:12 +03:00
Emux
dcb7b0d10c Render themes: text background color (highway shields) 2019-08-06 18:17:37 +03:00
Emux
e6137163b9 Update samples 2019-08-02 12:35:07 +03:00
Emux
2cf9a4a472 Update changelog 2019-08-02 11:17:31 +03:00
marq24
55d8797f37 Create centroids based on non clipped ways (#734)
- introduced a new member to the MapElement to store the pre-calculated centroid of the way (none clipped)
- auto create element.centroidPosition based on all (none clipped) points of a osm-way
- skipping rendering of centered symbols, if OFF screen
- introduced Parameter to enable/disable the feature
2019-08-02 11:15:53 +03:00
Emux
653c6489b9 Update ISSUE_TEMPLATE.md 2019-08-02 11:11:40 +03:00
Emux
c19e06b718 Update ISSUE_TEMPLATE.md 2019-08-01 20:31:43 +03:00
Emux
5de4c6b7ab XmlThemeBuilder: check texture load result for line symbols 2019-07-31 21:49:45 +03:00
Emux
900448f8d3 MapElement: revert clear(), #735 2019-07-31 13:57:06 +03:00
Emux
4be42dbc0f MapElement: fix clear() method, #735 2019-07-31 13:34:01 +03:00
Emux
72ba3d6429 MapDatabase: clean label position, fix #735 2019-07-31 12:48:04 +03:00
Emux
f5815203c4 Disable 'optimal' placement of labels or symbols on polygons 2019-07-31 10:50:20 +03:00
Emux
0c050c7405 libGDX 1.9.10, fix #731 2019-07-25 13:02:59 +03:00
Emux
71bf1390f6 Update Android Gradle plugin 2019-07-10 20:20:28 +03:00
Murray Hughes
368cf1ff4a XmlThemeBuilder: fix texture loaded from style patterns (#729) 2019-06-24 20:42:23 +03:00
Emux
c526599e20 Android 10 targetSdkVersion with runtime permissions, #728 2019-06-17 11:55:27 +03:00
Emux
fcf7272f2e Android 10 compatibility, fix #728 2019-06-16 21:03:37 +03:00
Emux
cf2bdb251b LocationRenderer: more public members 2019-06-06 09:46:53 +03:00
Izumi Kawashima
551c0231a0 R-tree k-nearest neighbors search improvements (#727) 2019-05-19 14:57:47 +03:00
Emux
70741d8f5b Update Gradle Android plugin 2019-05-17 20:16:10 +03:00
Emux
9209afba01 Update Changelog.md 2019-05-17 19:51:36 +03:00
Gustl22
9e81473d36 Improve Gradle Android versioning for sub-modules (#726) 2019-05-17 19:47:55 +03:00
Izumi Kawashima
ffeaf1b81c k-nearest neighbors search in R-tree (#725) 2019-05-17 18:55:38 +03:00
Emux
efab21f4f2 Merge pull request #724 from Gustl22/shader_improvements
Adapt / refactor shader uniforms and attributes
2019-05-17 17:56:02 +03:00
Gustl22
a6ce05034a Adapt / refactor shader uniforms and attributes 2019-05-16 08:19:09 +02:00
Emux
634d67a206 Fix marker touch events, fix #723 2019-05-13 18:35:13 +03:00
Gustl22
30ae0fb48f Javadoc improvements 2019-04-26 11:44:43 +03:00
Gustl22
5740290a9b Map tilt improvements (#718) 2019-04-26 11:44:43 +03:00
Emux
149d5d9057 Update desktop.md 2019-04-22 11:09:58 +03:00
Emux
fe2d806d73 Update docs 2019-04-22 10:59:39 +03:00
Emux
63ccf0dcfa vtm-desktop-lwjgl: revert package #259 2019-04-22 10:25:04 +03:00
Gustl22
5f1c3c3186 Desktop LWJGL3 backend (#717) 2019-04-22 10:19:03 +03:00
Emux
b98505c815 Update docs 2019-04-20 14:48:31 +03:00
Gustl22
5979161611 vtm-desktop: decouple libGDX LWJGL backend (#714) 2019-04-20 14:34:51 +03:00
Gustl22
d6e55edd8e CircleBucket: enable POINT_SPRITE on desktop (#716) 2019-04-20 14:30:27 +03:00
Gustl22
431eadaa87 RenderBuckets: constant TILE_FILL_VERTICES (#715) 2019-04-20 14:21:45 +03:00
Emux
df82ebfaa6 Buildings translucency does not work on macOS #61 2019-04-19 10:54:03 +03:00
Emux
b5ee7c1b46 Update Gradle 2019-04-18 20:29:50 +03:00
Emux
54b7884fa3 0.11.1 2019-04-12 19:45:34 +03:00
Emux
e5bc7c7564 OpenGL ES 3.0 is supported with Android 4.3 (API level 18) and higher, fix #713 2019-04-12 11:29:48 +03:00
Emux
cf49591d4f Update changelog 2019-04-10 12:49:35 +03:00
Andrea Antonello
71f94f3f79 MBTiles raster tile source (#708) 2019-04-10 12:49:35 +03:00
Gustl22
db6be82ce2 S3DBUtils: adjust coordinate system (RHS to LHS) (#710) 2019-04-10 12:46:15 +03:00
Gustl22
ba65786b5a GeometryUtils improvements (#709) 2019-04-10 12:41:50 +03:00
Emux
036d63c9dd Update changelog 2019-04-02 20:11:44 +03:00
Emux
07e86d24f6 OpenMapTilesMvtTileSource: update URL 2019-04-02 20:10:48 +03:00
Emux
2cbd92a01b 0.11.0 2019-03-25 17:00:00 +02:00
Emux
ba0e737c7b Format render themes 2019-03-25 14:59:53 +02:00
Emux
45b59eb6df Render theme improvements 2019-03-25 14:54:40 +02:00
Emux
a7d50fa8fa OpenGL ES 3.0: sanitize Android #646 2019-03-23 14:48:27 +02:00
Emux
2f27803fc5 Render theme callback improvements, #274 2019-03-22 13:22:11 +02:00
Emux
71a4ba1c19 Map scaling improvements, fix #401 2019-03-22 11:02:58 +02:00
Gustl22
271cab1212 GeometryUtils: fix clockwise calculation (#704) 2019-03-20 15:25:31 +02:00
Gustl22
1051aacc7c GeometryBuffer minor improvements (#703) 2019-03-20 15:16:33 +02:00
Gustl22
fb8e6dab20 GeometryBuffer: add removeLastPoint (#702) 2019-03-20 15:11:41 +02:00
Gustl22
4e37ae26c9 Tessellator: improve docs (#701) 2019-03-20 15:07:40 +02:00
Gustl22
905f27b2c2 ExtrusionsTest sample improvements (#699) 2019-03-20 15:05:02 +02:00
Emux
9d6935cf48 BucketRenderer: fix typo, #697 2019-03-12 09:14:07 +02:00
Emux
6b0e521c75 Samples improvements 2019-03-08 09:20:11 +02:00
Emux
c906c468f8 Fix AnimatorTest sample, fix #696 2019-03-07 11:08:16 +02:00
Gustl22
f7272dcdcd Render themes: allow HSV colors for S3DB (#695) 2019-03-07 10:39:13 +02:00
Emux
14283ff5cc Merge pull request #694 from Gustl22/color_mod
ColorUtil modHsv: keep alpha
2019-03-07 09:46:10 +02:00
Gustl22
e4608b17c3 ColorUtil modHsv: keep alpha 2019-03-06 21:15:27 +01:00
Emux
d81c32b97c Merge pull request #693 from Gustl22/transform_colors
S3DB: modify colors in theme
2019-03-06 18:49:30 +02:00
Gustl22
e69c5724bf S3DBUtils.getMaterialColor: use 'switch case' (#692) 2019-03-06 18:36:40 +02:00
Gustl22
da0a5673d2 vtm-playground: improve shadow sample (#691) 2019-03-06 15:45:10 +02:00
Gustl22
4cdd2a2bfb S3DB: modify colors in theme 2019-03-06 10:08:48 +01:00
Gustl22
80afa86ae4 S3DB: allow modify material colors from theme (#690) 2019-03-06 09:09:28 +02:00
Gustl22
311cc19134 Sun: set progress with custom time (#689) 2019-03-06 08:55:25 +02:00
Emux
9809398517 Update Gradle plugin 2019-03-05 11:17:13 +02:00
Gustl22
7498d58878 BuildingLayer: tag-transform color values (#683) 2019-03-05 11:11:45 +02:00
Gustl22
73e17ef4a1 vtm-playground: ExtrusionsTest (#684) 2019-03-05 09:55:11 +02:00
Gustl22
bda48858ba Poi3D models: correct flip axis on loading (#687) 2019-03-05 09:48:34 +02:00
Emux
4d35b72b25 Update Changelog.md 2019-03-04 15:56:03 +02:00
Emux
8faa374303 Update docs 2019-03-04 11:23:29 +02:00
Emux
573ec687ac Add issue template 2019-03-04 11:06:37 +02:00
Emux
4b685819d1 Update readme 2019-03-04 11:00:45 +02:00
Emux
889ce83bdf Update contributing guide 2019-03-04 10:54:40 +02:00
Emux
30304a8ddc Update README.md 2019-03-02 16:03:14 +02:00
Emux
4b12e28f3c Fix MapEventLayerTest 2019-03-02 15:16:40 +02:00
Emux
f92fc4b405 Enable physical fling and fling on rotation / scale 2019-03-02 14:45:10 +02:00
Emux
b5076c9cd2 Enable placement of labels / symbols on polygons (after overzoom) 2019-03-02 14:45:10 +02:00
Emux
5eda5b78a6 Move some test classes in vtm-tests, fix #682 2019-03-02 11:44:10 +02:00
Gustl22
207993a6e2 Tag transform improvements (#678) 2019-03-02 11:37:38 +02:00
telemaxx
4162d9b488 Samples: marker layer with labels (#681) 2019-03-01 21:09:59 +02:00
Emux
8bfca4917a Update CONTRIBUTING.md 2019-03-01 18:36:20 +02:00
Emux
2aedfaba34 Update CONTRIBUTING.md 2019-03-01 18:31:48 +02:00
Emux
4811abb3d3 Merge pull request #677 from Gustl22/rendertheme_docs
Improve Rendertheme docs
2019-03-01 18:18:16 +02:00
Gustl22
f6e51898b7 Improve Rendertheme docs 2019-02-27 18:58:24 +01:00
Emux
12070cee74 Tag transform: simplify naming, #420 2019-02-27 18:53:04 +02:00
Emux
6af46cf8cc Merge pull request #675 from Gustl22/buildinglayer_rendertheme
Fix Rendertheme set after creation of BuildingLayer
2019-02-26 17:39:15 +02:00
Gustl22
5b58e5282b Fix Rendertheme set after creation of BuildingLayer 2019-02-26 12:13:46 +01:00
Emux
0e54dc715c Samples improvements 2019-02-26 10:13:20 +02:00
Gustl22
627a316e4d ColorUtil: fix modHSV, Color: HSV (#673) 2019-02-25 20:34:35 +02:00
Emux
2efa8808c0 Update Changelog.md 2019-02-24 13:21:20 +02:00
Gustl22
b9c7d4cbb1 OverpassTileDecoder: fix unexpected roof:direction (#674) 2019-02-23 10:53:15 +02:00
Emux
f348296a8c BuildingLayer: add shadow parameter #575 2019-02-21 20:14:55 +02:00
Emux
7cfbe1c115 Map: simplify updateMap 2019-02-21 13:07:24 +02:00
Gustl22
31077cb637 Samples for Shadow and Overpass (#670) 2019-02-21 11:27:12 +02:00
Emux
8e685b7ebb Merge pull request #671 from Gustl22/readme
Update Readme.md
2019-02-21 10:25:46 +02:00
Emux
ca3871eb61 Merge pull request #669 from Gustl22/sun
Sun: fix color update on init equal progress
2019-02-21 09:58:59 +02:00
Gustl22
ebe4095438 Update Readme.md 2019-02-21 03:34:28 +01:00
Gustl22
ec50f11e3e Sun: fix color update on init equal progress 2019-02-21 00:32:44 +01:00
Emux
446d0133cf Update changelog 2019-02-20 20:24:01 +02:00
Gustl22
b4a98ef1a9 Shadow for buildings (#668)
Co-authored-by: Izumi Kawashima <schedul.xor@gmail.com>
2019-02-20 20:11:57 +02:00
Emux
ba123910a4 Update changelog 2019-02-20 10:53:54 +02:00
Gustl22
23d65486e6 Overpass tile source (#665) 2019-02-20 10:53:54 +02:00
Gustl22
c0c8abe3a7 TagSet: set from other TagSet 2019-02-20 09:51:11 +02:00
Gustl22
f599a14506 Extend GLState: viewport, texture, framebuffer (#667) 2019-02-20 09:49:26 +02:00
Gustl22
46349724a8 GLUtils: generate / draw buffers, set color (#666) 2019-02-19 15:31:48 +02:00
Emux
915cdae09c Update changelog 2019-02-19 14:15:34 +02:00
Gustl22
bac510370a GL shader preprocessor improvements (#658) 2019-02-19 13:56:25 +02:00
Gustl22
45cf4057d1 GL30 adapter (#652) 2019-02-19 13:45:22 +02:00
Gustl22
f6f00c2521 GL30 from libGDX (#643) 2019-02-19 13:42:42 +02:00
Emux
f6af3d7410 Merge pull request #664 from Gustl22/geometry_utils
GeometryUtils: Fix reverse clockwise check
2019-02-19 13:31:23 +02:00
Emux
7c2976819f Samples: add shadows test #655 2019-02-19 13:12:58 +02:00
Gustl22
eb3efa7a69 Sun calculator (#655) 2019-02-19 12:55:37 +02:00
Gustl22
16132f7ae3 GeometryUtils: Fix reverse clockwise check 2019-02-19 11:51:02 +01:00
Izumi Kawashima
c06b2712a0 GLMatrix: lookAt, orthoM (#656) 2019-02-19 12:08:27 +02:00
Gustl22
28b16a3232 GeometryUtils: length, normalize | ColorUtil: blend (#653) 2019-02-19 12:05:39 +02:00
Gustl22
0a8e56ea05 DateTime adapter (#628) 2019-02-19 12:05:39 +02:00
Gustl22
1f0b5509ed Extend GeometryUtils, ArrayUtils (#662) 2019-02-19 11:53:28 +02:00
Gustl22
777d33a4de Gradle: remove redundant resources (#660) 2019-02-19 11:15:43 +02:00
Gustl22
5887d5c6a2 BitmapTileLayer: alpha fade improvements (#661) 2019-02-19 10:58:55 +02:00
Emux
a443e732f5 Update changelog 2019-02-19 10:47:04 +02:00
Gustl22
fc452a76e7 Format shaders (#654) 2019-02-11 09:34:49 +02:00
Gustl22
48a5c36c31 Extrusions: light source calculation with normals (#651) 2019-02-10 16:24:49 +02:00
Emux
bab34aab2b Fix some typos 2019-02-10 16:24:49 +02:00
Emux
98ab1f7100 Update Gradle plugin 2019-02-07 15:06:48 +02:00
Gustl22
1734f3f87a Extrusion shader variable docs (#650) 2019-02-07 14:23:47 +02:00
Emux
3a8e50d703 Merge pull request #649 from Gustl22/alpha
mesh extrusions shader: transparent alpha fade
2019-02-07 14:21:13 +02:00
Gustl22
235decb041 mesh extrusions shader: transparent alpha fade 2019-02-03 19:02:05 +01:00
Emux
6bbedd0f2b Update changelog 2019-02-02 14:54:08 +02:00
Gustl22
ce87e89b4f Complete GL20 interface (#642) 2019-02-02 14:50:21 +02:00
Emux
1af38a7306 GLShader: Error: uniform u_mode specified with different precision in different shaders. Fix #641 2019-01-26 14:33:43 +02:00
Gustl22
d219632825 Format shaders (#639) 2019-01-26 14:20:08 +02:00
Emux
84d6b311ea Merge pull request #638 from Gustl22/uMode
Shaders: u_mode uniform as integer
2019-01-26 12:34:22 +02:00
Gustl22
c32652c066 u_Mode uniform as integer 2019-01-25 20:46:51 +01:00
Gustl22
11a5d841f9 GL debug improvements (#636) 2019-01-24 09:29:00 +02:00
Emux
25c75a009d Travis: switch to OpenJDK 2019-01-23 13:21:29 +02:00
Emux
b611b979e4 libGDX 1.9.9 #635 2019-01-23 13:10:08 +02:00
Emux
540d6c23f9 libGDX 1.9.9, fix #635 2019-01-23 12:45:50 +02:00
Emux
5eb27b7553 Update Gradle 2019-01-23 12:19:34 +02:00
Emux
ef87bae51f Mapilion: more hillshading options #614 2019-01-23 10:38:54 +02:00
Emux
8c2f788069 GL debug improvements #626 2019-01-23 10:21:37 +02:00
Gustl22
cae68ffec9 BuildingLayer: add getExtrusionRenderer (#633) 2019-01-23 09:49:55 +02:00
Emux
929d1fc78b Merge pull request #634 from Gustl22/width_height_doc
Viewport: doc for height and width
2019-01-23 09:42:51 +02:00
Gustl22
608edc2d46 vtm-web: move SLF4J GWT logger provider to app implementations (#630) 2019-01-23 09:37:11 +02:00
Gustl22
a0c7a70e00 Viewport: doc for height and width 2019-01-23 01:20:13 +01:00
Gustl22
a3cdace8d2 Web: doc for debugging (#632) 2019-01-22 22:38:28 +02:00
Emux
de2fe89ecd Merge pull request #631 from Gustl22/poi3d_logging
Poi3D: disable debug log with much traffic
2019-01-22 22:30:35 +02:00
Emux
73b530a807 Merge pull request #627 from Gustl22/gradle
vtm-web: fix nested folder in gradle
2019-01-22 22:28:23 +02:00
Gustl22
4b418b9bb9 Improve GL debug (#626) 2019-01-22 21:47:21 +02:00
Gustl22
e514e29010 Poi3D: disable debug log with much traffic 2019-01-19 18:22:20 +01:00
Emux
8d34090eb8 Update applications list 2019-01-07 18:33:54 +02:00
Gustl22
93d6c1bf14 vtm-web: fix nested folder in gradle 2019-01-07 01:04:50 +01:00
mathieudebrito
a1c45d1dc3 Update changelog 2018-12-21 19:26:22 +02:00
mathieudebrito
69421c0381 ViewController: pivotX, pivotY in map view center (#625) 2018-12-21 19:22:02 +02:00
Emux
1efed2bef8 Samples improvements #32 2018-12-20 11:25:03 +02:00
Emux
98474b187d OpenMapTilesMvtTileSource: use proper url #482 2018-12-20 11:25:03 +02:00
Gustl22
abd08ab884 Reorder GL 2.0 interface like libGDX (#623) 2018-12-20 11:06:13 +02:00
Gustl22
e18f3577f0 CircleBucket: exclude VERTEX_PROGRAM_POINT_SIZE on Android (#620) 2018-12-20 10:55:25 +02:00
Emux
8ac26e9567 Update Applications.md 2018-12-16 17:30:06 +02:00
Gustl22
c984eae2d5 Reorder method / field modifiers (#619)
* Reorder method / field modifiers

* Reorder method / field modifiers v2
2018-12-14 20:38:54 +02:00
Gustl22
d806d6bcca Add missing @Override annotations (#617) 2018-12-12 11:10:33 +02:00
Emux
a62d77583b Merge pull request #616 from Gustl22/poi3d_v2
Poi3DLayer improvements v2
2018-12-10 20:06:33 +02:00
Gustl22
6f4ab468a7 Poi3D: Zoomlimiter,
improved line/area model placement,
optional hiding theme renders
2018-12-10 16:01:11 +01:00
Gustl22
20352f2053 vtm-core: supplement Box (#609) 2018-12-10 14:33:02 +02:00
Gustl22
357ec99b44 vtm-core: reorder Box code (#615) 2018-12-10 14:23:54 +02:00
Emux
0271e9df23 Mapilion vector tiles & Hillshading, fix #614 2018-12-09 19:38:24 +02:00
Emux
04a18f82e1 Merge pull request #612 from Gustl22/tileclipper
TileClipper: synchronize clip
2018-12-09 16:42:12 +02:00
Gustl22
576d5f741d Desktop.md: instructions to run standalone jar (#613) 2018-12-09 16:00:50 +02:00
Emux
01958b7d34 Gradle build improvements 2018-12-09 15:56:37 +02:00
Emux
41d5d21bc6 Merge pull request #608 from Gustl22/static_final
Refactor 'final static' to 'static final' convention
2018-12-09 15:44:22 +02:00
Emux
b0f155a377 MapScaleBarLayer: check if scale bar is destroyed, fix #611 2018-12-09 15:02:49 +02:00
Gustl22
a517b76e9e TileClipper: synchronize clip() 2018-12-07 23:46:25 +01:00
Gustl22
70dd6554c3 refactor 'final static' to 'static final' convention 2018-12-06 21:06:04 +01:00
Gustl22
62132937da poi3D enhancements for playground (#607) 2018-12-05 11:11:45 +02:00
Emux
2784d78737 Merge pull request #606 from Gustl22/poi3d_android
Poi3D for Android
2018-12-05 10:47:23 +02:00
Gustl22
b5036f4cfd poi3D for Android 2018-12-04 09:11:51 +01:00
Emux
2388c352d5 Update changelog 2018-12-03 12:13:28 +02:00
Izumi Kawashima
09a6cf2497 vtm-gdx-poi3d module (#600) 2018-12-03 12:04:20 +02:00
Emux
e20b941eb9 Merge pull request #605 from Gustl22/glstate_const
GLState: constant UNBIND = 0
2018-12-03 11:43:30 +02:00
Emux
1dba14ec9a Merge pull request #604 from Gustl22/issue_601
Playground renderer: bind with GLState, #601
2018-12-03 11:40:40 +02:00
Emux
e773d868f1 Merge pull request #603 from Gustl22/short_constant
Renderer: replace with SHORT_BYTES constant for better readability
2018-12-03 11:36:25 +02:00
Gustl22
07afebba4e GLState: constant UNBIND = 0 2018-12-02 23:43:46 +01:00
Gustl22
7146875c05 Playground renderer: bind with GLState (#601) 2018-12-02 23:34:37 +01:00
Gustl22
42627d5881 Renderer: replace with SHORT_BYTES constant for readability 2018-12-02 23:23:29 +01:00
Emux
bb87c8a51b Overzoom: fix reverse geocode #393 2018-11-16 14:13:32 +02:00
Emux
b69570aa68 Render theme improvements #41 2018-10-31 14:07:19 +02:00
Izumi Kawashima
699e9e37f3 XmlThemeBuilder: fix check at <atlas> tag processing (#598) 2018-10-31 11:52:45 +02:00
Emux
63b62e3c82 Update README.md 2018-10-31 11:18:03 +02:00
Emux
6a2b2afdba Tag transform: check theme existence, #420 2018-10-21 17:29:38 +03:00
Emux
292c092be3 Layers: catch ArrayIndexOutOfBoundsException in updateLayers, #596 2018-10-21 17:29:38 +03:00
Emux
85c604c1ee Update Gradle plugin 2018-10-12 10:23:40 +03:00
Emux
a530070ecf Render themes: PNG scaling, fix #595 2018-10-11 14:08:35 +03:00
Emux
f853e54d77 XmlThemeBuilder: fix checkElement 2018-10-11 14:08:35 +03:00
Emux
928ece7853 Update changelog 2018-10-10 21:11:52 +03:00
Emux
9524c9d74d XmlThemeBuilder: fix checkElement 2018-10-10 21:09:38 +03:00
Gustl22
61318bff8a Render themes: tag transform (#587) 2018-10-10 21:06:37 +03:00
Emux
7c2d2d3759 Update Gradle 2018-10-01 10:23:27 +03:00
Emux
34f4432818 PathLayer(s) scaled width, fix #594 2018-09-22 14:31:34 +03:00
Emux
596679d1f9 ItemizedLayer: improve scaling in touch calculations 2018-09-22 14:30:38 +03:00
Emux
14c6b6fe8f vtm-jts: add blur option in (line) style 2018-09-21 13:33:14 +03:00
Emux
e6006a0228 MapRenderer: add null check for layer renderers, fix #593 2018-09-21 10:12:56 +03:00
Gustl22
f44f083378 S3DBLayer: distinguish extrusion style (side / top) colors (#592) 2018-09-21 10:00:29 +03:00
Gustl22
f258bae8fd Improve GdxModelLayer (#590)
- multiple models / positions
- use GdxRenderer3D2
- use MIN_ZOOM
- improved model scaling
- rearrange / tidy up
2018-09-21 09:55:17 +03:00
Emux
47f9251c87 MapTile.unlock improvements #539 2018-09-12 20:53:29 +03:00
Emux
650a82a681 Merge pull request #589 from Gustl22/vtm-models
vtm-models: make `tree.g3dj` metric
2018-09-11 15:15:34 +03:00
Emux
219b943d59 Merge pull request #588 from Gustl22/poi3DLayer
Improve Poi3DLayer
2018-09-11 15:14:53 +03:00
Emux
98717e7b46 Merge pull request #586 from Gustl22/separator
MapDatabase: separate POIs
2018-09-11 14:44:02 +03:00
Gustl22
bb924181b4 vtm-models: make tree.g3dj metric 2018-09-10 15:07:22 +02:00
Gustl22
7c92d1045a Improve Poi3DLayer:
- insert MIN_ZOOM
- support multiple models / multiple tags
- parameter RANDOM_TRANSFORM
- use ground scale
2018-09-10 15:01:12 +02:00
Gustl22
e0f6afaf43 MapDatabase: separate POIs 2018-09-09 21:42:27 +02:00
Gustl22
d36320967c vtm-models: add 3D models, rename treeA.g3dj (#582) 2018-09-08 20:50:37 +03:00
Gustl22
33528a3e61 Poi3DLayer: use GdxRenderer3D2, rearrange code (#584) 2018-09-08 20:32:25 +03:00
Emux
131e1a183c Merge pull request #583 from Gustl22/gdx_renderer
GdxRenderer3D2: render light source, minor tidy up
2018-09-08 20:20:46 +03:00
Gustl22
6fa1c5aa94 Overzoom: separate GeometryType.POINT (#574) 2018-09-08 19:35:48 +03:00
Gustl22
62055a1aa1 GdxRenderer3D2: render light source, minor tidy up 2018-09-06 15:46:09 +02:00
Gustl22
da09a62605 PoiSearchActivity sample: add search by tag (#579) 2018-09-05 19:15:24 +03:00
Emux
7a7ceb6d60 Update changelog 2018-09-05 15:01:12 +03:00
Emux
3bba870c90 vtm-models module, fix #580 2018-09-05 14:50:54 +03:00
Gustl22
272ce1d9b6 vtm-themes: move GDX models (#577) 2018-09-05 14:42:38 +03:00
Emux
de259c27d7 Merge pull request #576 from Gustl22/modelinstance
vtm-playground: replace SharedModel with ModelInstance
2018-09-05 14:19:44 +03:00
Gustl22
74a7150cff Replace SharedModel with ModelInstance 2018-08-30 10:21:35 +02:00
476 changed files with 20993 additions and 5743 deletions

View File

@@ -1,32 +1,32 @@
sudo: false sudo: false
language: android language: android
jdk: jdk:
- oraclejdk8 - openjdk8
env: env:
global: global:
- ANDROID=28 - ANDROID=29
- ANDROID_BUILD_TOOLS=28.0.2 - ANDROID_BUILD_TOOLS=29.0.3
- GRADLE_OPTS="-Xmx2048m" - GRADLE_OPTS="-Xmx2048m"
- secure: sW674wuFZOuoX7jHQHDbX3j8NxL8JxR07cyq+CrrqJ537dU9lxWQmMBRUpOb+p/q7sQ74PUtiKJkmFgKCSJSAKY+nr6GJ8P/q6u5TUKbmUWODSn8znehX2zualfvFwpF4PILok/wUzXBQE62jn4lUua7cMdsHRMNHbLmKqBoVL0meObDDjsaJ/RCbOPuruy3FmgvXPp0+Y4zl1GsklDSyjFzg4LBzjAk9Ryvh1O4zvJBkkyfCgurLKCnOKIPy3v5fPMS9oDfO1aarAVGoZZe416pvTW4hb8cdB6kn9XWYDob4NDFX/sP5k7XIhd/NAIn9LrKFg0sLtATaKLX+BcasF1CgDR/u6+SEeQd5QaRF7Go2Nq5Ltuu4OIFONI2qhEeVDDK6Otf2WSWj9KPno2GHuumBfbg4ypWoJgmZrMXk8JeVV/OP/0jIQz3p/7yfF21X1XBEqYaVHPAMKdEYYkCSa46KfACyOt6LfnkuCHtoTOpFo7sq0omIA2HOtpIx1u3vMBUyAbQqT6cokkKB1b6gNTFwhHc+8ybfLFPljJB8cWshI+V/b06S6fekRmvTNxvDykWNsdlkENBYqc9hMfjcT4hO4K+76SWN62mimQYODvFyfTVMC7WkQ3k/XEnmqUPV5XkbaILbS1d/tA57N148FiJ5/QXtI6Y94imubYyVqU= - secure: sW674wuFZOuoX7jHQHDbX3j8NxL8JxR07cyq+CrrqJ537dU9lxWQmMBRUpOb+p/q7sQ74PUtiKJkmFgKCSJSAKY+nr6GJ8P/q6u5TUKbmUWODSn8znehX2zualfvFwpF4PILok/wUzXBQE62jn4lUua7cMdsHRMNHbLmKqBoVL0meObDDjsaJ/RCbOPuruy3FmgvXPp0+Y4zl1GsklDSyjFzg4LBzjAk9Ryvh1O4zvJBkkyfCgurLKCnOKIPy3v5fPMS9oDfO1aarAVGoZZe416pvTW4hb8cdB6kn9XWYDob4NDFX/sP5k7XIhd/NAIn9LrKFg0sLtATaKLX+BcasF1CgDR/u6+SEeQd5QaRF7Go2Nq5Ltuu4OIFONI2qhEeVDDK6Otf2WSWj9KPno2GHuumBfbg4ypWoJgmZrMXk8JeVV/OP/0jIQz3p/7yfF21X1XBEqYaVHPAMKdEYYkCSa46KfACyOt6LfnkuCHtoTOpFo7sq0omIA2HOtpIx1u3vMBUyAbQqT6cokkKB1b6gNTFwhHc+8ybfLFPljJB8cWshI+V/b06S6fekRmvTNxvDykWNsdlkENBYqc9hMfjcT4hO4K+76SWN62mimQYODvFyfTVMC7WkQ3k/XEnmqUPV5XkbaILbS1d/tA57N148FiJ5/QXtI6Y94imubYyVqU=
- secure: AdKSZKA4gMuKXI4X4dQNJqcMv5OmPIHdN8fpy55Y9yoOQPQHZE3Zwc4QDWBh20q298jyEC854tVTPTysdZ7h+2s2FhsprYv1Bt/QNzKIrLpeIMj2quuVGMbdPuk08y55gost94KwVLJv0sIDpRlB/PEQkA7Mg/UDsT9zR8E1Ms5x+ul2C8e1ag0zzNl1wVnT5jY8WCp74uA/XXCcJl/80qT1stUERazCKwbKNo007hi7rdm4HA7YGevORq8e2r67je+WIBZUAwrHT0Zjuo4ibwUii4LdwvjuN3w0Z6e9Wf4x5bBqGgnih0T31uom2yPjNx+U/c2AWI+Nxfy/SEF2U+9bjBEZ3ZhI7F1B9ofXo2mhvvsVDiUrymMBbG2V64C9kAzeUh7xIBTqIrbdtpAEBV9FlLAtF2swVTwtCgZgcVTOt3RKXCi3X3nk3cuH7PAorFa/QGfT4xxVu2011FVAt2Rm7SD0ZWztZTSTz/4Nt/egtGBOJfrCc7oLEygLzDmLqsqCwCROITVQjWLjrtqDyLteaNiSXeNIQMKun3izApbXnHmXB+FV3R3EZocboqk3v5bmPTahnG6Ghc2zknWyyxSx+O9qIfOpHUL8JMJiT82lUQUeibtCn7DCE8wVQ/gYC5i+a+KO/d3NemSzIFlZ8aoUiEPYq18dYlsDXeLXwF0= - secure: AdKSZKA4gMuKXI4X4dQNJqcMv5OmPIHdN8fpy55Y9yoOQPQHZE3Zwc4QDWBh20q298jyEC854tVTPTysdZ7h+2s2FhsprYv1Bt/QNzKIrLpeIMj2quuVGMbdPuk08y55gost94KwVLJv0sIDpRlB/PEQkA7Mg/UDsT9zR8E1Ms5x+ul2C8e1ag0zzNl1wVnT5jY8WCp74uA/XXCcJl/80qT1stUERazCKwbKNo007hi7rdm4HA7YGevORq8e2r67je+WIBZUAwrHT0Zjuo4ibwUii4LdwvjuN3w0Z6e9Wf4x5bBqGgnih0T31uom2yPjNx+U/c2AWI+Nxfy/SEF2U+9bjBEZ3ZhI7F1B9ofXo2mhvvsVDiUrymMBbG2V64C9kAzeUh7xIBTqIrbdtpAEBV9FlLAtF2swVTwtCgZgcVTOt3RKXCi3X3nk3cuH7PAorFa/QGfT4xxVu2011FVAt2Rm7SD0ZWztZTSTz/4Nt/egtGBOJfrCc7oLEygLzDmLqsqCwCROITVQjWLjrtqDyLteaNiSXeNIQMKun3izApbXnHmXB+FV3R3EZocboqk3v5bmPTahnG6Ghc2zknWyyxSx+O9qIfOpHUL8JMJiT82lUQUeibtCn7DCE8wVQ/gYC5i+a+KO/d3NemSzIFlZ8aoUiEPYq18dYlsDXeLXwF0=
android: android:
components: components:
- tools - tools
- platform-tools - platform-tools
- tools - tools
- build-tools-$ANDROID_BUILD_TOOLS - build-tools-$ANDROID_BUILD_TOOLS
- android-$ANDROID - android-$ANDROID
before_install: before_install:
- yes | sdkmanager "platforms;android-$ANDROID" - yes | sdkmanager "platforms;android-$ANDROID"
script: script:
- ./gradlew clean build - ./gradlew clean build
after_success: after_success:
- if [ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then - if [ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
./gradlew uploadArchives -PSONATYPE_USERNAME="${SONATYPE_USERNAME}" -PSONATYPE_PASSWORD="${SONATYPE_PASSWORD}"; ./gradlew uploadArchives -PSONATYPE_USERNAME="${SONATYPE_USERNAME}" -PSONATYPE_PASSWORD="${SONATYPE_PASSWORD}";
fi fi
notifications: notifications:
email: email:
recipients: recipients:
- secure: fOInp4SGBqiIMgnsGceQTa0SuFLaAoxAF15W0crhuljGlqSgnbnBjh0xFEF4P5+q3VT3DgDZs53GVVo6S9gEl8AWJy84KGuUX1M/CQKUQC4bwNXJdHfY3MIy6D50da6UfwWeNS4ienKh2Rj6w2TapN9M8C9nJJZk9aJFc9NWZmWTVboHZd4oUDeeRBJ6KSk1Ay7L/mmxv4cMCXaW7pPJixvUFESKNYgK4KAN3zYpym2UijrQ8zf7OVcYnTorcAuXUZDk8EvwdHl3rIAdlbVqvyZ8rmoQ2Da/Q2VlWUL/HrHUVJtCPZ+T+dNUag4a8joIDqWKwcyk76PElmgft3azb7GERb+bkZz1ToQc2IvuOeUk2SsuXWZugoEQImKWl/yWeirWBLrwzieaVh4j04dMSn/Npc1yL5kjX9EuiM6MFHdYPianMpvhFiaYKihjzW0GPV6sfuY7xS8cA9L9DjAsXoHIXIxc/+hRA+bpPUl+qMaQdGjJmNJJ2VPFnOY0XCsDDQDIVa3nZOA6aXMUG2c4H26RJZPe7uvfRiuL86n3KAmkoXSwne9t8WYMgl89LMsU5XxjBvwz2Qa1HqG09tVs6nhB23easrhEYEf/ZsGg0DIIL1FImUHj+wUUfZXeyFmbiE6lD/i2+3a5DqzZGHbXUDCoUIagObMf8fe2z5+0K/Q= - secure: fOInp4SGBqiIMgnsGceQTa0SuFLaAoxAF15W0crhuljGlqSgnbnBjh0xFEF4P5+q3VT3DgDZs53GVVo6S9gEl8AWJy84KGuUX1M/CQKUQC4bwNXJdHfY3MIy6D50da6UfwWeNS4ienKh2Rj6w2TapN9M8C9nJJZk9aJFc9NWZmWTVboHZd4oUDeeRBJ6KSk1Ay7L/mmxv4cMCXaW7pPJixvUFESKNYgK4KAN3zYpym2UijrQ8zf7OVcYnTorcAuXUZDk8EvwdHl3rIAdlbVqvyZ8rmoQ2Da/Q2VlWUL/HrHUVJtCPZ+T+dNUag4a8joIDqWKwcyk76PElmgft3azb7GERb+bkZz1ToQc2IvuOeUk2SsuXWZugoEQImKWl/yWeirWBLrwzieaVh4j04dMSn/Npc1yL5kjX9EuiM6MFHdYPianMpvhFiaYKihjzW0GPV6sfuY7xS8cA9L9DjAsXoHIXIxc/+hRA+bpPUl+qMaQdGjJmNJJ2VPFnOY0XCsDDQDIVa3nZOA6aXMUG2c4H26RJZPe7uvfRiuL86n3KAmkoXSwne9t8WYMgl89LMsU5XxjBvwz2Qa1HqG09tVs6nhB23easrhEYEf/ZsGg0DIIL1FImUHj+wUUfZXeyFmbiE6lD/i2+3a5DqzZGHbXUDCoUIagObMf8fe2z5+0K/Q=
on_success: always on_success: always
on_failure: always on_failure: always

View File

@@ -4,13 +4,15 @@
# V™ # V™
VTM was developed within the [OpenScienceMap](https://github.com/opensciencemap) project. <img src="docs/logo/VTM.svg" style="bottom:0;" width="200" align="right">
**This fork continues VTM development. And provides compatibility with latest [Mapsforge](https://github.com/mapsforge/mapsforge).** VTM (Vector Tile Map) was developed within the [OpenScienceMap](https://github.com/opensciencemap) project.
See the **[integration guide](docs/Integration.md)** and [changelog](docs/Changelog.md). And read through [how to contribute](.github/CONTRIBUTING.md) guidelines. **This fork continues VTM development and provides compatibility with [Mapsforge](https://github.com/mapsforge/mapsforge).**
If you have any questions or problems, don't hesitate to ask our public [mailing list](https://groups.google.com/group/mapsforge-dev) for help. See the **[integration guide](docs/Integration.md)** and [changelog](docs/Changelog.md). And read through [how to contribute](docs/CONTRIBUTING.md) guidelines.
If you have any questions or problems, don't hesitate to ask our public [forum](https://groups.google.com/group/mapsforge-dev) for help.
## Features ## Features
- Java map library - Java map library
@@ -19,7 +21,8 @@ If you have any questions or problems, don't hesitate to ask our public [mailing
- Support for multiple tile sources: - Support for multiple tile sources:
- OpenScienceMap vector tiles - OpenScienceMap vector tiles
- Mapsforge vector maps - Mapsforge vector maps
- Mapbox vector tiles (e.g. Mapzen, Nextzen, OpenMapTiles) - MBTiles vector & raster maps
- Mapbox vector tiles (e.g. Mapilion, Mapzen, Nextzen, OpenMapTiles)
- GeoJSON vector tiles (e.g. Mapzen, Nextzen) - GeoJSON vector tiles (e.g. Mapzen, Nextzen)
- Raster tiles: any quadtree-scheme tiles as texture - Raster tiles: any quadtree-scheme tiles as texture
- Backends: - Backends:
@@ -35,6 +38,8 @@ If you have any questions or problems, don't hesitate to ask our public [mailing
- **vtm-gdx** common libGDX backend - **vtm-gdx** common libGDX backend
- **vtm-android-gdx** Android libGDX backend - **vtm-android-gdx** Android libGDX backend
- **vtm-desktop** Desktop libGDX backend - **vtm-desktop** Desktop libGDX backend
- **vtm-desktop-lwjgl** Desktop LWJGL backend
- **vtm-desktop-lwjgl3** Desktop LWJGL 3 backend
- **vtm-playground** Desktop examples - **vtm-playground** Desktop examples
- **vtm-ios** iOS libGDX backend - **vtm-ios** iOS libGDX backend
- **vtm-ios-example** iOS examples - **vtm-ios-example** iOS examples
@@ -59,16 +64,24 @@ This library contains code from several projects:
- **osmdroid** (Apache 2.0): some overlay classes (https://github.com/osmdroid/osmdroid) - **osmdroid** (Apache 2.0): some overlay classes (https://github.com/osmdroid/osmdroid)
- **tessellate** (SGI Free Software License B 2.0): (https://github.com/cscheid/tessellate) - **tessellate** (SGI Free Software License B 2.0): (https://github.com/cscheid/tessellate)
## License
VTM library is under [LGPL v3 license](http://www.gnu.org/licenses/lgpl-3.0), with an important simplification: the constraints mentioned in sections LGPL v3 §4(d) and §4(e) are waived.
This means that you are allowed to convey a Combined Work without providing the user any way to recombine or relink the application and without providing any shared library mechanism.
In other words, you are allowed to include VTM library in your Android application, without making your application open source.
## Screenshots ## Screenshots
### Android | Android | iOS |
![Android](docs/images/android.png) | ------------- | ------------- |
|<img src="docs/images/android.png" width="1000">|<img src="docs/images/ios.png" width="1000">|
### iOS | Desktop |
![iOS](docs/images/ios.png) | ------------- |
|![Desktop](docs/images/desktop.png)|
### Desktop | Browser |
![Desktop](docs/images/desktop.png) | ------------- |
|![Browser](docs/images/browser.png)|
### Browser
![Browser](docs/images/browser.png)

View File

@@ -4,8 +4,8 @@ buildscript {
jcenter() jcenter()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.1.4' classpath 'com.android.tools.build:gradle:4.0.1'
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0' classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
} }
} }
@@ -14,10 +14,10 @@ allprojects {
version = 'master-SNAPSHOT' version = 'master-SNAPSHOT'
ext.isReleaseVersion = !version.endsWith("SNAPSHOT") ext.isReleaseVersion = !version.endsWith("SNAPSHOT")
ext.androidBuildVersionTools = "28.0.2" ext.androidBuildVersionTools = "29.0.3"
ext.gdxVersion = "1.9.8" ext.gdxVersion = "1.9.10"
ext.gwtVersion = "2.8.0" ext.gwtVersion = "2.8.2"
ext.slf4jVersion = "1.7.25" ext.slf4jVersion = "1.7.28"
if (JavaVersion.current().isJava8Compatible()) { if (JavaVersion.current().isJava8Compatible()) {
tasks.withType(Javadoc) { tasks.withType(Javadoc) {
@@ -28,12 +28,12 @@ allprojects {
} }
} }
static def androidCompileSdk() { return 28 } static def androidCompileSdk() { return 29 }
// 14 for Support Library, 16 for sqlite-android // 14 for Support Library, 16 for sqlite-android
static def androidMinSdk() { return 16 } static def androidMinSdk() { return 16 }
static def androidTargetSdk() { return 22 } static def androidTargetSdk() { return 29 }
static def versionCode() { return 1 } static def versionCode() { return 1 }
@@ -42,14 +42,13 @@ def versionName() { return version }
subprojects { subprojects {
repositories { repositories {
google() google()
maven { url 'https://repo.boundlessgeo.com/main/' }
jcenter() jcenter()
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
maven { url 'https://jitpack.io' } maven { url 'https://jitpack.io' }
} }
tasks.withType(JavaCompile) { tasks.withType(JavaCompile) {
sourceCompatibility = JavaVersion.VERSION_1_7 sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7 targetCompatibility = JavaVersion.VERSION_1_7
options.encoding = 'UTF-8'
} }
} }

View File

@@ -6,15 +6,20 @@
| [Cachebox 3.0](https://github.com/Longri/cachebox3.0) | Geocaching application | Apache 2.0/Free | Android, Desktop, iOS | Open | | [Cachebox 3.0](https://github.com/Longri/cachebox3.0) | Geocaching application | Apache 2.0/Free | Android, Desktop, iOS | Open |
| [Cruiser](http://wiki.openstreetmap.org/wiki/Cruiser) | Map and navigation application | Proprietary/Free | Android, Desktop | Closed | | [Cruiser](http://wiki.openstreetmap.org/wiki/Cruiser) | Map and navigation application | Proprietary/Free | Android, Desktop | Closed |
| [GCDroid](https://play.google.com/store/apps/details?id=com.gcdroid) | Geocaching App | Proprietary/Free and Commercial | Android | Closed | | [GCDroid](https://play.google.com/store/apps/details?id=com.gcdroid) | Geocaching App | Proprietary/Free and Commercial | Android | Closed |
| [GPSLogger II](https://play.google.com/store/apps/details?id=com.emacberry.gpslogger) | Map and navigation, Fitness & Cycling application | Proprietary/Free | Android | Closed |
| [HabanaTrans](https://play.google.com/store/apps/details?id=cu.pabloapk.habanatrans&hl=es_419) | Public transport, map offline, gps, routing | Proprietary/Free | Android | Closed |
| [Hunt Cyprus](https://play.google.com/store/apps/developer?id=Talent+S.A.) | Map and navigation application for hunters | Proprietary/Free and Commercial | Android | Closed | | [Hunt Cyprus](https://play.google.com/store/apps/developer?id=Talent+S.A.) | Map and navigation application for hunters | Proprietary/Free and Commercial | Android | Closed |
| [Kurviger](https://kurviger.de/en) | Route planner specialized on motorcyclists | Proprietary/Free and Commercial | Android | Closed | | [Kurviger](https://kurviger.de/en) | Route planner specialized on motorcyclists | Proprietary/Free and Commercial | Android | Closed |
| [MapTrek](http://maptrek.mobi) | Application for outdoor activities | GPL3/Free and Commercial | Android | Open | | [MapTrek](http://maptrek.mobi) | Application for outdoor activities | GPL3/Free and Commercial | Android | Open |
| [MyRunningApp](https://play.google.com/store/apps/details?id=it.nimarsolutions.rungpstracker) | Fitness app | Proprietary/Free | Android | Closed |
| [MyTourbook](http://mytourbook.sourceforge.net/mytourbook/) | Visualize and analyze tours | GPL2/Free | Desktop | Open | | [MyTourbook](http://mytourbook.sourceforge.net/mytourbook/) | Visualize and analyze tours | GPL2/Free | Desktop | Open |
| [Navi Cyprus](https://play.google.com/store/apps/developer?id=Talent+S.A.) | Map and navigation application | Proprietary/Free and Commercial | Android | Closed | | [Navi Cyprus](https://play.google.com/store/apps/developer?id=Talent+S.A.) | Map and navigation application | Proprietary/Free and Commercial | Android | Closed |
| [Pocket Maps](https://github.com/junjunguo/PocketMaps) | Offline maps, routing & tracking functions | MIT/Free | Android | Open |
| Tokyo Ogiqvo | Visualize App | Commercial | [Android](https://play.google.com/store/apps/details?id=com.ogiqvo.view.tokyo&hl=ja), [iOS](https://itunes.apple.com/us/app/tokyo-ogiqvo/id1097100677?mt=8) | Closed | | Tokyo Ogiqvo | Visualize App | Commercial | [Android](https://play.google.com/store/apps/details?id=com.ogiqvo.view.tokyo&hl=ja), [iOS](https://itunes.apple.com/us/app/tokyo-ogiqvo/id1097100677?mt=8) | Closed |
| [topoGuide](http://www.topoguide.gr/index-en.php) | Digital guides for the outdoor | Proprietary/Free and Commercial | Android | Closed | | [topoGuide](http://www.topoguide.gr/index-en.php) | Digital guides for the outdoor | Proprietary/Free and Commercial | Android | Closed |
| [Ubitrek](https://play.google.com/store/apps/details?id=ubicarta.ubitrek) | Hiking with IGN maps | Proprietary/Free | Android | Closed | | [Ubitrek](https://play.google.com/store/apps/details?id=ubicarta.ubitrek) | Hiking with IGN maps | Proprietary/Free | Android | Closed |
| [VTM with Eclipse RCP](https://github.com/wolfgang-ch/vtm-with-rcp) | VTM with an Eclipse RCP application | GPL3/Free | Desktop | Open | | [VTM with Eclipse RCP](https://github.com/wolfgang-ch/vtm-with-rcp) | VTM with an Eclipse RCP application | GPL3/Free | Desktop | Open |
| [Walkaholic](https://play.google.com/store/apps/details?id=com.walkaholic.hikeapp) | Hiking app with official routes and online/offline maps | Proprietary/Free (in-app purchases) | Android | Closed |
| [XCTrack](http://xctrack.org/) | Flight computer for paraglider pilots | Proprietary/Free | Android | Closed | | [XCTrack](http://xctrack.org/) | Flight computer for paraglider pilots | Proprietary/Free | Android | Closed |
You know an application that is missing here? Please inform us by sending a message via our public [mailing list](https://groups.google.com/group/mapsforge-dev). You know an application that is missing here? Please inform us by sending a message via our public [forum](https://groups.google.com/group/mapsforge-dev).

View File

@@ -2,14 +2,12 @@
As an open source project, we welcome new contributors and appreciate your help. As an open source project, we welcome new contributors and appreciate your help.
Before you start working on an unresolved issue or try to implement a new feature, please contact us via our public [mailing list](https://groups.google.com/group/mapsforge-dev). Before you start working on an unresolved issue or try to implement a new feature, please contact us via our public [forum](https://groups.google.com/group/mapsforge-dev). We will then discuss the best way to realize your proposal and figure out how we can help you to get started quickly.
You may also create a new issue on [Github](https://github.com/mapsforge/vtm/issues) or comment on an existing one to describe your ideas. We will then discuss the best way to realize your proposal and figure out how we can help you to get started quickly.
If you are only requesting a small change in the code, you may attach a patch file to the corresponding issue, but it is best to create a pull request on Github. Make sure that your patch is derived from the latest version in our **master** repository, otherwise we might be unable to apply it. Important is to keep pull requests simple with one feature in each. Please follow our code and style conventions. If you are only requesting a small change in the code, you may attach a patch file to the corresponding issue, but it is best to create a pull request on Github. Make sure that your patch is derived from the latest version in our **master** repository, otherwise we might be unable to apply it. Important is to keep pull requests simple with one feature in each. Please follow our code and style conventions.
Also please keep the pull request commits squashed, in order to avoid the clutter in repository and have only the finally changed files together. One way is described [here](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html). Also please keep the pull request commits squashed, in order to avoid the clutter in repository and have only the finally changed files together. One way is described [here](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html).
Regarding syntax make sure your IDE uses for indentation 4 spaces (no tabs) and follow the conventions you already see in the code. Regarding code make sure your IDE uses UTF-8 encoding, for indentation 4 spaces (no tabs) and follow the conventions you already see in the code.
Please note that the VTM project is licenced under the [GNU LGPL3 licence](http://www.gnu.org/licenses/lgpl.html). Thus, all your contributions are going to be published under this license. Please note that the VTM project is licenced under the [GNU LGPL3 licence](http://www.gnu.org/licenses/lgpl.html). Thus, all your contributions are going to be published under this license.

View File

@@ -1,5 +1,80 @@
# Changelog # Changelog
## Version 0.14.0 (2020-08-25)
- Render themes: symbol styles [#769](https://github.com/mapsforge/vtm/pull/769)
- More mutable itemized layer [#771](https://github.com/mapsforge/vtm/pull/771)
- Marker renderer sort option
- `Parameters.MARKER_SORT`
- Update vtm-jeo module [#770](https://github.com/mapsforge/vtm/pull/770)
- Many other minor improvements and bug fixes
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.14.0)
## Version 0.13.0 (2020-01-12)
- Render themes: symbols on lines with billboard / rotation [#743](https://github.com/mapsforge/vtm/pull/743)
- Location texture renderer: rewrite and optimize [#750](https://github.com/mapsforge/vtm/pull/750)
- Fix stroke cap line ending [#758](https://github.com/mapsforge/vtm/pull/758)
- Mapsforge: fix ways precision loss [#752](https://github.com/mapsforge/vtm/pull/752)
- Mapsforge: additional simplification [#757](https://github.com/mapsforge/vtm/pull/757)
- `Parameters.SIMPLIFICATION_TOLERANCE`
- Android: OpenGL ES 2.0 default for performance / stability [#749](https://github.com/mapsforge/vtm/pull/749)
- `MapView.OPENGL_VERSION`
- Android: threaded system initialization
- `Parameters.THREADED_INIT`
- Many other minor improvements and bug fixes
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.13.0)
## Version 0.12.0 (2019-09-17)
- MBTiles vector tile source (Android) [#740](https://github.com/mapsforge/vtm/pull/740)
- vtm-android-mvt module
- Render themes: text background color [#737](https://github.com/mapsforge/vtm/pull/737)
- vtm-desktop-lwjgl module [#714](https://github.com/mapsforge/vtm/pull/714)
- vtm-desktop-lwjgl3 module [#717](https://github.com/mapsforge/vtm/pull/717)
- Fix marker touch events [#723](https://github.com/mapsforge/vtm/issues/723)
- Calculation of centroids for all polygons [#734](https://github.com/mapsforge/vtm/pull/734)
- `Parameters.POLY_CENTROID`
- Disable optimal placement of labels or symbols on polygons
- `Parameters.POLY_LABEL`
- Android 10 compatibility [#728](https://github.com/mapsforge/vtm/issues/728)
- libGDX 1.9.10 [#731](https://github.com/mapsforge/vtm/issues/731)
- Many other minor improvements and bug fixes
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.12.0)
## Version 0.11.1 (2019-04-12)
- MBTiles raster tile source (Android) [#708](https://github.com/mapsforge/vtm/pull/708)
- Fix Android 4.2 crash [#713](https://github.com/mapsforge/vtm/issues/713)
- Many other minor improvements and bug fixes
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.11.1)
## Version 0.11.0 (2019-03-25)
- Render themes: tag transform [#420](https://github.com/mapsforge/vtm/issues/420)
- Render themes: PNG scaling [#595](https://github.com/mapsforge/vtm/issues/595)
- Building shadows [#575](https://github.com/mapsforge/vtm/issues/575)
- Map scaling improvements [#401](https://github.com/mapsforge/vtm/issues/401)
- PathLayer(s) scaled width [#594](https://github.com/mapsforge/vtm/issues/594)
- Mapilion MVT vector tiles & Hillshading [#614](https://github.com/mapsforge/vtm/issues/614)
- Overpass tile source [#663](https://github.com/mapsforge/vtm/issues/663)
- vtm-gdx-poi3d module [#600](https://github.com/mapsforge/vtm/pull/600)
- vtm-models module [#580](https://github.com/mapsforge/vtm/issues/580)
- `ViewController` refactor [#625](https://github.com/mapsforge/vtm/pull/625)
- `getMapViewCenter`, `setMapViewCenter` with pivotX, pivotY
- `ThemeCallback.getColor` refactor [#274](https://github.com/mapsforge/vtm/issues/274)
- Enable physical fling and fling on rotation / scale
- `Parameters.ANIMATOR2`
- Enable optimal placement of labels or symbols on polygons
- `Parameters.POLY_LABEL`
- Enable placement of symbols on polygons
- `Parameters.POLY_SYMBOL`
- OpenGL ES 3.0 support [#646](https://github.com/mapsforge/vtm/issues/646)
- OpenGL ES 2.0 complete [#642](https://github.com/mapsforge/vtm/pull/642)
- libGDX 1.9.9 [#635](https://github.com/mapsforge/vtm/issues/635)
- Many other minor improvements and bug fixes
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.11.0)
## Version 0.10.0 (2018-08-28) ## Version 0.10.0 (2018-08-28)
- Map overzoom [#393](https://github.com/mapsforge/vtm/issues/393) - Map overzoom [#393](https://github.com/mapsforge/vtm/issues/393)
@@ -15,11 +90,11 @@
- Internal render themes improvements [#488](https://github.com/mapsforge/vtm/pull/488) - Internal render themes improvements [#488](https://github.com/mapsforge/vtm/pull/488)
- Map view roll [#474](https://github.com/mapsforge/vtm/pull/474) - Map view roll [#474](https://github.com/mapsforge/vtm/pull/474)
- Physical fling and fling on rotation / scale [#497](https://github.com/mapsforge/vtm/pull/497) [#499](https://github.com/mapsforge/vtm/pull/499) - Physical fling and fling on rotation / scale [#497](https://github.com/mapsforge/vtm/pull/497) [#499](https://github.com/mapsforge/vtm/pull/499)
- `Parameters.ANIMATOR2 = true;` - `Parameters.ANIMATOR2`
- Scale factor for short vertices calculation [#537](https://github.com/mapsforge/vtm/issues/537) - Scale factor for short vertices calculation [#537](https://github.com/mapsforge/vtm/issues/537)
- `Parameters.CUSTOM_COORD_SCALE = false;` - `Parameters.CUSTOM_COORD_SCALE`
- Polygon symbols default disabled [#405](https://github.com/mapsforge/vtm/issues/405) - Polygon symbols default disabled [#405](https://github.com/mapsforge/vtm/issues/405)
- `Parameters.POLY_SYMBOL = true;` - `Parameters.POLY_SYMBOL`
- Map fractional zoom [#487](https://github.com/mapsforge/vtm/issues/487) - Map fractional zoom [#487](https://github.com/mapsforge/vtm/issues/487)
- Render theme fallback internal resources [#477](https://github.com/mapsforge/vtm/issues/477) - Render theme fallback internal resources [#477](https://github.com/mapsforge/vtm/issues/477)
- Fix layers synchronization [#507](https://github.com/mapsforge/vtm/issues/507) - Fix layers synchronization [#507](https://github.com/mapsforge/vtm/issues/507)
@@ -68,7 +143,7 @@
- BuildingLayer expects height tags in meters - BuildingLayer expects height tags in meters
- Polygon symbol positioning [#405](https://github.com/mapsforge/vtm/issues/405) - Polygon symbol positioning [#405](https://github.com/mapsforge/vtm/issues/405)
- PolyLabel default disabled [#402](https://github.com/mapsforge/vtm/issues/402) - PolyLabel default disabled [#402](https://github.com/mapsforge/vtm/issues/402)
- `Parameters.POLY_LABEL = true;` - `Parameters.POLY_LABEL`
- vtm-theme-comparator module [#387](https://github.com/mapsforge/vtm/issues/387) - vtm-theme-comparator module [#387](https://github.com/mapsforge/vtm/issues/387)
- Feature parameters [#403](https://github.com/mapsforge/vtm/issues/403) - Feature parameters [#403](https://github.com/mapsforge/vtm/issues/403)
- vtm-android-gdx module enhancements [#435](https://github.com/mapsforge/vtm/issues/435) - vtm-android-gdx module enhancements [#435](https://github.com/mapsforge/vtm/issues/435)
@@ -81,13 +156,13 @@
## Version 0.8.0 (2017-07-19) ## Version 0.8.0 (2017-07-19)
- Real time (SVG) texture atlas [#63](https://github.com/mapsforge/vtm/issues/63) - Real time (SVG) texture atlas [#63](https://github.com/mapsforge/vtm/issues/63)
- `Parameters.TEXTURE_ATLAS = true;` - `Parameters.TEXTURE_ATLAS`
- Marker clustering [#312](https://github.com/mapsforge/vtm/issues/312) - Marker clustering [#312](https://github.com/mapsforge/vtm/issues/312)
- Osmagray theme [#300](https://github.com/mapsforge/vtm/issues/300) - Osmagray theme [#300](https://github.com/mapsforge/vtm/issues/300)
- Symbol rotation [#294](https://github.com/mapsforge/vtm/issues/294) - Symbol rotation [#294](https://github.com/mapsforge/vtm/issues/294)
- Location renderer improvements [#317](https://github.com/mapsforge/vtm/issues/317) - Location renderer improvements [#317](https://github.com/mapsforge/vtm/issues/317)
- POT textures [#334](https://github.com/mapsforge/vtm/issues/334) - POT textures [#334](https://github.com/mapsforge/vtm/issues/334)
- `Parameters.POT_TEXTURES = true;` - `Parameters.POT_TEXTURES`
- OkHttp external cache [#135](https://github.com/mapsforge/vtm/issues/135) - OkHttp external cache [#135](https://github.com/mapsforge/vtm/issues/135)
- Texture atlas improvements [#301](https://github.com/mapsforge/vtm/pull/301) [#304](https://github.com/mapsforge/vtm/pull/304) - Texture atlas improvements [#301](https://github.com/mapsforge/vtm/pull/301) [#304](https://github.com/mapsforge/vtm/pull/304)
- vtm-json module [#367](https://github.com/mapsforge/vtm/issues/367) - vtm-json module [#367](https://github.com/mapsforge/vtm/issues/367)
@@ -108,7 +183,7 @@
- Mapsforge multiple map files [#208](https://github.com/mapsforge/vtm/issues/208) - Mapsforge multiple map files [#208](https://github.com/mapsforge/vtm/issues/208)
- New gestures implementation [#253](https://github.com/mapsforge/vtm/issues/253) - New gestures implementation [#253](https://github.com/mapsforge/vtm/issues/253)
- `Parameters.MAP_EVENT_LAYER2 = true;` - `Parameters.MAP_EVENT_LAYER2`
- Polygon label position enhancements [#80](https://github.com/mapsforge/vtm/issues/80) - Polygon label position enhancements [#80](https://github.com/mapsforge/vtm/issues/80)
- vtm-web modules update [#51](https://github.com/mapsforge/vtm/issues/51) - vtm-web modules update [#51](https://github.com/mapsforge/vtm/issues/51)
- Mapzen MVT vector tiles [#57](https://github.com/mapsforge/vtm/issues/57) - Mapzen MVT vector tiles [#57](https://github.com/mapsforge/vtm/issues/57)
@@ -140,11 +215,12 @@
- vtm-ios module update [#29](https://github.com/mapsforge/vtm/issues/29) - vtm-ios module update [#29](https://github.com/mapsforge/vtm/issues/29)
- Native libraries for all platforms [#14](https://github.com/mapsforge/vtm/issues/14) - Native libraries for all platforms [#14](https://github.com/mapsforge/vtm/issues/14)
- Line stipple and texture rendering [#105](https://github.com/mapsforge/vtm/issues/105) - Line stipple and texture rendering [#105](https://github.com/mapsforge/vtm/issues/105)
- Layer groups [#99](https://github.com/mapsforge/vtm/issues/99) [#103](https://github.com/mapsforge/vtm/issues/103) - Group layer implementation [#99](https://github.com/mapsforge/vtm/issues/99)
- Layer groups implementation [#103](https://github.com/mapsforge/vtm/issues/103)
- Location renderer and layer [#171](https://github.com/mapsforge/vtm/issues/171) - Location renderer and layer [#171](https://github.com/mapsforge/vtm/issues/171)
- Map scale bar [#84](https://github.com/mapsforge/vtm/issues/84) - Map scale bar [#84](https://github.com/mapsforge/vtm/issues/84)
- Tile size based on scale factor [#183](https://github.com/mapsforge/vtm/issues/183) - Tile size based on scale factor [#183](https://github.com/mapsforge/vtm/issues/183)
- `Parameters.CUSTOM_TILE_SIZE = false;` - `Parameters.CUSTOM_TILE_SIZE`
- libGDX layer gestures [#151](https://github.com/mapsforge/vtm/issues/151) - libGDX layer gestures [#151](https://github.com/mapsforge/vtm/issues/151)
- Render theme area tessellation option [#37](https://github.com/mapsforge/vtm/issues/37) - Render theme area tessellation option [#37](https://github.com/mapsforge/vtm/issues/37)
- Render theme resources optional location prefixes [#66](https://github.com/mapsforge/vtm/issues/66) - Render theme resources optional location prefixes [#66](https://github.com/mapsforge/vtm/issues/66)

1
docs/ISSUE_TEMPLATE.md Normal file
View File

@@ -0,0 +1 @@
For questions or discussion please use the [forum](https://groups.google.com/group/mapsforge-dev).

View File

@@ -10,7 +10,7 @@ Current version is [![Maven Central](https://img.shields.io/maven-central/v/org.
```groovy ```groovy
implementation 'org.mapsforge:vtm:[CURRENT-VERSION]' implementation 'org.mapsforge:vtm:[CURRENT-VERSION]'
implementation 'org.mapsforge:vtm-themes:[CURRENT-VERSION]' implementation 'org.mapsforge:vtm-themes:[CURRENT-VERSION]'
implementation 'org.slf4j:slf4j-api:1.7.25' implementation 'org.slf4j:slf4j-api:1.7.28'
``` ```
### Android ### Android
@@ -20,7 +20,7 @@ implementation 'org.mapsforge:vtm-android:[CURRENT-VERSION]:natives-armeabi-v7a'
implementation 'org.mapsforge:vtm-android:[CURRENT-VERSION]:natives-arm64-v8a' implementation 'org.mapsforge:vtm-android:[CURRENT-VERSION]:natives-arm64-v8a'
implementation 'org.mapsforge:vtm-android:[CURRENT-VERSION]:natives-x86' implementation 'org.mapsforge:vtm-android:[CURRENT-VERSION]:natives-x86'
implementation 'org.mapsforge:vtm-android:[CURRENT-VERSION]:natives-x86_64' implementation 'org.mapsforge:vtm-android:[CURRENT-VERSION]:natives-x86_64'
implementation 'com.caverock:androidsvg:1.3' implementation 'com.caverock:androidsvg:1.4'
``` ```
### Android (libGDX) ### Android (libGDX)
@@ -36,9 +36,9 @@ implementation 'org.mapsforge:vtm-android-gdx:[CURRENT-VERSION]:natives-armeabi-
implementation 'org.mapsforge:vtm-android-gdx:[CURRENT-VERSION]:natives-arm64-v8a' implementation 'org.mapsforge:vtm-android-gdx:[CURRENT-VERSION]:natives-arm64-v8a'
implementation 'org.mapsforge:vtm-android-gdx:[CURRENT-VERSION]:natives-x86' implementation 'org.mapsforge:vtm-android-gdx:[CURRENT-VERSION]:natives-x86'
implementation 'org.mapsforge:vtm-android-gdx:[CURRENT-VERSION]:natives-x86_64' implementation 'org.mapsforge:vtm-android-gdx:[CURRENT-VERSION]:natives-x86_64'
implementation 'com.badlogicgames.gdx:gdx:1.9.8' implementation 'com.badlogicgames.gdx:gdx:1.9.10'
implementation 'com.badlogicgames.gdx:gdx-backend-android:1.9.8' implementation 'com.badlogicgames.gdx:gdx-backend-android:1.9.10'
implementation 'com.caverock:androidsvg:1.3' implementation 'com.caverock:androidsvg:1.4'
``` ```
### iOS ### iOS
@@ -56,74 +56,88 @@ implementation 'org.mapsforge:vtm-desktop:[CURRENT-VERSION]'
implementation 'org.mapsforge:vtm-desktop:[CURRENT-VERSION]:natives-linux' implementation 'org.mapsforge:vtm-desktop:[CURRENT-VERSION]:natives-linux'
implementation 'org.mapsforge:vtm-desktop:[CURRENT-VERSION]:natives-osx' implementation 'org.mapsforge:vtm-desktop:[CURRENT-VERSION]:natives-osx'
implementation 'org.mapsforge:vtm-desktop:[CURRENT-VERSION]:natives-windows' implementation 'org.mapsforge:vtm-desktop:[CURRENT-VERSION]:natives-windows'
implementation 'com.badlogicgames.gdx:gdx:1.9.8' implementation 'org.mapsforge:vtm-desktop-lwjgl:[CURRENT-VERSION]'
implementation 'com.badlogicgames.gdx:gdx-platform:1.9.8:natives-desktop' implementation 'com.badlogicgames.gdx:gdx:1.9.10'
implementation 'com.badlogicgames.gdx:gdx-backend-lwjgl:1.9.8' implementation 'com.badlogicgames.gdx:gdx-platform:1.9.10:natives-desktop'
implementation 'com.github.blackears:svgSalamander:v1.1.1'
```
### Desktop (LWJGL)
```groovy
implementation 'com.badlogicgames.gdx:gdx-backend-lwjgl:1.9.10'
implementation 'org.lwjgl.lwjgl:lwjgl:2.9.3' implementation 'org.lwjgl.lwjgl:lwjgl:2.9.3'
implementation 'org.lwjgl.lwjgl:lwjgl-platform:2.9.3:natives-linux' implementation 'org.lwjgl.lwjgl:lwjgl-platform:2.9.3:natives-linux'
implementation 'org.lwjgl.lwjgl:lwjgl-platform:2.9.3:natives-osx' implementation 'org.lwjgl.lwjgl:lwjgl-platform:2.9.3:natives-osx'
implementation 'org.lwjgl.lwjgl:lwjgl-platform:2.9.3:natives-windows' implementation 'org.lwjgl.lwjgl:lwjgl-platform:2.9.3:natives-windows'
implementation 'com.github.blackears:svgSalamander:v1.1.1' ```
### Desktop (LWJGL 3)
```groovy
implementation 'com.badlogicgames.gdx:gdx-backend-lwjgl3:1.9.10'
implementation 'org.lwjgl:lwjgl:3.2.3'
implementation 'org.lwjgl:lwjgl:3.2.3:natives-linux'
implementation 'org.lwjgl:lwjgl:3.2.3:natives-macos'
implementation 'org.lwjgl:lwjgl:3.2.3:natives-windows'
``` ```
### JTS geometries ### JTS geometries
```groovy ```groovy
implementation 'org.mapsforge:vtm-jts:[CURRENT-VERSION]' implementation 'org.mapsforge:vtm-jts:[CURRENT-VERSION]'
implementation 'org.locationtech.jts:jts-core:1.15.0' // https://github.com/locationtech/jts/issues/145
implementation 'org.locationtech.jts:jts-core:1.15.1'
``` ```
### Online tiles ### Online tiles
```groovy ```groovy
implementation 'org.mapsforge:vtm-http:[CURRENT-VERSION]' implementation 'org.mapsforge:vtm-http:[CURRENT-VERSION]'
implementation 'com.squareup.okhttp3:okhttp:3.8.0' // https://github.com/square/okhttp/issues/4481
implementation 'com.squareup.okio:okio:1.13.0' implementation 'com.squareup.okhttp3:okhttp:3.12.5'
implementation 'com.squareup.okio:okio:1.15.0'
```
### MBTiles (Android)
```groovy
implementation 'org.mapsforge:vtm-android-mvt:[CURRENT-VERSION]'
implementation 'org.mapsforge:vtm-mvt:[CURRENT-VERSION]'
implementation 'com.google.protobuf:protobuf-java:3.6.1'
implementation 'com.wdtinc:mapbox-vector-tile:3.1.0'
// https://github.com/locationtech/jts/issues/145
implementation 'org.locationtech.jts:jts-core:1.15.1'
``` ```
### Mapbox vector tiles ### Mapbox vector tiles
```groovy ```groovy
implementation 'org.mapsforge:vtm-mvt:[CURRENT-VERSION]' implementation 'org.mapsforge:vtm-mvt:[CURRENT-VERSION]'
implementation 'com.google.protobuf:protobuf-java:3.5.1' implementation 'com.google.protobuf:protobuf-java:3.6.1'
implementation 'com.wdtinc:mapbox-vector-tile:3.0.0' implementation 'com.wdtinc:mapbox-vector-tile:3.1.0'
implementation 'org.locationtech.jts:jts-core:1.15.0' // https://github.com/locationtech/jts/issues/145
implementation 'org.locationtech.jts:jts-core:1.15.1'
``` ```
### GeoJSON vector tiles ### GeoJSON vector tiles
```groovy ```groovy
implementation 'org.mapsforge:vtm-json:[CURRENT-VERSION]' implementation 'org.mapsforge:vtm-json:[CURRENT-VERSION]'
implementation 'com.fasterxml.jackson.core:jackson-annotations:2.8.4' implementation 'com.fasterxml.jackson.core:jackson-annotations:2.9.9'
implementation 'com.fasterxml.jackson.core:jackson-core:2.8.4' implementation 'com.fasterxml.jackson.core:jackson-core:2.9.9'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.8.4' implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9'
``` ```
### jeo (indoor maps) ### jeo (indoor maps)
Add _first_ the Boundless repository:
```groovy ```groovy
repositories { repositories {
maven { url 'https://repo.boundlessgeo.com/main/' } maven { url 'https://jitpack.io' }
jcenter()
...
} }
```
```groovy
implementation 'org.mapsforge:vtm-jeo:[CURRENT-VERSION]' implementation 'org.mapsforge:vtm-jeo:[CURRENT-VERSION]'
implementation('org.jeo:jeo:0-SNAPSHOT') { implementation('com.github.jeo.jeo:jeo-carto:master-SNAPSHOT') {
exclude group: 'org.slf4j', module: 'slf4j-jdk14' exclude group: 'org.slf4j', module: 'slf4j-jdk14'
} }
implementation('org.jeo:jeo-carto:0-SNAPSHOT') {
exclude group: 'org.slf4j', module: 'slf4j-jdk14'
}
implementation('org.jeo:jeo-render:0-SNAPSHOT') {
exclude group: 'org.slf4j', module: 'slf4j-jdk14'
}
implementation 'org.osgeo:proj4j:0.1.0:jeo'
implementation 'com.metaweb:lessen:1.0'
implementation 'com.vividsolutions:jts:1.13'
``` ```
## Snapshots ## Snapshots

View File

@@ -1,11 +1,12 @@
# Mapsforge map providers (in lexical order) # Mapsforge map providers (in lexical order)
- [AndroidMaps](http://www.androidmaps.co.uk/) - [AndroidMaps](https://www.androidmaps.co.uk/)
- [Freizeitkarte](http://www.freizeitkarte-osm.de/android/en/index.html) - [BBBike](https://extract.bbbike.org/?format=mapsforge-osm.zip)
- [Kurviger](https://offline-maps.kurviger.de/) - [Freizeitkarte](https://www.freizeitkarte-osm.de/android/en/index.html)
- [Locusvectormaps](http://www.locusvectormaps.com) - [Kurviger](https://download.kurviger.de/)
- [Mapsforge](http://download.mapsforge.org/) - [Mapsforge](https://download.mapsforge.org/)
- [OpenAndroMaps](http://www.openandromaps.org/en/) - [OpenAndroMaps](https://www.openandromaps.org/en/)
- [OpenMaps](http://openmaps.eu/) - [OpenMaps](https://openmaps.eu/)
- [vector.city](https://vector.city/)
You know a Mapsforge map provider that is missing here? Please inform us by sending a message via our public [mailing list](https://groups.google.com/group/mapsforge-dev). You know a Mapsforge map provider that is missing here? Please inform us by sending a message via our public [forum](https://groups.google.com/group/mapsforge-dev).

View File

@@ -2,7 +2,7 @@
**This article describes how to use XML-based render-themes to style maps.** **This article describes how to use XML-based render-themes to style maps.**
If you have any questions or problems, don't hesitate to ask our public [mapsforge-dev](https://groups.google.com/group/mapsforge-dev) mailing list for help. You can also report bugs and improvement requests via our [issue tracker](https://github.com/mapsforge/vtm/issues). If you have any questions or problems, don't hesitate to ask our public [forum](https://groups.google.com/group/mapsforge-dev) for help.
## Introduction ## Introduction
@@ -14,13 +14,13 @@ It is always recommended to study the [default](https://github.com/mapsforge/vtm
## Rules ## Rules
A rule element `<m/>` has several attributes to specify which map elements the rule matches. Non of them is required. A rule element `<m/>` (_match_) has several attributes to specify which map elements the rule matches. Non of them is required.
|**Attribute**|**Valid values**|**Description**|**Default**| |**Attribute**|**Valid values**|**Description**|**Default**|
|-------------|----------------|---------------|------------| |-------------|----------------|---------------|------------|
|e|<ul><li>node</li><li>way</li><li>any</li></ul>|Defines which map element type will be matched.|*any*| |e|<ul><li>node</li><li>way</li><li>any</li></ul>|Defines which map element type will be matched.|*any*|
|k|[string](http://www.w3.org/TR/xmlschema-2/#string)|The key of the OpenStreetMap tag. <ul><li>A vertical bar "`\|`" can be used to specify multiple keys.</li>|any key| |k|[string](http://www.w3.org/TR/xmlschema-2/#string)|The key of the tile source tag. <ul><li>A vertical bar "`\|`" can be used to specify multiple keys.</li>|any key|
|v|[string](http://www.w3.org/TR/xmlschema-2/#string)|The value of the OpenStreetMap tag. <ul><li>A vertical bar "`\|`" can be used to specify multiple values.</li><li>A minus sign "`-`" excludes the other values after "`\|`". It never works alone.</li><li>A tilde "`~`" matches if the map element does not have a tag with the specified key.</li>|any value| |v|[string](http://www.w3.org/TR/xmlschema-2/#string)|The value of the tile source tag. <ul><li>A vertical bar "`\|`" can be used to specify multiple values.</li><li>A minus sign "`-`" excludes the other values after "`\|`". It never works alone.</li><li>A tilde "`~`" matches if the map element does not have a tag with the specified key.</li>|any value|
|closed|<ul><li>yes</li><li>no</li><li>any</li></ul>|Defines which ways will be matched. A way is considered as closed if its first node and its last node are equal.|*any*| |closed|<ul><li>yes</li><li>no</li><li>any</li></ul>|Defines which ways will be matched. A way is considered as closed if its first node and its last node are equal.|*any*|
|select|<ul><li>first</li><li>when-matched</li><li>any</li></ul>|<ul><li>Only add the first matching sub-rule in this rule section (the others are ignored)</li><li>Select all matches of the enclosing rule section</li><li>Select all (whether it was matched or not)</li></ul>|*any*| |select|<ul><li>first</li><li>when-matched</li><li>any</li></ul>|<ul><li>Only add the first matching sub-rule in this rule section (the others are ignored)</li><li>Select all matches of the enclosing rule section</li><li>Select all (whether it was matched or not)</li></ul>|*any*|
|zoom-min|[unsigned byte](http://www.w3.org/TR/xmlschema-2/#unsignedByte)|The minimum zoom level on which the rule will be matched.|*0*| |zoom-min|[unsigned byte](http://www.w3.org/TR/xmlschema-2/#unsignedByte)|The minimum zoom level on which the rule will be matched.|*0*|
@@ -109,11 +109,12 @@ There are different possibilities to simplify and accelerate map styling or chan
### Style patterns ### Style patterns
If you want to use a specific style multiple times you not have to rewrite it for each text, area, or line rule. If you want to use a specific style multiple times you not have to rewrite it for each text, line, area or symbol rule.
If you define a style set an `id` and use it with `use` in your rendering instructions: If you define a style set an `id` and use it with `use` in your rendering instructions:
- `style-text` - `style-text`
- `style-line` - `style-line`
- `style-area` - `style-area`
- `style-symbol`
This example styles all areas with the_residential_ style, which haven't the `highway` or `building` key. This example styles all areas with the_residential_ style, which haven't the `highway` or `building` key.

View File

@@ -6,3 +6,14 @@ e.g. for `vtm-playground` can change the [mainClassName](../vtm-playground/build
```groovy ```groovy
./gradlew :vtm-playground:run -Pargs=/path/to/map ./gradlew :vtm-playground:run -Pargs=/path/to/map
``` ```
To create a standalone executable jar, adapt the main class in [build gradle](../vtm-playground/build.gradle), then run:
```groovy
./gradlew :vtm-playground:fatJar
```
The jar file can be found in `build/libs` folder. Depending on the main class, pass args on execution via command line:
```
java -jar vtm-playground-master-SNAPSHOT-jar-with-dependencies.jar /path/to/map
```
To change the libGDX backend can replace the dependency: `vtm-desktop-lwjgl` or `vtm-desktop-lwjgl3`.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 717 KiB

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 791 KiB

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 580 KiB

After

Width:  |  Height:  |  Size: 1.6 MiB

View File

@@ -5,3 +5,25 @@
Then go to [http://localhost:8080/vtm-web-app](http://localhost:8080/vtm-web-app) in the web browser to see the map. Then go to [http://localhost:8080/vtm-web-app](http://localhost:8080/vtm-web-app) in the web browser to see the map.
Hold right mouse button to change view direction. Hold right mouse button to change view direction.
#### Debugging GWT app
Using GWT SuperDevMode is the recommended way for development. Debugging in IDE is often not possible.
For an introduction see [GWT](http://www.gwtproject.org/articles/superdevmode.html) and [libGDX](http://www.badlogicgames.com/wordpress/?p=3073) documentations.
- Serve the website as usual with `./gradlew :vtm-web-app:farmRun` command.
- The codeserver must be executed on another shell.
```bash
export _JAVA_OPTIONS="-Xmx1024m"
./gradlew :vtm-web-app:gwtSuperDev
```
- Open the link of codeserver: `The code server is ready at http://127.0.0.1:xxxx/`
- Drag the two bookmarklets to your browser's bookmark bar.
- Visit your [web page](http://localhost:8080/vtm-web-app) and click **Dev Mode On** to start development mode.
- Press **F12** to open the developer tools of your browser. Now you can debug your code under **Sources**.

View File

@@ -6,8 +6,14 @@
# http://www.gradle.org/docs/current/userguide/build_environment.html # http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process. # Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings. # The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m org.gradle.jvmargs=-Xmx2048m
# When configured, Gradle will run in incubating parallel mode. # When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit # This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true # org.gradle.parallel=true
# AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app's APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true

Binary file not shown.

View File

@@ -1,6 +1,5 @@
#Wed Mar 28 09:56:50 EEST 2018
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip

View File

@@ -6,5 +6,4 @@ dependencies {
sourceSets { sourceSets {
main.java.srcDirs = ['src'] main.java.srcDirs = ['src']
main.resources.srcDirs = ['src']
} }

View File

@@ -150,6 +150,7 @@
<xs:attribute name="font-family" default="default" type="tns:fontFamily" use="optional" /> <xs:attribute name="font-family" default="default" type="tns:fontFamily" use="optional" />
<xs:attribute name="style" default="normal" type="tns:fontStyle" use="optional" /> <xs:attribute name="style" default="normal" type="tns:fontStyle" use="optional" />
<xs:attribute name="size" default="0" type="tns:nonNegativeFloat" use="optional" /> <xs:attribute name="size" default="0" type="tns:nonNegativeFloat" use="optional" />
<xs:attribute name="bg-fill" default="#00000000" type="tns:color" use="optional" />
<xs:attribute name="fill" default="#000000" type="tns:color" use="optional" /> <xs:attribute name="fill" default="#000000" type="tns:color" use="optional" />
<xs:attribute name="stroke" default="#000000" type="tns:color" use="optional" /> <xs:attribute name="stroke" default="#000000" type="tns:color" use="optional" />
<xs:attribute name="stroke-width" default="0" type="tns:nonNegativeFloat" use="optional" /> <xs:attribute name="stroke-width" default="0" type="tns:nonNegativeFloat" use="optional" />
@@ -219,6 +220,7 @@
<xs:attribute name="font-family" default="default" type="tns:fontFamily" use="optional" /> <xs:attribute name="font-family" default="default" type="tns:fontFamily" use="optional" />
<xs:attribute name="style" default="normal" type="tns:fontStyle" use="optional" /> <xs:attribute name="style" default="normal" type="tns:fontStyle" use="optional" />
<xs:attribute name="size" default="0" type="tns:nonNegativeFloat" use="optional" /> <xs:attribute name="size" default="0" type="tns:nonNegativeFloat" use="optional" />
<xs:attribute name="bg-fill" default="#00000000" type="tns:color" use="optional" />
<xs:attribute name="fill" default="#000000" type="tns:color" use="optional" /> <xs:attribute name="fill" default="#000000" type="tns:color" use="optional" />
<xs:attribute name="stroke" default="#000000" type="tns:color" use="optional" /> <xs:attribute name="stroke" default="#000000" type="tns:color" use="optional" />
<xs:attribute name="stroke-width" default="0" type="tns:nonNegativeFloat" use="optional" /> <xs:attribute name="stroke-width" default="0" type="tns:nonNegativeFloat" use="optional" />
@@ -231,13 +233,21 @@
<xs:complexType name="symbol"> <xs:complexType name="symbol">
<xs:attribute name="cat" type="xs:string" use="optional" /> <xs:attribute name="cat" type="xs:string" use="optional" />
<xs:attribute name="src" type="tns:src" use="required" />
<xs:attribute name="id" default="0" type="xs:string" use="optional" />
<xs:attribute name="use" default="0" type="xs:string" use="optional" />
<xs:attribute name="src" type="tns:src" use="optional" />
<xs:attribute name="symbol-width" type="xs:positiveInteger" use="optional" /> <xs:attribute name="symbol-width" type="xs:positiveInteger" use="optional" />
<xs:attribute name="symbol-height" type="xs:positiveInteger" use="optional" /> <xs:attribute name="symbol-height" type="xs:positiveInteger" use="optional" />
<xs:attribute name="symbol-percent" type="xs:positiveInteger" use="optional" /> <xs:attribute name="symbol-percent" type="xs:positiveInteger" use="optional" />
<!-- symbols on lines -->
<xs:attribute name="billboard" default="false" type="xs:boolean" use="optional" />
<xs:attribute name="repeat" default="false" type="xs:boolean" use="optional" /> <xs:attribute name="repeat" default="false" type="xs:boolean" use="optional" />
<xs:attribute name="repeat-gap" default="200" type="xs:float" use="optional" /> <xs:attribute name="repeat-gap" default="200" type="xs:float" use="optional" />
<xs:attribute name="repeat-start" default="30" type="xs:float" use="optional" /> <xs:attribute name="repeat-start" default="30" type="xs:float" use="optional" />
<xs:attribute name="rotate" default="true" type="xs:boolean" use="optional" />
</xs:complexType> </xs:complexType>
<xs:complexType name="extrusion"> <xs:complexType name="extrusion">
@@ -245,6 +255,9 @@
<xs:attribute name="line-color" type="tns:color" use="optional" /> <xs:attribute name="line-color" type="tns:color" use="optional" />
<xs:attribute name="side-color" type="tns:color" use="required" /> <xs:attribute name="side-color" type="tns:color" use="required" />
<xs:attribute name="top-color" type="tns:color" use="required" /> <xs:attribute name="top-color" type="tns:color" use="required" />
<xs:attribute name="hsv-h" default="0" type="xs:double" use="optional" />
<xs:attribute name="hsv-s" default="1" type="xs:double" use="optional" />
<xs:attribute name="hsv-v" default="1" type="xs:double" use="optional" />
<!-- 12m default --> <!-- 12m default -->
<xs:attribute name="default-height" default="12" type="xs:positiveInteger" use="optional" /> <xs:attribute name="default-height" default="12" type="xs:positiveInteger" use="optional" />
</xs:complexType> </xs:complexType>
@@ -301,15 +314,29 @@
<xs:attribute name="id" type="xs:string" use="required" /> <xs:attribute name="id" type="xs:string" use="required" />
</xs:complexType> </xs:complexType>
<!-- tag-transform element -->
<xs:complexType name="tag-transform">
<xs:attribute name="k" type="xs:string" use="required" />
<xs:attribute name="v" type="xs:string" use="optional" />
<xs:attribute name="k-lib" type="xs:string" use="required" />
<xs:attribute name="v-lib" type="xs:string" use="optional" />
</xs:complexType>
<!-- rendertheme element --> <!-- rendertheme element -->
<xs:complexType name="rendertheme"> <xs:complexType name="rendertheme">
<xs:sequence maxOccurs="1" minOccurs="0"> <xs:sequence maxOccurs="1" minOccurs="0">
<xs:element name="stylemenu" maxOccurs="1" minOccurs="0" type="tns:stylemenu" /> <xs:element name="stylemenu" maxOccurs="1" minOccurs="0" type="tns:stylemenu" />
<!-- tag definitions -->
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element name="tag-transform" type="tns:tag-transform" />
</xs:choice>
<!-- style definitions --> <!-- style definitions -->
<xs:sequence maxOccurs="256" minOccurs="0"> <xs:sequence maxOccurs="256" minOccurs="0">
<xs:choice maxOccurs="unbounded" minOccurs="0"> <xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element name="style-text" type="tns:text" /> <xs:element name="style-text" type="tns:text" />
<xs:element name="style-symbol" type="tns:symbol" />
<xs:element name="style-area" type="tns:area" /> <xs:element name="style-area" type="tns:area" />
<xs:element name="style-line" type="tns:line" /> <xs:element name="style-line" type="tns:line" />
<!-- <xs:element name="style-outline" type="tns:line" /> --> <!-- <xs:element name="style-outline" type="tns:line" /> -->

View File

@@ -3,16 +3,21 @@ include ':vtm'
include ':vtm-android' include ':vtm-android'
include ':vtm-android-example' include ':vtm-android-example'
include ':vtm-android-gdx' include ':vtm-android-gdx'
include ':vtm-android-mvt'
include ':vtm-app' include ':vtm-app'
include ':vtm-desktop' include ':vtm-desktop'
include ':vtm-desktop-lwjgl'
include ':vtm-desktop-lwjgl3'
include ':vtm-extras' include ':vtm-extras'
include ':vtm-gdx' include ':vtm-gdx'
include ':vtm-gdx-poi3d'
include ':vtm-http' include ':vtm-http'
include ':vtm-ios' include ':vtm-ios'
include ':vtm-ios-example' include ':vtm-ios-example'
include ':vtm-jeo' include ':vtm-jeo'
include ':vtm-json' include ':vtm-json'
include ':vtm-jts' include ':vtm-jts'
include ':vtm-models'
include ':vtm-mvt' include ':vtm-mvt'
include ':vtm-playground' include ':vtm-playground'
include ':vtm-tests' include ':vtm-tests'

View File

@@ -7,7 +7,9 @@
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />
<application <application
android:allowBackup="true" android:allowBackup="true"
@@ -22,18 +24,9 @@
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity
android:name=".Animator2Activity"
android:configChanges="keyboardHidden|orientation|screenSize" />
<activity
android:name=".AtlasMarkerOverlayActivity"
android:configChanges="keyboardHidden|orientation|screenSize" />
<activity <activity
android:name=".AtlasMultiTextureActivity" android:name=".AtlasMultiTextureActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
<activity
android:name=".AtlasThemeActivity"
android:configChanges="keyboardHidden|orientation|screenSize" />
<activity <activity
android:name=".BitmapTileActivity" android:name=".BitmapTileActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
@@ -47,10 +40,10 @@
android:name=".GdxActivity" android:name=".GdxActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
<activity <activity
android:name=".JeoIndoorActivity" android:name=".GdxPoi3DActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
<activity <activity
android:name=".LayerGroupActivity" android:name=".JeoIndoorActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
<activity <activity
android:name=".LineTexActivity" android:name=".LineTexActivity"
@@ -62,7 +55,7 @@
android:name=".LocationTextureActivity" android:name=".LocationTextureActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
<activity <activity
android:name=".MapEventLayer2Activity" android:name=".MapilionMvtActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
<activity <activity
android:name=".MapsforgeActivity" android:name=".MapsforgeActivity"
@@ -73,9 +66,6 @@
<activity <activity
android:name=".MapsforgeActivity$ThemeFilePicker" android:name=".MapsforgeActivity$ThemeFilePicker"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
<activity
android:name=".MapsforgePolyLabelActivity"
android:configChanges="keyboardHidden|orientation|screenSize" />
<activity <activity
android:name=".MapsforgeS3DBActivity" android:name=".MapsforgeS3DBActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
@@ -92,7 +82,10 @@
android:name=".MarkerOverlayActivity" android:name=".MarkerOverlayActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
<activity <activity
android:name=".MultiMapViewActivity" android:name=".MBTilesBitmapActivity"
android:configChanges="keyboardHidden|orientation|screenSize" />
<activity
android:name=".MBTilesMvtActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
<activity <activity
android:name=".NextzenGeojsonActivity" android:name=".NextzenGeojsonActivity"
@@ -104,7 +97,7 @@
android:name=".OpenMapTilesMvtActivity" android:name=".OpenMapTilesMvtActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
<activity <activity
android:name=".OSciMapS3DBActivity" android:name=".OverpassActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
<activity <activity
android:name=".PathOverlayActivity" android:name=".PathOverlayActivity"
@@ -115,14 +108,11 @@
<activity <activity
android:name=".PoiSearchActivity$PoiFilePicker" android:name=".PoiSearchActivity$PoiFilePicker"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
<activity
android:name=".POTTextureActivity"
android:configChanges="keyboardHidden|orientation|screenSize" />
<activity <activity
android:name=".ReverseGeocodeActivity" android:name=".ReverseGeocodeActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
<activity <activity
android:name=".RotateMarkerOverlayActivity" android:name=".ShadowActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
<activity <activity
android:name=".SimpleMapActivity" android:name=".SimpleMapActivity"

View File

@@ -1,14 +1,9 @@
apply plugin: 'com.android.application' apply plugin: 'com.android.application'
/*
configurations.all {
// Check latest snapshot on every build
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
*/
dependencies { dependencies {
implementation project(':vtm-android') implementation project(':vtm-android')
implementation project(':vtm-android-mvt')
implementation project(':vtm-extras')
implementation project(':vtm-http') implementation project(':vtm-http')
implementation project(':vtm-jeo') implementation project(':vtm-jeo')
implementation project(':vtm-json') implementation project(':vtm-json')
@@ -19,13 +14,13 @@ dependencies {
implementation project(':vtm-android-gdx') implementation project(':vtm-android-gdx')
implementation project(':vtm-gdx') implementation project(':vtm-gdx')
implementation "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion" implementation project(':vtm-gdx-poi3d')
implementation 'org.mapsforge:mapsforge-poi-android:master-SNAPSHOT' implementation 'org.mapsforge:mapsforge-poi-android:0.14.0'
implementation 'org.mapsforge:sqlite-android:master-SNAPSHOT:natives-armeabi-v7a' implementation 'org.mapsforge:sqlite-android:0.14.0:natives-armeabi-v7a'
implementation 'org.mapsforge:sqlite-android:master-SNAPSHOT:natives-arm64-v8a' implementation 'org.mapsforge:sqlite-android:0.14.0:natives-arm64-v8a'
implementation 'org.mapsforge:sqlite-android:master-SNAPSHOT:natives-x86' implementation 'org.mapsforge:sqlite-android:0.14.0:natives-x86'
implementation 'org.mapsforge:sqlite-android:master-SNAPSHOT:natives-x86_64' implementation 'org.mapsforge:sqlite-android:0.14.0:natives-x86_64'
} }
android { android {
@@ -38,8 +33,8 @@ android {
} }
defaultConfig { defaultConfig {
versionCode versionCode() versionCode project.versionCode()
versionName versionName() versionName project.versionName()
minSdkVersion androidMinSdk() minSdkVersion androidMinSdk()
targetSdkVersion androidTargetSdk() targetSdkVersion androidTargetSdk()
} }
@@ -48,7 +43,6 @@ android {
main { main {
manifest.srcFile 'AndroidManifest.xml' manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src'] java.srcDirs = ['src']
resources.srcDirs = ['src']
res.srcDirs = ['res'] res.srcDirs = ['res']
assets.srcDirs = ['assets'] assets.srcDirs = ['assets']
file("${rootDir}/vtm-android/natives").eachDir() { dir -> file("${rootDir}/vtm-android/natives").eachDir() { dir ->

View File

@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<org.oscim.android.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ToggleButton
android:id="@+id/toggleControls"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|start"
android:onClick="onToggleControls" />
<LinearLayout
android:id="@+id/controls"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#bb000000"
android:orientation="vertical"
android:padding="10dp"
android:visibility="gone">
<ListView
android:id="@+id/search_list"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/add_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/add" />
<Button
android:id="@+id/start_search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/search" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<org.oscim.android.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#cc000000"
android:orientation="horizontal">
<SeekBar
android:id="@+id/seekBarShadow"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:max="2000"
android:padding="10dp"
android:progress="400" />
<ToggleButton
android:id="@+id/toggleCurrentSun"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical|center_horizontal"
android:onClick="onToggleCurrentSun"
android:textOn="@string/now" />
</LinearLayout>
</RelativeLayout>

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<EditText
android:id="@+id/key"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="@string/search_key"
android:inputType="text"
android:maxLines="1"
android:textColor="@android:color/white" />
<EditText
android:id="@+id/value"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="@string/search_value"
android:inputType="text"
android:maxLines="1"
android:textColor="@android:color/white" />
<Button
android:id="@+id/remove"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/remove" />
</LinearLayout>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="580" width="580" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
<title>other</title>
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title>other</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<circle opacity=".8" cx="290" cy="290" r="145" fill="#fff"/>
<circle cy="290" cx="290" r="116" fill="#0092DA"/>
</svg>

After

Width:  |  Height:  |  Size: 651 B

View File

@@ -7,10 +7,6 @@
<string name="theme_tubes">Tubes</string> <string name="theme_tubes">Tubes</string>
<string name="theme_newtron">NewTron</string> <string name="theme_newtron">NewTron</string>
<string name="theme_external">External theme</string> <string name="theme_external">External theme</string>
<string name="ok">OK</string>
<string name="cancel">Cancel</string>
<string name="error">Error</string>
<string name="file_invalid">The selected file is invalid.</string>
<string name="styler_mode_line">Line</string> <string name="styler_mode_line">Line</string>
<string name="styler_mode_area">Area</string> <string name="styler_mode_area">Area</string>
<string name="styler_mode_outline">Outline</string> <string name="styler_mode_outline">Outline</string>
@@ -19,5 +15,18 @@
<string name="style_2">Hide nature</string> <string name="style_2">Hide nature</string>
<string name="menu_gridlayer">Grid</string> <string name="menu_gridlayer">Grid</string>
<string name="dialog_reverse_geocoding_title">Reverse Geocoding</string> <string name="dialog_reverse_geocoding_title">Reverse Geocoding</string>
<string name="add">Add</string>
<string name="cancel">Cancel</string>
<string name="error">Error</string>
<string name="file_invalid">The selected file is invalid.</string>
<string name="ok">OK</string>
<string name="remove">Remove</string>
<string name="search">Search</string>
<string name="search_key">\'*\' or OSM key</string>
<string name="search_value">void or value</string>
<string name="now">Now</string>
<string name="warning">Warning</string>
<string name="startup_message_mbtiles">To run this sample activity, you need an MBTiles database installed on storage.\n\nadb push %s %s</string>
<string name="exit">Exit</string>
</resources> </resources>

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright 2010, 2011, 2012 mapsforge.org * Copyright 2010, 2011, 2012 mapsforge.org
* Copyright 2016 devemux86 * Copyright 2016-2019 devemux86
* *
* This program is free software: you can redistribute it and/or modify it under the * This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software * terms of the GNU Lesser General Public License as published by the Free Software
@@ -22,11 +22,9 @@ import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor; import android.content.SharedPreferences.Editor;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment;
import android.view.View; import android.view.View;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.GridView; import android.widget.GridView;
import org.oscim.android.test.R; import org.oscim.android.test.R;
import java.io.File; import java.io.File;
@@ -60,7 +58,6 @@ public class FilePicker extends Activity implements AdapterView.OnItemClickListe
private static final String PREFERENCES_FILE = "FilePicker"; private static final String PREFERENCES_FILE = "FilePicker";
private static final String CURRENT_DIRECTORY = "currentDirectory"; private static final String CURRENT_DIRECTORY = "currentDirectory";
private static final String DEFAULT_DIRECTORY = Environment.getExternalStorageDirectory().getAbsolutePath();
private static final int DIALOG_FILE_INVALID = 0; private static final int DIALOG_FILE_INVALID = 0;
// private static final int DIALOG_FILE_SELECT = 1; // private static final int DIALOG_FILE_SELECT = 1;
@@ -122,6 +119,7 @@ public class FilePicker extends Activity implements AdapterView.OnItemClickListe
}; };
} }
private String mDefaultDirectory;
private File mDirectory; private File mDirectory;
private FilePickerIconAdapter mFilePickerIconAdapter; private FilePickerIconAdapter mFilePickerIconAdapter;
private File[] mFiles; private File[] mFiles;
@@ -164,7 +162,7 @@ public class FilePicker extends Activity implements AdapterView.OnItemClickListe
} }
// if a parent directory exists, add it at the first position // if a parent directory exists, add it at the first position
if (mDirectory.getParentFile() != null) { if (mDirectory.getParentFile() != null && mDirectory.getParentFile().canRead()) {
mFilesWithParentFolder = new File[mFiles.length + 1]; mFilesWithParentFolder = new File[mFiles.length + 1];
mFilesWithParentFolder[0] = mDirectory.getParentFile(); mFilesWithParentFolder[0] = mDirectory.getParentFile();
System.arraycopy(mFiles, 0, mFilesWithParentFolder, 1, System.arraycopy(mFiles, 0, mFilesWithParentFolder, 1,
@@ -182,6 +180,7 @@ public class FilePicker extends Activity implements AdapterView.OnItemClickListe
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file_picker); setContentView(R.layout.activity_file_picker);
mDefaultDirectory = getExternalFilesDir(null) != null ? getExternalFilesDir(null).getAbsolutePath() : "/sdcard/";
mFilePickerIconAdapter = new FilePickerIconAdapter(this); mFilePickerIconAdapter = new FilePickerIconAdapter(this);
GridView gridView = (GridView) findViewById(R.id.filePickerView); GridView gridView = (GridView) findViewById(R.id.filePickerView);
gridView.setOnItemClickListener(this); gridView.setOnItemClickListener(this);
@@ -239,10 +238,9 @@ public class FilePicker extends Activity implements AdapterView.OnItemClickListe
// restore the current directory // restore the current directory
SharedPreferences preferences = getSharedPreferences(PREFERENCES_FILE, SharedPreferences preferences = getSharedPreferences(PREFERENCES_FILE,
MODE_PRIVATE); MODE_PRIVATE);
mDirectory = new File(preferences.getString(CURRENT_DIRECTORY, mDirectory = new File(preferences.getString(CURRENT_DIRECTORY, mDefaultDirectory));
DEFAULT_DIRECTORY));
if (!mDirectory.exists() || !mDirectory.canRead()) { if (!mDirectory.exists() || !mDirectory.canRead()) {
mDirectory = new File(DEFAULT_DIRECTORY); mDirectory = new File(mDefaultDirectory);
} }
browseToCurrentDirectory(); browseToCurrentDirectory();
} }

View File

@@ -1,91 +0,0 @@
/*
* Copyright 2014 Hannes Janetzek
* Copyright 2016-2018 devemux86
* Copyright 2017 Longri
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.oscim.android.test;
import org.oscim.backend.canvas.Bitmap;
import org.oscim.core.GeoPoint;
import org.oscim.layers.marker.ItemizedLayer;
import org.oscim.layers.marker.MarkerItem;
import org.oscim.layers.marker.MarkerSymbol;
import org.oscim.layers.marker.MarkerSymbol.HotspotPlace;
import org.oscim.layers.tile.bitmap.BitmapTileLayer;
import org.oscim.renderer.atlas.TextureAtlas;
import org.oscim.renderer.atlas.TextureRegion;
import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.OkHttpEngine;
import org.oscim.tiling.source.bitmap.DefaultSources;
import org.oscim.utils.TextureAtlasUtils;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import static org.oscim.android.canvas.AndroidGraphics.drawableToBitmap;
public class AtlasMarkerOverlayActivity extends MarkerOverlayActivity {
@Override
void createLayers() {
// Map events receiver
mMap.layers().add(new MapEventsReceiver(mMap));
TileSource tileSource = DefaultSources.OPENSTREETMAP
.httpFactory(new OkHttpEngine.OkHttpFactory())
.build();
mMap.layers().add(new BitmapTileLayer(mMap, tileSource));
Bitmap bitmapPoi = drawableToBitmap(getResources().getDrawable(R.drawable.marker_poi));
Bitmap bitmapFocus = drawableToBitmap(getResources().getDrawable(R.drawable.marker_focus));
// Create Atlas from Bitmaps
java.util.Map<Object, Bitmap> inputMap = new LinkedHashMap<>();
java.util.Map<Object, TextureRegion> regionsMap = new LinkedHashMap<>();
List<TextureAtlas> atlasList = new ArrayList<>();
inputMap.put("poi", bitmapPoi);
inputMap.put("focus", bitmapFocus);
// Bitmaps will never used any more
// With iOS we must flip the Y-Axis
TextureAtlasUtils.createTextureRegions(inputMap, regionsMap, atlasList, true, false);
MarkerSymbol symbol;
if (BILLBOARDS)
symbol = new MarkerSymbol(regionsMap.get("poi"), HotspotPlace.BOTTOM_CENTER);
else
symbol = new MarkerSymbol(regionsMap.get("poi"), HotspotPlace.CENTER, false);
if (BILLBOARDS)
mFocusMarker = new MarkerSymbol(regionsMap.get("focus"), HotspotPlace.BOTTOM_CENTER);
else
mFocusMarker = new MarkerSymbol(regionsMap.get("focus"), HotspotPlace.CENTER, false);
mMarkerLayer = new ItemizedLayer<>(mMap, new ArrayList<MarkerItem>(), symbol, this);
mMap.layers().add(mMarkerLayer);
List<MarkerItem> pts = new ArrayList<>();
for (double lat = -90; lat <= 90; lat += 5) {
for (double lon = -180; lon <= 180; lon += 5)
pts.add(new MarkerItem(lat + "/" + lon, "", new GeoPoint(lat, lon)));
}
mMarkerLayer.addItems(pts);
}
}

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright 2014 Hannes Janetzek * Copyright 2014 Hannes Janetzek
* Copyright 2016-2018 devemux86 * Copyright 2016-2020 devemux86
* Copyright 2017 Longri * Copyright 2017 Longri
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
@@ -19,7 +19,6 @@
package org.oscim.android.test; package org.oscim.android.test;
import android.widget.Toast; import android.widget.Toast;
import org.oscim.backend.CanvasAdapter; import org.oscim.backend.CanvasAdapter;
import org.oscim.backend.canvas.Bitmap; import org.oscim.backend.canvas.Bitmap;
import org.oscim.backend.canvas.Canvas; import org.oscim.backend.canvas.Canvas;
@@ -27,18 +26,20 @@ import org.oscim.backend.canvas.Color;
import org.oscim.backend.canvas.Paint; import org.oscim.backend.canvas.Paint;
import org.oscim.core.GeoPoint; import org.oscim.core.GeoPoint;
import org.oscim.layers.marker.ItemizedLayer; import org.oscim.layers.marker.ItemizedLayer;
import org.oscim.layers.marker.MarkerInterface;
import org.oscim.layers.marker.MarkerItem; import org.oscim.layers.marker.MarkerItem;
import org.oscim.layers.marker.MarkerSymbol; import org.oscim.layers.marker.MarkerSymbol;
import org.oscim.layers.marker.MarkerSymbol.HotspotPlace; import org.oscim.layers.marker.MarkerSymbol.HotspotPlace;
import org.oscim.layers.tile.bitmap.BitmapTileLayer; import org.oscim.layers.tile.bitmap.BitmapTileLayer;
import org.oscim.renderer.atlas.TextureAtlas; import org.oscim.renderer.atlas.TextureAtlas;
import org.oscim.renderer.atlas.TextureRegion; import org.oscim.renderer.atlas.TextureRegion;
import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.OkHttpEngine; import org.oscim.tiling.source.OkHttpEngine;
import org.oscim.tiling.source.UrlTileSource;
import org.oscim.tiling.source.bitmap.DefaultSources; import org.oscim.tiling.source.bitmap.DefaultSources;
import org.oscim.utils.TextureAtlasUtils; import org.oscim.utils.TextureAtlasUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
@@ -49,9 +50,10 @@ public class AtlasMultiTextureActivity extends MarkerOverlayActivity {
// Map events receiver // Map events receiver
mMap.layers().add(new MapEventsReceiver(mMap)); mMap.layers().add(new MapEventsReceiver(mMap));
TileSource tileSource = DefaultSources.OPENSTREETMAP UrlTileSource tileSource = DefaultSources.OPENSTREETMAP
.httpFactory(new OkHttpEngine.OkHttpFactory()) .httpFactory(new OkHttpEngine.OkHttpFactory())
.build(); .build();
tileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-android-example"));
mMap.layers().add(new BitmapTileLayer(mMap, tileSource)); mMap.layers().add(new BitmapTileLayer(mMap, tileSource));
// Create Atlas from Bitmaps // Create Atlas from Bitmaps
@@ -65,7 +67,7 @@ public class AtlasMultiTextureActivity extends MarkerOverlayActivity {
paint.setTextSize(12 * CanvasAdapter.getScale()); paint.setTextSize(12 * CanvasAdapter.getScale());
paint.setStrokeWidth(2 * CanvasAdapter.getScale()); paint.setStrokeWidth(2 * CanvasAdapter.getScale());
paint.setColor(Color.BLACK); paint.setColor(Color.BLACK);
List<MarkerItem> pts = new ArrayList<>(); List<MarkerInterface> pts = new ArrayList<>();
for (double lat = -90; lat <= 90; lat += 10) { for (double lat = -90; lat <= 90; lat += 10) {
for (double lon = -180; lon <= 180; lon += 10) { for (double lon = -180; lon <= 180; lon += 10) {
String title = lat + "/" + lon; String title = lat + "/" + lon;
@@ -85,29 +87,32 @@ public class AtlasMultiTextureActivity extends MarkerOverlayActivity {
// With iOS we must flip the Y-Axis // With iOS we must flip the Y-Axis
TextureAtlasUtils.createTextureRegions(inputMap, regionsMap, atlasList, true, false); TextureAtlasUtils.createTextureRegions(inputMap, regionsMap, atlasList, true, false);
mMarkerLayer = new ItemizedLayer<>(mMap, new ArrayList<MarkerItem>(), (MarkerSymbol) null, this); mMarkerLayer = new ItemizedLayer(mMap, new ArrayList<MarkerInterface>(), (MarkerSymbol) null, this);
mMap.layers().add(mMarkerLayer); mMap.layers().add(mMarkerLayer);
mMarkerLayer.addItems(pts); mMarkerLayer.addItems(pts);
// set all markers // set all markers
for (MarkerItem item : pts) { for (MarkerInterface item : pts) {
MarkerSymbol markerSymbol = new MarkerSymbol(regionsMap.get(item.getTitle()), HotspotPlace.BOTTOM_CENTER); MarkerItem markerItem = (MarkerItem) item;
item.setMarker(markerSymbol); MarkerSymbol markerSymbol = new MarkerSymbol(regionsMap.get(markerItem.getTitle()), HotspotPlace.BOTTOM_CENTER);
markerItem.setMarker(markerSymbol);
} }
Toast.makeText(this, "Atlas count: " + atlasList.size(), Toast.LENGTH_SHORT).show(); Toast.makeText(this, "Atlas count: " + atlasList.size(), Toast.LENGTH_SHORT).show();
} }
@Override @Override
public boolean onItemSingleTapUp(int index, MarkerItem item) { public boolean onItemSingleTapUp(int index, MarkerInterface item) {
Toast.makeText(this, "Marker tap\n" + item.getTitle(), Toast.LENGTH_SHORT).show(); MarkerItem markerItem = (MarkerItem) item;
Toast.makeText(this, "Marker tap\n" + markerItem.getTitle(), Toast.LENGTH_SHORT).show();
return true; return true;
} }
@Override @Override
public boolean onItemLongPress(int index, MarkerItem item) { public boolean onItemLongPress(int index, MarkerInterface item) {
Toast.makeText(this, "Marker long press\n" + item.getTitle(), Toast.LENGTH_SHORT).show(); MarkerItem markerItem = (MarkerItem) item;
Toast.makeText(this, "Marker long press\n" + markerItem.getTitle(), Toast.LENGTH_SHORT).show();
return true; return true;
} }
} }

View File

@@ -1,37 +0,0 @@
/*
* Copyright 2017 Longri
* Copyright 2017-2018 devemux86
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.oscim.android.test;
import android.os.Bundle;
import org.oscim.utils.Parameters;
public class AtlasThemeActivity extends SimpleMapActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
Parameters.TEXTURE_ATLAS = true;
super.onCreate(savedInstanceState);
}
@Override
protected void onDestroy() {
super.onDestroy();
Parameters.TEXTURE_ATLAS = false;
}
}

View File

@@ -35,7 +35,7 @@ import org.slf4j.LoggerFactory;
public class BaseMapActivity extends MapActivity { public class BaseMapActivity extends MapActivity {
static final Logger log = LoggerFactory.getLogger(BaseMapActivity.class); static final Logger log = LoggerFactory.getLogger(BaseMapActivity.class);
final static boolean USE_CACHE = false; static final boolean USE_CACHE = false;
VectorTileLayer mBaseLayer; VectorTileLayer mBaseLayer;
TileSource mTileSource; TileSource mTileSource;

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright 2014 Hannes Janetzek * Copyright 2014 Hannes Janetzek
* Copyright 2017-2018 devemux86 * Copyright 2017-2020 devemux86
* *
* This program is free software: you can redistribute it and/or modify it under the * This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software * terms of the GNU Lesser General Public License as published by the Free Software
@@ -16,7 +16,6 @@
package org.oscim.android.test; package org.oscim.android.test;
import android.os.Bundle; import android.os.Bundle;
import org.oscim.android.cache.TileCache; import org.oscim.android.cache.TileCache;
import org.oscim.core.MapPosition; import org.oscim.core.MapPosition;
import org.oscim.core.MercatorProjection; import org.oscim.core.MercatorProjection;
@@ -27,11 +26,13 @@ import org.oscim.tiling.source.bitmap.DefaultSources;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.Collections;
public class BitmapTileActivity extends MapActivity { public class BitmapTileActivity extends MapActivity {
static final Logger log = LoggerFactory.getLogger(BitmapTileActivity.class); static final Logger log = LoggerFactory.getLogger(BitmapTileActivity.class);
private final static boolean USE_CACHE = false; private static final boolean USE_CACHE = false;
private final BitmapTileSource mTileSource; private final BitmapTileSource mTileSource;
protected BitmapTileLayer mBitmapLayer; protected BitmapTileLayer mBitmapLayer;
@@ -42,6 +43,7 @@ public class BitmapTileActivity extends MapActivity {
public BitmapTileActivity(BitmapTileSource tileSource) { public BitmapTileActivity(BitmapTileSource tileSource) {
super(R.layout.activity_map); super(R.layout.activity_map);
tileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-android-example"));
mTileSource = tileSource; mTileSource = tileSource;
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2016-2018 devemux86 * Copyright 2016-2020 devemux86
* Copyright 2017 nebular * Copyright 2017 nebular
* *
* This program is free software: you can redistribute it and/or modify it under the * This program is free software: you can redistribute it and/or modify it under the
@@ -15,26 +15,21 @@
*/ */
package org.oscim.android.test; package org.oscim.android.test;
import android.graphics.BitmapFactory;
import org.oscim.android.canvas.AndroidBitmap;
import org.oscim.backend.canvas.Bitmap; import org.oscim.backend.canvas.Bitmap;
import org.oscim.backend.canvas.Color; import org.oscim.backend.canvas.Color;
import org.oscim.core.GeoPoint; import org.oscim.core.GeoPoint;
import org.oscim.layers.marker.ClusterMarkerRenderer; import org.oscim.layers.marker.*;
import org.oscim.layers.marker.ItemizedLayer;
import org.oscim.layers.marker.MarkerItem;
import org.oscim.layers.marker.MarkerLayer;
import org.oscim.layers.marker.MarkerRenderer;
import org.oscim.layers.marker.MarkerRendererFactory;
import org.oscim.layers.marker.MarkerSymbol;
import org.oscim.layers.tile.bitmap.BitmapTileLayer; import org.oscim.layers.tile.bitmap.BitmapTileLayer;
import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.OkHttpEngine; import org.oscim.tiling.source.OkHttpEngine;
import org.oscim.tiling.source.UrlTileSource;
import org.oscim.tiling.source.bitmap.DefaultSources; import org.oscim.tiling.source.bitmap.DefaultSources;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import static org.oscim.android.canvas.AndroidGraphics.drawableToBitmap;
public class ClusterMarkerOverlayActivity extends MarkerOverlayActivity { public class ClusterMarkerOverlayActivity extends MarkerOverlayActivity {
private static final int COUNT = 5; private static final int COUNT = 5;
@@ -45,12 +40,13 @@ public class ClusterMarkerOverlayActivity extends MarkerOverlayActivity {
// Map events receiver // Map events receiver
mMap.layers().add(new MapEventsReceiver(mMap)); mMap.layers().add(new MapEventsReceiver(mMap));
TileSource tileSource = DefaultSources.OPENSTREETMAP UrlTileSource tileSource = DefaultSources.OPENSTREETMAP
.httpFactory(new OkHttpEngine.OkHttpFactory()) .httpFactory(new OkHttpEngine.OkHttpFactory())
.build(); .build();
tileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-android-example"));
mMap.layers().add(new BitmapTileLayer(mMap, tileSource)); mMap.layers().add(new BitmapTileLayer(mMap, tileSource));
Bitmap bitmapPoi = drawableToBitmap(getResources().getDrawable(R.drawable.marker_poi)); Bitmap bitmapPoi = new AndroidBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.marker_poi));
final MarkerSymbol symbol; final MarkerSymbol symbol;
if (BILLBOARDS) if (BILLBOARDS)
symbol = new MarkerSymbol(bitmapPoi, MarkerSymbol.HotspotPlace.BOTTOM_CENTER); symbol = new MarkerSymbol(bitmapPoi, MarkerSymbol.HotspotPlace.BOTTOM_CENTER);
@@ -69,15 +65,15 @@ public class ClusterMarkerOverlayActivity extends MarkerOverlayActivity {
}; };
} }
}; };
mMarkerLayer = new ItemizedLayer<>( mMarkerLayer = new ItemizedLayer(
mMap, mMap,
new ArrayList<MarkerItem>(), new ArrayList<MarkerInterface>(),
markerRendererFactory, markerRendererFactory,
this); this);
mMap.layers().add(mMarkerLayer); mMap.layers().add(mMarkerLayer);
// Create some markers spaced STEP degrees // Create some markers spaced STEP degrees
List<MarkerItem> pts = new ArrayList<>(); List<MarkerInterface> pts = new ArrayList<>();
mMap.setMapPosition(53.08, 8.83, 1 << 15); mMap.setMapPosition(53.08, 8.83, 1 << 15);
GeoPoint center = mMap.getMapPosition().getGeoPoint(); GeoPoint center = mMap.getMapPosition().getGeoPoint();
for (int x = -COUNT; x < COUNT; x++) { for (int x = -COUNT; x < COUNT; x++) {

View File

@@ -1,7 +1,7 @@
/* /*
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016-2018 devemux86 * Copyright 2016-2020 devemux86
* Copyright 2018 Gustl22 * Copyright 2018-2019 Gustl22
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@@ -23,16 +23,26 @@ import android.util.DisplayMetrics;
import com.badlogic.gdx.backends.android.AndroidApplication; import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration; import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
import com.badlogic.gdx.graphics.glutils.GLVersion;
import com.badlogic.gdx.utils.SharedLibraryLoader; import com.badlogic.gdx.utils.SharedLibraryLoader;
import org.oscim.android.MapPreferences; import org.oscim.android.MapPreferences;
import org.oscim.android.canvas.AndroidGraphics; import org.oscim.android.canvas.AndroidGraphics;
import org.oscim.backend.CanvasAdapter; import org.oscim.backend.CanvasAdapter;
import org.oscim.backend.DateTime;
import org.oscim.backend.DateTimeAdapter;
import org.oscim.backend.GLAdapter; import org.oscim.backend.GLAdapter;
import org.oscim.core.Tile; import org.oscim.core.Tile;
import org.oscim.gdx.AndroidGL; import org.oscim.gdx.AndroidGL;
import org.oscim.gdx.AndroidGL30;
import org.oscim.gdx.GdxAssets; import org.oscim.gdx.GdxAssets;
import org.oscim.gdx.GdxMap; import org.oscim.gdx.GdxMap;
import org.oscim.gdx.poi3d.Poi3DLayer;
import org.oscim.layers.tile.buildings.BuildingLayer;
import org.oscim.layers.tile.buildings.S3DBLayer;
import org.oscim.layers.tile.vector.VectorTileLayer;
import org.oscim.layers.tile.vector.labeling.LabelLayer;
import org.oscim.theme.VtmThemes;
import org.oscim.tiling.TileSource; import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.OkHttpEngine; import org.oscim.tiling.source.OkHttpEngine;
import org.oscim.tiling.source.oscimap4.OSciMap4TileSource; import org.oscim.tiling.source.oscimap4.OSciMap4TileSource;
@@ -40,16 +50,28 @@ import org.oscim.tiling.source.oscimap4.OSciMap4TileSource;
public class GdxActivity extends AndroidApplication { public class GdxActivity extends AndroidApplication {
MapPreferences mPrefs; MapPreferences mPrefs;
private boolean mPoi3d;
private boolean mS3db;
public GdxActivity() {
this(false, false);
}
public GdxActivity(boolean s3db, boolean poi3d) {
mS3db = s3db;
mPoi3d = poi3d;
}
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
AndroidGraphics.init(); AndroidGraphics.init();
GdxAssets.init(""); GdxAssets.init("");
GLAdapter.init(new AndroidGL()); DateTimeAdapter.init(new DateTime());
DisplayMetrics metrics = getResources().getDisplayMetrics(); DisplayMetrics metrics = getResources().getDisplayMetrics();
CanvasAdapter.dpi = (int) (metrics.scaledDensity * CanvasAdapter.DEFAULT_DPI); CanvasAdapter.dpi = (int) (metrics.density * CanvasAdapter.DEFAULT_DPI);
Tile.SIZE = Tile.calculateTileSize(); Tile.SIZE = Tile.calculateTileSize();
AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration(); AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
@@ -63,13 +85,31 @@ public class GdxActivity extends AndroidApplication {
} }
class GdxMapAndroid extends GdxMap { class GdxMapAndroid extends GdxMap {
@Override
protected void initGLAdapter(GLVersion version) {
if (version.getMajorVersion() >= 3)
GLAdapter.init(new AndroidGL30());
else
GLAdapter.init(new AndroidGL());
}
@Override @Override
public void createLayers() { public void createLayers() {
TileSource ts = OSciMap4TileSource.builder() TileSource tileSource = OSciMap4TileSource.builder()
.httpFactory(new OkHttpEngine.OkHttpFactory()) .httpFactory(new OkHttpEngine.OkHttpFactory())
.build(); .build();
initDefaultLayers(ts, false, true, true); VectorTileLayer l = mMap.setBaseMap(tileSource);
mMap.setTheme(VtmThemes.DEFAULT);
if (mS3db)
mMap.layers().add(new S3DBLayer(mMap, l));
else
mMap.layers().add(new BuildingLayer(mMap, l));
if (mPoi3d)
mMap.layers().add(new Poi3DLayer(mMap, l));
mMap.layers().add(new LabelLayer(mMap, l));
mPrefs.load(getMap()); mPrefs.load(getMap());
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2018 devemux86 * Copyright 2018 Gustl22
* *
* This program is free software: you can redistribute it and/or modify it under the * This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software * terms of the GNU Lesser General Public License as published by the Free Software
@@ -14,19 +14,9 @@
*/ */
package org.oscim.android.test; package org.oscim.android.test;
import org.oscim.utils.Parameters; public class GdxPoi3DActivity extends GdxActivity {
public class Animator2Activity extends MarkerOverlayActivity { public GdxPoi3DActivity() {
super(false, true);
public Animator2Activity() {
super();
Parameters.ANIMATOR2 = true;
}
@Override
protected void onDestroy() {
super.onDestroy();
Parameters.ANIMATOR2 = false;
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2018 devemux86 * Copyright 2018-2019 devemux86
* *
* This program is free software: you can redistribute it and/or modify it under the * This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software * terms of the GNU Lesser General Public License as published by the Free Software
@@ -16,8 +16,6 @@ package org.oscim.android.test;
import android.app.Activity; import android.app.Activity;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment;
import org.oscim.android.MapView; import org.oscim.android.MapView;
import org.oscim.backend.CanvasAdapter; import org.oscim.backend.CanvasAdapter;
import org.oscim.layers.tile.buildings.BuildingLayer; import org.oscim.layers.tile.buildings.BuildingLayer;
@@ -35,16 +33,15 @@ import java.io.File;
/** /**
* A very basic Android app example. * A very basic Android app example.
* <p> * <p>
* You'll need a map with filename germany.map from download.mapsforge.org in device storage. * You'll need a map with filename berlin.map from download.mapsforge.org in device storage:
* Can be berlin.map renamed as germany.map because of smaller size. * /sdcard/Android/data/org.oscim.android.test/files/
*/ */
public class GettingStarted extends Activity { public class GettingStarted extends Activity {
// Name of the map file in device storage // Name of the map file in device storage
private static final String MAP_FILE = "germany.map"; private static final String MAP_FILE = "berlin.map";
private MapView mapView; private MapView mapView;
private MapScaleBar mapScaleBar;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
@@ -56,7 +53,7 @@ public class GettingStarted extends Activity {
// Tile source // Tile source
MapFileTileSource tileSource = new MapFileTileSource(); MapFileTileSource tileSource = new MapFileTileSource();
String mapPath = new File(Environment.getExternalStorageDirectory(), MAP_FILE).getAbsolutePath(); String mapPath = new File(getExternalFilesDir(null), MAP_FILE).getAbsolutePath();
if (tileSource.setMapFile(mapPath)) { if (tileSource.setMapFile(mapPath)) {
// Vector layer // Vector layer
VectorTileLayer tileLayer = mapView.map().setBaseMap(tileSource); VectorTileLayer tileLayer = mapView.map().setBaseMap(tileSource);
@@ -71,7 +68,7 @@ public class GettingStarted extends Activity {
mapView.map().setTheme(VtmThemes.DEFAULT); mapView.map().setTheme(VtmThemes.DEFAULT);
// Scale bar // Scale bar
mapScaleBar = new DefaultMapScaleBar(mapView.map()); MapScaleBar mapScaleBar = new DefaultMapScaleBar(mapView.map());
MapScaleBarLayer mapScaleBarLayer = new MapScaleBarLayer(mapView.map(), mapScaleBar); MapScaleBarLayer mapScaleBarLayer = new MapScaleBarLayer(mapView.map(), mapScaleBar);
mapScaleBarLayer.getRenderer().setPosition(GLViewport.Position.BOTTOM_LEFT); mapScaleBarLayer.getRenderer().setPosition(GLViewport.Position.BOTTOM_LEFT);
mapScaleBarLayer.getRenderer().setOffset(5 * CanvasAdapter.getScale(), 0); mapScaleBarLayer.getRenderer().setOffset(5 * CanvasAdapter.getScale(), 0);
@@ -96,8 +93,6 @@ public class GettingStarted extends Activity {
@Override @Override
protected void onDestroy() { protected void onDestroy() {
if (mapScaleBar != null)
mapScaleBar.destroy();
mapView.onDestroy(); mapView.onDestroy();
super.onDestroy(); super.onDestroy();
} }

View File

@@ -22,9 +22,8 @@ import android.os.Bundle;
import android.view.View; import android.view.View;
import android.widget.Toast; import android.widget.Toast;
import android.widget.ToggleButton; import android.widget.ToggleButton;
import io.jeo.map.Style;
import org.jeo.map.Style; import io.jeo.vector.VectorDataset;
import org.jeo.vector.VectorDataset;
import org.oscim.backend.CanvasAdapter; import org.oscim.backend.CanvasAdapter;
import org.oscim.backend.canvas.Color; import org.oscim.backend.canvas.Color;
import org.oscim.layers.OSMIndoorLayer; import org.oscim.layers.OSMIndoorLayer;

View File

@@ -1,80 +0,0 @@
/*
* Copyright 2013 Hannes Janetzek
* Copyright 2016-2018 devemux86
* Copyright 2016 Andrey Novikov
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.oscim.android.test;
import android.os.Bundle;
import org.oscim.backend.CanvasAdapter;
import org.oscim.layers.tile.buildings.BuildingLayer;
import org.oscim.layers.tile.vector.labeling.LabelLayer;
import org.oscim.map.Layers;
import org.oscim.renderer.BitmapRenderer;
import org.oscim.renderer.GLViewport;
import org.oscim.scalebar.DefaultMapScaleBar;
import org.oscim.scalebar.ImperialUnitAdapter;
import org.oscim.scalebar.MapScaleBar;
import org.oscim.scalebar.MapScaleBarLayer;
import org.oscim.scalebar.MetricUnitAdapter;
import org.oscim.theme.VtmThemes;
public class LayerGroupActivity extends BaseMapActivity {
private static final int GROUP_3D_OBJECTS = 1;
private static final int GROUP_LABELS = 2;
private static final int GROUP_OVERLAYS = 3;
private DefaultMapScaleBar mapScaleBar;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Layers layers = mMap.layers();
layers.addGroup(GROUP_3D_OBJECTS);
layers.add(new BuildingLayer(mMap, mBaseLayer), GROUP_3D_OBJECTS);
layers.addGroup(GROUP_LABELS);
layers.add(new LabelLayer(mMap, mBaseLayer), GROUP_LABELS);
mapScaleBar = new DefaultMapScaleBar(mMap);
mapScaleBar.setScaleBarMode(DefaultMapScaleBar.ScaleBarMode.BOTH);
mapScaleBar.setDistanceUnitAdapter(MetricUnitAdapter.INSTANCE);
mapScaleBar.setSecondaryDistanceUnitAdapter(ImperialUnitAdapter.INSTANCE);
mapScaleBar.setScaleBarPosition(MapScaleBar.ScaleBarPosition.BOTTOM_LEFT);
MapScaleBarLayer mapScaleBarLayer = new MapScaleBarLayer(mMap, mapScaleBar);
BitmapRenderer renderer = mapScaleBarLayer.getRenderer();
renderer.setPosition(GLViewport.Position.BOTTOM_LEFT);
renderer.setOffset(5 * CanvasAdapter.getScale(), 0);
layers.addGroup(GROUP_OVERLAYS);
layers.add(mapScaleBarLayer, GROUP_OVERLAYS);
mMap.setTheme(VtmThemes.DEFAULT);
}
@Override
protected void onDestroy() {
if (mapScaleBar != null)
mapScaleBar.destroy();
super.onDestroy();
}
}

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright 2014 Hannes Janetzek * Copyright 2014 Hannes Janetzek
* Copyright 2016-2018 devemux86 * Copyright 2016-2019 devemux86
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@@ -18,7 +18,6 @@
package org.oscim.android.test; package org.oscim.android.test;
import android.os.Bundle; import android.os.Bundle;
import org.oscim.backend.CanvasAdapter; import org.oscim.backend.CanvasAdapter;
import org.oscim.backend.canvas.Color; import org.oscim.backend.canvas.Color;
import org.oscim.core.MapPosition; import org.oscim.core.MapPosition;
@@ -38,7 +37,7 @@ import java.util.List;
*/ */
public class LineTexActivity extends BitmapTileActivity { public class LineTexActivity extends BitmapTileActivity {
private static final boolean ANIMATION = false; private static final boolean ANIMATION = true;
private List<PathLayer> mPathLayers = new ArrayList<>(); private List<PathLayer> mPathLayers = new ArrayList<>();
@@ -49,7 +48,7 @@ public class LineTexActivity extends BitmapTileActivity {
TextureItem tex = null; TextureItem tex = null;
try { try {
tex = new TextureItem(CanvasAdapter.getBitmapAsset("", "patterns/pike.png")); tex = new TextureItem(CanvasAdapter.getBitmapAsset("", "patterns/pike.png"));
tex.mipmap = true; //tex.mipmap = true;
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2016-2018 devemux86 * Copyright 2016-2019 devemux86
* *
* This program is free software: you can redistribute it and/or modify it under the * This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software * terms of the GNU Lesser General Public License as published by the Free Software
@@ -14,16 +14,20 @@
*/ */
package org.oscim.android.test; package org.oscim.android.test;
import android.Manifest;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location; import android.location.Location;
import android.location.LocationListener; import android.location.LocationListener;
import android.location.LocationManager; import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import org.oscim.core.MapPosition; import org.oscim.core.MapPosition;
import org.oscim.layers.LocationLayer; import org.oscim.layers.LocationLayer;
import org.oscim.renderer.LocationCallback;
public class LocationActivity extends BitmapTileActivity implements LocationListener { public class LocationActivity extends BitmapTileActivity implements LocationListener {
private Location location;
private LocationLayer locationLayer; private LocationLayer locationLayer;
private LocationManager locationManager; private LocationManager locationManager;
private final MapPosition mapPosition = new MapPosition(); private final MapPosition mapPosition = new MapPosition();
@@ -35,27 +39,46 @@ public class LocationActivity extends BitmapTileActivity implements LocationList
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationLayer = new LocationLayer(mMap); locationLayer = new LocationLayer(mMap);
locationLayer.locationRenderer.setShader("location_1_reverse"); locationLayer.locationRenderer.setCallback(new LocationCallback() {
@Override
public boolean hasRotation() {
return location != null && location.hasBearing();
}
@Override
public float getRotation() {
return location != null && location.hasBearing() ? location.getBearing() : 0;
}
});
locationLayer.setEnabled(false); locationLayer.setEnabled(false);
mMap.layers().add(locationLayer); mMap.layers().add(locationLayer);
} }
@Override @Override
protected void onResume() { public void onRequestPermissionsResult(final int requestCode, final String[] permissions, final int[] grantResults) {
super.onResume(); if (requestCode == 0) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
enableAvailableProviders();
}
}
@Override
public void onStart() {
super.onStart();
enableAvailableProviders(); enableAvailableProviders();
} }
@Override @Override
protected void onPause() { public void onStop() {
super.onPause();
locationManager.removeUpdates(this); locationManager.removeUpdates(this);
super.onStop();
} }
@Override @Override
public void onLocationChanged(Location location) { public void onLocationChanged(Location location) {
this.location = location;
locationLayer.setEnabled(true); locationLayer.setEnabled(true);
locationLayer.setPosition(location.getLatitude(), location.getLongitude(), location.getAccuracy()); locationLayer.setPosition(location.getLatitude(), location.getLongitude(), location.getAccuracy());
@@ -78,6 +101,13 @@ public class LocationActivity extends BitmapTileActivity implements LocationList
} }
private void enableAvailableProviders() { private void enableAvailableProviders() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 0);
return;
}
}
locationManager.removeUpdates(this); locationManager.removeUpdates(this);
for (String provider : locationManager.getProviders(true)) { for (String provider : locationManager.getProviders(true)) {

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2016-2018 devemux86 * Copyright 2016-2019 devemux86
* Copyright 2018 Longri * Copyright 2018 Longri
* *
* This program is free software: you can redistribute it and/or modify it under the * This program is free software: you can redistribute it and/or modify it under the
@@ -15,26 +15,26 @@
*/ */
package org.oscim.android.test; package org.oscim.android.test;
import android.Manifest;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location; import android.location.Location;
import android.location.LocationListener; import android.location.LocationListener;
import android.location.LocationManager; import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import org.oscim.backend.CanvasAdapter; import org.oscim.backend.CanvasAdapter;
import org.oscim.backend.canvas.Bitmap; import org.oscim.backend.canvas.Bitmap;
import org.oscim.backend.canvas.Color;
import org.oscim.core.MapPosition; import org.oscim.core.MapPosition;
import org.oscim.layers.LocationTextureLayer; import org.oscim.layers.LocationTextureLayer;
import org.oscim.renderer.atlas.TextureAtlas; import org.oscim.renderer.LocationCallback;
import org.oscim.renderer.atlas.TextureRegion;
import org.oscim.renderer.bucket.TextureItem;
import org.oscim.utils.IOUtils; import org.oscim.utils.IOUtils;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
public class LocationTextureActivity extends BitmapTileActivity implements LocationListener { public class LocationTextureActivity extends BitmapTileActivity implements LocationListener {
private Location location;
private LocationTextureLayer locationLayer; private LocationTextureLayer locationLayer;
private LocationManager locationManager; private LocationManager locationManager;
private final MapPosition mapPosition = new MapPosition(); private final MapPosition mapPosition = new MapPosition();
@@ -45,56 +45,72 @@ public class LocationTextureActivity extends BitmapTileActivity implements Locat
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
// load a Bitmap/SVG from resources
InputStream is = null; InputStream is = null;
Bitmap bmp = null; Bitmap bitmapArrow = null;
try { try {
is = getResources().openRawResource(R.raw.arrow); is = getResources().openRawResource(R.raw.arrow);
float scale = CanvasAdapter.getScale(); bitmapArrow = CanvasAdapter.decodeSvgBitmap(is, (int) (48 * CanvasAdapter.getScale()), (int) (48 * CanvasAdapter.getScale()), 100);
bmp = CanvasAdapter.decodeSvgBitmap(is, (int) (60 * scale), (int) (60 * scale), 100);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} finally { } finally {
IOUtils.closeQuietly(is); IOUtils.closeQuietly(is);
} }
// create TextureRegion from Bitmap Bitmap bitmapMarker = null;
TextureRegion textureRegion = new TextureRegion(new TextureItem(bmp), new TextureAtlas.Rect(0, 0, bmp.getWidth(), bmp.getHeight())); try {
is = getResources().openRawResource(R.raw.marker);
bitmapMarker = CanvasAdapter.decodeSvgBitmap(is, (int) (48 * CanvasAdapter.getScale()), (int) (48 * CanvasAdapter.getScale()), 100);
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(is);
}
// create LocationTextureLayer with created/loaded TextureRegion locationLayer = new LocationTextureLayer(mMap);
locationLayer = new LocationTextureLayer(mMap, textureRegion); locationLayer.locationRenderer.setBitmapArrow(bitmapArrow);
locationLayer.locationRenderer.setBitmapMarker(bitmapMarker);
// set color of accuracy circle (Color.BLUE is default) locationLayer.locationRenderer.setCallback(new LocationCallback() {
locationLayer.locationRenderer.setAccuracyColor(Color.get(50, 50, 255)); @Override
public boolean hasRotation() {
// set color of indicator circle (Color.RED is default) return location != null && location.hasBearing();
locationLayer.locationRenderer.setIndicatorColor(Color.MAGENTA); }
// set billboard rendering for TextureRegion (false is default)
locationLayer.locationRenderer.setBillboard(false);
@Override
public float getRotation() {
return location != null && location.hasBearing() ? location.getBearing() : 0;
}
});
locationLayer.setEnabled(false); locationLayer.setEnabled(false);
mMap.layers().add(locationLayer); mMap.layers().add(locationLayer);
} }
@Override @Override
protected void onResume() { public void onRequestPermissionsResult(final int requestCode, final String[] permissions, final int[] grantResults) {
super.onResume(); if (requestCode == 0) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
enableAvailableProviders();
}
}
@Override
public void onStart() {
super.onStart();
enableAvailableProviders(); enableAvailableProviders();
} }
@Override @Override
protected void onPause() { public void onStop() {
super.onPause();
locationManager.removeUpdates(this); locationManager.removeUpdates(this);
super.onStop();
} }
@Override @Override
public void onLocationChanged(Location location) { public void onLocationChanged(Location location) {
this.location = location;
locationLayer.setEnabled(true); locationLayer.setEnabled(true);
locationLayer.setPosition(location.getLatitude(), location.getLongitude(), location.getBearing(), location.getAccuracy()); locationLayer.setPosition(location.getLatitude(), location.getLongitude(), location.getAccuracy());
// Follow location // Follow location
mMap.getMapPosition(mapPosition); mMap.getMapPosition(mapPosition);
@@ -115,6 +131,13 @@ public class LocationTextureActivity extends BitmapTileActivity implements Locat
} }
private void enableAvailableProviders() { private void enableAvailableProviders() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 0);
return;
}
}
locationManager.removeUpdates(this); locationManager.removeUpdates(this);
for (String provider : locationManager.getProviders(true)) { for (String provider : locationManager.getProviders(true)) {

View File

@@ -0,0 +1,71 @@
/*
* Copyright 2019 Andrea Antonello
* Copyright 2019 devemux86
* Copyright 2019 Kostas Tzounopoulos
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.oscim.android.test;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import org.oscim.android.tiling.source.mbtiles.MBTilesBitmapTileSource;
import org.oscim.android.tiling.source.mbtiles.MBTilesTileSource;
import org.oscim.core.BoundingBox;
import org.oscim.core.MapPosition;
import org.oscim.core.Tile;
import org.oscim.layers.tile.bitmap.BitmapTileLayer;
import java.io.File;
/**
* An example activity making use of raster MBTiles.
*/
public class MBTilesBitmapActivity extends BitmapTileActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
File file = new File(getExternalFilesDir(null), "raster.mbtiles");
if (!file.exists()) {
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle(R.string.warning)
.setMessage(getResources().getString(R.string.startup_message_mbtiles, file.getName(), file.getAbsolutePath()))
.setPositiveButton(R.string.exit, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
builder.show();
return;
}
MBTilesTileSource tileSource = new MBTilesBitmapTileSource(file.getAbsolutePath(), 128, null);
BitmapTileLayer bitmapLayer = new BitmapTileLayer(mMap, tileSource);
mMap.layers().add(bitmapLayer);
/* set initial position on first run */
MapPosition pos = new MapPosition();
mMap.getMapPosition(pos);
if (pos.x == 0.5 && pos.y == 0.5) {
BoundingBox bbox = tileSource.getDataSource().getBounds();
if (bbox != null) {
pos.setByBoundingBox(bbox, Tile.SIZE * 4, Tile.SIZE * 4);
mMap.setMapPosition(pos);
}
}
}
}

View File

@@ -0,0 +1,93 @@
/*
* Copyright 2019 Andrea Antonello
* Copyright 2019 devemux86
* Copyright 2019 Kostas Tzounopoulos
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.oscim.android.test;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import org.oscim.android.mvt.tiling.source.mbtiles.MBTilesMvtTileSource;
import org.oscim.android.tiling.source.mbtiles.MBTilesTileSource;
import org.oscim.android.tiling.source.mbtiles.MBTilesUnsupportedException;
import org.oscim.core.BoundingBox;
import org.oscim.core.MapPosition;
import org.oscim.core.Tile;
import org.oscim.layers.tile.buildings.BuildingLayer;
import org.oscim.layers.tile.vector.VectorTileLayer;
import org.oscim.layers.tile.vector.labeling.LabelLayer;
import org.oscim.theme.VtmThemes;
import java.io.File;
/**
* An example activity making use of vector MBTiles.
*/
public class MBTilesMvtActivity extends MapActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
File file = new File(getExternalFilesDir(null), "vector.mbtiles");
if (!file.exists()) {
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle(R.string.warning)
.setMessage(getResources().getString(R.string.startup_message_mbtiles, file.getName(), file.getAbsolutePath()))
.setPositiveButton(R.string.exit, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
builder.show();
return;
}
MBTilesTileSource tileSource;
try {
tileSource = new MBTilesMvtTileSource(file.getAbsolutePath(), "en");
} catch (MBTilesUnsupportedException e) {
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle(R.string.warning)
.setMessage(e.getMessage())
.setPositiveButton(R.string.exit, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
builder.show();
return;
}
VectorTileLayer l = mMap.setBaseMap(tileSource);
mMap.setTheme(VtmThemes.OPENMAPTILES);
mMap.layers().add(new BuildingLayer(mMap, l));
mMap.layers().add(new LabelLayer(mMap, l));
/* set initial position on first run */
MapPosition pos = new MapPosition();
mMap.getMapPosition(pos);
if (pos.x == 0.5 && pos.y == 0.5) {
BoundingBox bbox = tileSource.getDataSource().getBounds();
if (bbox != null) {
pos.setByBoundingBox(bbox, Tile.SIZE * 4, Tile.SIZE * 4);
mMap.setMapPosition(pos);
}
}
}
}

View File

@@ -38,6 +38,7 @@ public class MapActivity extends Activity {
this(R.layout.activity_map); this(R.layout.activity_map);
} }
@Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(mContentView); setContentView(mContentView);

View File

@@ -0,0 +1,102 @@
/*
* Copyright 2018-2019 devemux86
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.oscim.android.test;
import android.os.Build;
import android.os.Bundle;
import okhttp3.CipherSuite;
import okhttp3.ConnectionSpec;
import okhttp3.OkHttpClient;
import org.oscim.android.cache.TileCache;
import org.oscim.layers.tile.bitmap.BitmapTileLayer;
import org.oscim.layers.tile.buildings.BuildingLayer;
import org.oscim.layers.tile.vector.VectorTileLayer;
import org.oscim.layers.tile.vector.labeling.LabelLayer;
import org.oscim.theme.VtmThemes;
import org.oscim.tiling.source.OkHttpEngine;
import org.oscim.tiling.source.UrlTileSource;
import org.oscim.tiling.source.bitmap.DefaultSources;
import org.oscim.tiling.source.mvt.MapilionMvtTileSource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MapilionMvtActivity extends MapActivity {
// Metered API key for demonstration purposes
private static final String API_KEY = "3b3d8353-0fb8-4513-bfe0-d620b2d77c45";
private static final boolean USE_CACHE = false;
private TileCache mCache;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
OkHttpClient.Builder builder = new OkHttpClient.Builder();
// https://github.com/square/okhttp/issues/4053
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
List<CipherSuite> cipherSuites = new ArrayList<>();
List<CipherSuite> modernTlsCipherSuites = ConnectionSpec.MODERN_TLS.cipherSuites();
if (modernTlsCipherSuites != null)
cipherSuites.addAll(modernTlsCipherSuites);
cipherSuites.add(CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA);
cipherSuites.add(CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA);
ConnectionSpec legacyTls = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
.cipherSuites(cipherSuites.toArray(new CipherSuite[0]))
.build();
builder.connectionSpecs(Arrays.asList(legacyTls, ConnectionSpec.CLEARTEXT));
}
OkHttpEngine.OkHttpFactory factory = new OkHttpEngine.OkHttpFactory(builder);
UrlTileSource tileSource = MapilionMvtTileSource.builder()
.apiKey(API_KEY)
.httpFactory(factory)
//.locale("en")
.build();
if (USE_CACHE) {
// Cache the tiles into a local SQLite database
mCache = new TileCache(this, null, "tile.db");
mCache.setCacheSize(512 * (1 << 10));
tileSource.setCache(mCache);
}
VectorTileLayer l = mMap.setBaseMap(tileSource);
mMap.setTheme(VtmThemes.OPENMAPTILES);
// Hillshading
UrlTileSource shadedTileSource = DefaultSources.MAPILION_HILLSHADE_2
.apiKey(API_KEY)
.httpFactory(factory)
.build();
mMap.layers().add(new BitmapTileLayer(mMap, shadedTileSource));
mMap.layers().add(new BuildingLayer(mMap, l));
mMap.layers().add(new LabelLayer(mMap, l));
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mCache != null)
mCache.dispose();
}
}

View File

@@ -65,11 +65,9 @@ public class MapsforgeActivity extends MapActivity {
private static final Tag SEA_TAG = new Tag("natural", "sea"); private static final Tag SEA_TAG = new Tag("natural", "sea");
private TileGridLayer mGridLayer; private TileGridLayer mGridLayer;
private DefaultMapScaleBar mMapScaleBar;
private Menu mMenu; private Menu mMenu;
private boolean mS3db; private boolean mS3db;
private VectorTileLayer mTileLayer; VectorTileLayer mTileLayer;
MapFileTileSource mTileSource;
public MapsforgeActivity() { public MapsforgeActivity() {
this(false); this(false);
@@ -80,6 +78,11 @@ public class MapsforgeActivity extends MapActivity {
mS3db = s3db; mS3db = s3db;
} }
public MapsforgeActivity(boolean s3db, int contentView) {
super(contentView);
mS3db = s3db;
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@@ -88,14 +91,6 @@ public class MapsforgeActivity extends MapActivity {
SELECT_MAP_FILE); SELECT_MAP_FILE);
} }
@Override
protected void onDestroy() {
if (mMapScaleBar != null)
mMapScaleBar.destroy();
super.onDestroy();
}
public static class MapFilePicker extends FilePicker { public static class MapFilePicker extends FilePicker {
public MapFilePicker() { public MapFilePicker() {
setFileDisplayFilter(new FilterByFileExtension(".map")); setFileDisplayFilter(new FilterByFileExtension(".map"));
@@ -178,7 +173,7 @@ public class MapsforgeActivity extends MapActivity {
return; return;
} }
mTileSource = new MapFileTileSource(); MapFileTileSource mTileSource = new MapFileTileSource();
//mTileSource.setPreferredLanguage("en"); //mTileSource.setPreferredLanguage("en");
String file = intent.getStringExtra(FilePicker.SELECTED_FILE); String file = intent.getStringExtra(FilePicker.SELECTED_FILE);
if (mTileSource.setMapFile(file)) { if (mTileSource.setMapFile(file)) {
@@ -192,7 +187,7 @@ public class MapsforgeActivity extends MapActivity {
mMap.layers().add(new BuildingLayer(mMap, mTileLayer)); mMap.layers().add(new BuildingLayer(mMap, mTileLayer));
mMap.layers().add(new LabelLayer(mMap, mTileLayer)); mMap.layers().add(new LabelLayer(mMap, mTileLayer));
mMapScaleBar = new DefaultMapScaleBar(mMap); DefaultMapScaleBar mMapScaleBar = new DefaultMapScaleBar(mMap);
mMapScaleBar.setScaleBarMode(DefaultMapScaleBar.ScaleBarMode.BOTH); mMapScaleBar.setScaleBarMode(DefaultMapScaleBar.ScaleBarMode.BOTH);
mMapScaleBar.setDistanceUnitAdapter(MetricUnitAdapter.INSTANCE); mMapScaleBar.setDistanceUnitAdapter(MetricUnitAdapter.INSTANCE);
mMapScaleBar.setSecondaryDistanceUnitAdapter(ImperialUnitAdapter.INSTANCE); mMapScaleBar.setSecondaryDistanceUnitAdapter(ImperialUnitAdapter.INSTANCE);

View File

@@ -17,7 +17,6 @@ package org.oscim.android.test;
import android.os.Bundle; import android.os.Bundle;
import org.oscim.android.cache.TileCache; import org.oscim.android.cache.TileCache;
import org.oscim.layers.TileGridLayer;
import org.oscim.layers.tile.buildings.BuildingLayer; import org.oscim.layers.tile.buildings.BuildingLayer;
import org.oscim.layers.tile.vector.VectorTileLayer; import org.oscim.layers.tile.vector.VectorTileLayer;
import org.oscim.layers.tile.vector.labeling.LabelLayer; import org.oscim.layers.tile.vector.labeling.LabelLayer;
@@ -54,8 +53,6 @@ public class MapzenGeojsonActivity extends MapActivity {
mMap.layers().add(new BuildingLayer(mMap, l)); mMap.layers().add(new BuildingLayer(mMap, l));
mMap.layers().add(new LabelLayer(mMap, l)); mMap.layers().add(new LabelLayer(mMap, l));
mMap.layers().add(new TileGridLayer(mMap));
} }
@Override @Override

View File

@@ -18,7 +18,6 @@ package org.oscim.android.test;
import android.os.Bundle; import android.os.Bundle;
import org.oscim.android.cache.TileCache; import org.oscim.android.cache.TileCache;
import org.oscim.layers.TileGridLayer;
import org.oscim.layers.tile.buildings.BuildingLayer; import org.oscim.layers.tile.buildings.BuildingLayer;
import org.oscim.layers.tile.vector.VectorTileLayer; import org.oscim.layers.tile.vector.VectorTileLayer;
import org.oscim.layers.tile.vector.labeling.LabelLayer; import org.oscim.layers.tile.vector.labeling.LabelLayer;
@@ -55,8 +54,6 @@ public class MapzenMvtActivity extends MapActivity {
mMap.layers().add(new BuildingLayer(mMap, l)); mMap.layers().add(new BuildingLayer(mMap, l));
mMap.layers().add(new LabelLayer(mMap, l)); mMap.layers().add(new LabelLayer(mMap, l));
mMap.layers().add(new TileGridLayer(mMap));
} }
@Override @Override

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright 2014 Hannes Janetzek * Copyright 2014 Hannes Janetzek
* Copyright 2016-2018 devemux86 * Copyright 2016-2020 devemux86
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@@ -17,9 +17,10 @@
*/ */
package org.oscim.android.test; package org.oscim.android.test;
import android.graphics.BitmapFactory;
import android.os.Bundle; import android.os.Bundle;
import android.widget.Toast; import android.widget.Toast;
import org.oscim.android.canvas.AndroidBitmap;
import org.oscim.backend.canvas.Bitmap; import org.oscim.backend.canvas.Bitmap;
import org.oscim.core.GeoPoint; import org.oscim.core.GeoPoint;
import org.oscim.event.Gesture; import org.oscim.event.Gesture;
@@ -27,26 +28,25 @@ import org.oscim.event.GestureListener;
import org.oscim.event.MotionEvent; import org.oscim.event.MotionEvent;
import org.oscim.layers.Layer; import org.oscim.layers.Layer;
import org.oscim.layers.marker.ItemizedLayer; import org.oscim.layers.marker.ItemizedLayer;
import org.oscim.layers.marker.MarkerInterface;
import org.oscim.layers.marker.MarkerItem; import org.oscim.layers.marker.MarkerItem;
import org.oscim.layers.marker.MarkerSymbol; import org.oscim.layers.marker.MarkerSymbol;
import org.oscim.layers.marker.MarkerSymbol.HotspotPlace; import org.oscim.layers.marker.MarkerSymbol.HotspotPlace;
import org.oscim.layers.tile.bitmap.BitmapTileLayer; import org.oscim.layers.tile.bitmap.BitmapTileLayer;
import org.oscim.map.Map; import org.oscim.map.Map;
import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.OkHttpEngine; import org.oscim.tiling.source.OkHttpEngine;
import org.oscim.tiling.source.UrlTileSource;
import org.oscim.tiling.source.bitmap.DefaultSources; import org.oscim.tiling.source.bitmap.DefaultSources;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import static org.oscim.android.canvas.AndroidGraphics.drawableToBitmap; public class MarkerOverlayActivity extends MapActivity implements ItemizedLayer.OnItemGestureListener<MarkerInterface> {
public class MarkerOverlayActivity extends MapActivity
implements ItemizedLayer.OnItemGestureListener<MarkerItem> {
static final boolean BILLBOARDS = true; static final boolean BILLBOARDS = true;
MarkerSymbol mFocusMarker; MarkerSymbol mFocusMarker;
ItemizedLayer<MarkerItem> mMarkerLayer; ItemizedLayer mMarkerLayer;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
@@ -59,28 +59,29 @@ public class MarkerOverlayActivity extends MapActivity
// Map events receiver // Map events receiver
mMap.layers().add(new MapEventsReceiver(mMap)); mMap.layers().add(new MapEventsReceiver(mMap));
TileSource tileSource = DefaultSources.OPENSTREETMAP UrlTileSource tileSource = DefaultSources.OPENSTREETMAP
.httpFactory(new OkHttpEngine.OkHttpFactory()) .httpFactory(new OkHttpEngine.OkHttpFactory())
.build(); .build();
tileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-android-example"));
mMap.layers().add(new BitmapTileLayer(mMap, tileSource)); mMap.layers().add(new BitmapTileLayer(mMap, tileSource));
Bitmap bitmapPoi = drawableToBitmap(getResources().getDrawable(R.drawable.marker_poi)); Bitmap bitmapPoi = new AndroidBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.marker_poi));
MarkerSymbol symbol; MarkerSymbol symbol;
if (BILLBOARDS) if (BILLBOARDS)
symbol = new MarkerSymbol(bitmapPoi, HotspotPlace.BOTTOM_CENTER); symbol = new MarkerSymbol(bitmapPoi, HotspotPlace.BOTTOM_CENTER);
else else
symbol = new MarkerSymbol(bitmapPoi, HotspotPlace.CENTER, false); symbol = new MarkerSymbol(bitmapPoi, HotspotPlace.CENTER, false);
Bitmap bitmapFocus = drawableToBitmap(getResources().getDrawable(R.drawable.marker_focus)); Bitmap bitmapFocus = new AndroidBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.marker_focus));
if (BILLBOARDS) if (BILLBOARDS)
mFocusMarker = new MarkerSymbol(bitmapFocus, HotspotPlace.BOTTOM_CENTER); mFocusMarker = new MarkerSymbol(bitmapFocus, HotspotPlace.BOTTOM_CENTER);
else else
mFocusMarker = new MarkerSymbol(bitmapFocus, HotspotPlace.CENTER, false); mFocusMarker = new MarkerSymbol(bitmapFocus, HotspotPlace.CENTER, false);
mMarkerLayer = new ItemizedLayer<>(mMap, new ArrayList<MarkerItem>(), symbol, this); mMarkerLayer = new ItemizedLayer(mMap, new ArrayList<MarkerInterface>(), symbol, this);
mMap.layers().add(mMarkerLayer); mMap.layers().add(mMarkerLayer);
List<MarkerItem> pts = new ArrayList<>(); List<MarkerInterface> pts = new ArrayList<>();
for (double lat = -90; lat <= 90; lat += 5) { for (double lat = -90; lat <= 90; lat += 5) {
for (double lon = -180; lon <= 180; lon += 5) for (double lon = -180; lon <= 180; lon += 5)
@@ -99,24 +100,26 @@ public class MarkerOverlayActivity extends MapActivity
} }
@Override @Override
public boolean onItemSingleTapUp(int index, MarkerItem item) { public boolean onItemSingleTapUp(int index, MarkerInterface item) {
if (item.getMarker() == null) MarkerItem markerItem = (MarkerItem) item;
item.setMarker(mFocusMarker); if (markerItem.getMarker() == null)
markerItem.setMarker(mFocusMarker);
else else
item.setMarker(null); markerItem.setMarker(null);
Toast.makeText(this, "Marker tap\n" + item.getTitle(), Toast.LENGTH_SHORT).show(); Toast.makeText(this, "Marker tap\n" + markerItem.getTitle(), Toast.LENGTH_SHORT).show();
return true; return true;
} }
@Override @Override
public boolean onItemLongPress(int index, MarkerItem item) { public boolean onItemLongPress(int index, MarkerInterface item) {
if (item.getMarker() == null) MarkerItem markerItem = (MarkerItem) item;
item.setMarker(mFocusMarker); if (markerItem.getMarker() == null)
markerItem.setMarker(mFocusMarker);
else else
item.setMarker(null); markerItem.setMarker(null);
Toast.makeText(this, "Marker long press\n" + item.getTitle(), Toast.LENGTH_SHORT).show(); Toast.makeText(this, "Marker long press\n" + markerItem.getTitle(), Toast.LENGTH_SHORT).show();
return true; return true;
} }

View File

@@ -1,90 +0,0 @@
/*
* Copyright 2016 Marvin W
* Copyright 2016-2017 devemux86
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.oscim.android.test;
import android.app.Activity;
import android.os.Bundle;
import org.oscim.android.MapPreferences;
import org.oscim.android.MapView;
import org.oscim.layers.tile.buildings.BuildingLayer;
import org.oscim.layers.tile.vector.VectorTileLayer;
import org.oscim.layers.tile.vector.labeling.LabelLayer;
import org.oscim.map.Map;
import org.oscim.theme.VtmThemes;
import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.OkHttpEngine;
import org.oscim.tiling.source.oscimap4.OSciMap4TileSource;
public class MultiMapViewActivity extends Activity {
private MapView mMapView1, mMapView2;
private MapPreferences mPrefs1, mPrefs2;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map_multi);
setTitle(getClass().getSimpleName());
// 1st map view
mMapView1 = (MapView) findViewById(R.id.mapView1);
Map map1 = mMapView1.map();
mPrefs1 = new MapPreferences(MultiMapViewActivity.class.getName() + "1", this);
TileSource tileSource1 = OSciMap4TileSource.builder()
.httpFactory(new OkHttpEngine.OkHttpFactory())
.build();
VectorTileLayer baseLayer1 = map1.setBaseMap(tileSource1);
map1.layers().add(new BuildingLayer(map1, baseLayer1));
map1.layers().add(new LabelLayer(map1, baseLayer1));
map1.setTheme(VtmThemes.DEFAULT);
// 2nd map view
mMapView2 = (MapView) findViewById(R.id.mapView2);
Map map2 = mMapView2.map();
mPrefs2 = new MapPreferences(MultiMapViewActivity.class.getName() + "2", this);
TileSource tileSource2 = OSciMap4TileSource.builder()
.httpFactory(new OkHttpEngine.OkHttpFactory())
.build();
VectorTileLayer baseLayer2 = map2.setBaseMap(tileSource2);
map2.layers().add(new BuildingLayer(map2, baseLayer2));
map2.layers().add(new LabelLayer(map2, baseLayer2));
map2.setTheme(VtmThemes.DEFAULT);
}
@Override
protected void onResume() {
super.onResume();
mPrefs1.load(mMapView1.map());
mMapView1.onResume();
mPrefs2.load(mMapView2.map());
mMapView2.onResume();
}
@Override
protected void onPause() {
super.onPause();
mMapView1.onPause();
mPrefs1.save(mMapView1.map());
mMapView2.onPause();
mPrefs2.save(mMapView2.map());
}
}

View File

@@ -17,7 +17,6 @@ package org.oscim.android.test;
import android.os.Bundle; import android.os.Bundle;
import org.oscim.android.cache.TileCache; import org.oscim.android.cache.TileCache;
import org.oscim.layers.TileGridLayer;
import org.oscim.layers.tile.buildings.BuildingLayer; import org.oscim.layers.tile.buildings.BuildingLayer;
import org.oscim.layers.tile.vector.VectorTileLayer; import org.oscim.layers.tile.vector.VectorTileLayer;
import org.oscim.layers.tile.vector.labeling.LabelLayer; import org.oscim.layers.tile.vector.labeling.LabelLayer;
@@ -54,8 +53,6 @@ public class NextzenGeojsonActivity extends MapActivity {
mMap.layers().add(new BuildingLayer(mMap, l)); mMap.layers().add(new BuildingLayer(mMap, l));
mMap.layers().add(new LabelLayer(mMap, l)); mMap.layers().add(new LabelLayer(mMap, l));
mMap.layers().add(new TileGridLayer(mMap));
} }
@Override @Override

View File

@@ -17,7 +17,6 @@ package org.oscim.android.test;
import android.os.Bundle; import android.os.Bundle;
import org.oscim.android.cache.TileCache; import org.oscim.android.cache.TileCache;
import org.oscim.layers.TileGridLayer;
import org.oscim.layers.tile.buildings.BuildingLayer; import org.oscim.layers.tile.buildings.BuildingLayer;
import org.oscim.layers.tile.vector.VectorTileLayer; import org.oscim.layers.tile.vector.VectorTileLayer;
import org.oscim.layers.tile.vector.labeling.LabelLayer; import org.oscim.layers.tile.vector.labeling.LabelLayer;
@@ -54,8 +53,6 @@ public class NextzenMvtActivity extends MapActivity {
mMap.layers().add(new BuildingLayer(mMap, l)); mMap.layers().add(new BuildingLayer(mMap, l));
mMap.layers().add(new LabelLayer(mMap, l)); mMap.layers().add(new LabelLayer(mMap, l));
mMap.layers().add(new TileGridLayer(mMap));
} }
@Override @Override

View File

@@ -1,72 +0,0 @@
/*
* Copyright 2016-2017 devemux86
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.oscim.android.test;
import android.os.Bundle;
import org.oscim.android.cache.TileCache;
import org.oscim.layers.tile.TileLayer;
import org.oscim.layers.tile.buildings.S3DBTileLayer;
import org.oscim.layers.tile.vector.labeling.LabelLayer;
import org.oscim.theme.VtmThemes;
import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.OkHttpEngine;
import org.oscim.tiling.source.oscimap4.OSciMap4TileSource;
public class OSciMapS3DBActivity extends BaseMapActivity {
TileCache mS3dbCache;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mMap.setTheme(VtmThemes.DEFAULT);
TileSource ts = OSciMap4TileSource.builder()
.httpFactory(new OkHttpEngine.OkHttpFactory())
.url("http://opensciencemap.org/tiles/s3db")
.zoomMin(16)
.zoomMax(16)
.build();
if (USE_CACHE) {
mS3dbCache = new TileCache(this, null, "s3db.db");
mS3dbCache.setCacheSize(512 * (1 << 10));
ts.setCache(mS3dbCache);
}
TileLayer tl = new S3DBTileLayer(mMap, ts, true, false);
mMap.layers().add(tl);
mMap.layers().add(new LabelLayer(mMap, mBaseLayer));
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mS3dbCache != null)
mS3dbCache.dispose();
}
@Override
protected void onResume() {
super.onResume();
/* ignore saved position */
mMap.setMapPosition(53.5620092, 9.9866457, 1 << 16);
}
}

View File

@@ -17,7 +17,6 @@ package org.oscim.android.test;
import android.os.Bundle; import android.os.Bundle;
import org.oscim.android.cache.TileCache; import org.oscim.android.cache.TileCache;
import org.oscim.layers.TileGridLayer;
import org.oscim.layers.tile.buildings.BuildingLayer; import org.oscim.layers.tile.buildings.BuildingLayer;
import org.oscim.layers.tile.vector.VectorTileLayer; import org.oscim.layers.tile.vector.VectorTileLayer;
import org.oscim.layers.tile.vector.labeling.LabelLayer; import org.oscim.layers.tile.vector.labeling.LabelLayer;
@@ -54,8 +53,6 @@ public class OpenMapTilesMvtActivity extends MapActivity {
mMap.layers().add(new BuildingLayer(mMap, l)); mMap.layers().add(new BuildingLayer(mMap, l));
mMap.layers().add(new LabelLayer(mMap, l)); mMap.layers().add(new LabelLayer(mMap, l));
mMap.layers().add(new TileGridLayer(mMap));
} }
@Override @Override

View File

@@ -0,0 +1,76 @@
/*
* Copyright 2019 Gustl22
* Copyright 2020 devemux86
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.oscim.android.test;
import android.os.Bundle;
import org.oscim.layers.tile.bitmap.BitmapTileLayer;
import org.oscim.layers.tile.buildings.BuildingLayer;
import org.oscim.layers.tile.buildings.S3DBLayer;
import org.oscim.layers.tile.vector.VectorTileLayer;
import org.oscim.layers.tile.vector.labeling.LabelLayer;
import org.oscim.map.Viewport;
import org.oscim.theme.VtmThemes;
import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.OkHttpEngine;
import org.oscim.tiling.source.UrlTileSource;
import org.oscim.tiling.source.bitmap.DefaultSources;
import org.oscim.tiling.source.overpass.OverpassTileSource;
import java.util.Collections;
/**
* Use Overpass API data for vector layer.
* Only for developing as can be error-prone.
* Take care of overpass provider licenses.
*/
public class OverpassActivity extends MapActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TileSource tileSource = OverpassTileSource.builder()
.httpFactory(new OkHttpEngine.OkHttpFactory())
.zoomMin(15)
.zoomMax(17)
.build();
VectorTileLayer l = mMap.setBaseMap(tileSource);
UrlTileSource bitmapTileSource = DefaultSources.OPENSTREETMAP
.httpFactory(new OkHttpEngine.OkHttpFactory())
.zoomMax(15)
.fadeSteps(new BitmapTileLayer.FadeStep[]{
new BitmapTileLayer.FadeStep(15, 16, 1f, 0f),
new BitmapTileLayer.FadeStep(16, Viewport.MAX_ZOOM_LEVEL, 0f, 0f)
})
.build();
bitmapTileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-android-example"));
mMap.layers().add(new BitmapTileLayer(mMap, bitmapTileSource));
BuildingLayer.RAW_DATA = true;
mMap.layers().add(new S3DBLayer(mMap, l));
mMap.layers().add(new LabelLayer(mMap, l));
mMap.setTheme(VtmThemes.DEFAULT);
}
@Override
protected void onDestroy() {
super.onDestroy();
BuildingLayer.RAW_DATA = false;
}
}

View File

@@ -1,5 +1,6 @@
/* /*
* Copyright 2017-2018 devemux86 * Copyright 2017-2020 devemux86
* Copyright 2018 Gustl22
* *
* This program is free software: you can redistribute it and/or modify it under the * This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software * terms of the GNU Lesser General Public License as published by the Free Software
@@ -14,18 +15,22 @@
*/ */
package org.oscim.android.test; package org.oscim.android.test;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.BitmapFactory;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.widget.Toast; import android.view.View;
import android.view.ViewGroup;
import android.widget.*;
import org.mapsforge.core.model.Tag;
import org.mapsforge.poi.android.storage.AndroidPoiPersistenceManagerFactory; import org.mapsforge.poi.android.storage.AndroidPoiPersistenceManagerFactory;
import org.mapsforge.poi.storage.ExactMatchPoiCategoryFilter; import org.mapsforge.poi.storage.*;
import org.mapsforge.poi.storage.PoiCategoryFilter; import org.oscim.android.canvas.AndroidBitmap;
import org.mapsforge.poi.storage.PoiCategoryManager;
import org.mapsforge.poi.storage.PoiPersistenceManager;
import org.mapsforge.poi.storage.PointOfInterest;
import org.oscim.android.filepicker.FilePicker; import org.oscim.android.filepicker.FilePicker;
import org.oscim.android.filepicker.FilterByFileExtension; import org.oscim.android.filepicker.FilterByFileExtension;
import org.oscim.backend.canvas.Bitmap; import org.oscim.backend.canvas.Bitmap;
@@ -36,6 +41,7 @@ import org.oscim.event.GestureListener;
import org.oscim.event.MotionEvent; import org.oscim.event.MotionEvent;
import org.oscim.layers.Layer; import org.oscim.layers.Layer;
import org.oscim.layers.marker.ItemizedLayer; import org.oscim.layers.marker.ItemizedLayer;
import org.oscim.layers.marker.MarkerInterface;
import org.oscim.layers.marker.MarkerItem; import org.oscim.layers.marker.MarkerItem;
import org.oscim.layers.marker.MarkerSymbol; import org.oscim.layers.marker.MarkerSymbol;
import org.oscim.map.Map; import org.oscim.map.Map;
@@ -47,21 +53,19 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import static org.oscim.android.canvas.AndroidGraphics.drawableToBitmap;
/** /**
* POI search.<br/> * POI search.<br/>
* Long press on map to search inside visible bounding box.<br/> * Long press on map to search inside visible bounding box.<br/>
* Tap on POIs to show their name (in default locale). * Tap on POIs to show their name (in default locale).
*/ */
public class PoiSearchActivity extends MapsforgeActivity implements ItemizedLayer.OnItemGestureListener<MarkerItem> { public class PoiSearchActivity extends MapsforgeActivity implements ItemizedLayer.OnItemGestureListener<MarkerInterface> {
private static final Logger log = LoggerFactory.getLogger(PoiSearchActivity.class); private static final Logger log = LoggerFactory.getLogger(PoiSearchActivity.class);
private static final String POI_CATEGORY = "Restaurants"; private static final String POI_CATEGORY = "Restaurants";
private static final int SELECT_POI_FILE = MapsforgeActivity.SELECT_THEME_FILE + 1; private static final int SELECT_POI_FILE = MapsforgeActivity.SELECT_THEME_FILE + 1;
private ItemizedLayer<MarkerItem> mMarkerLayer; private ItemizedLayer mMarkerLayer;
private PoiPersistenceManager mPersistenceManager; private PoiPersistenceManager mPersistenceManager;
public static class PoiFilePicker extends FilePicker { public static class PoiFilePicker extends FilePicker {
@@ -70,10 +74,49 @@ public class PoiSearchActivity extends MapsforgeActivity implements ItemizedLaye
} }
} }
public PoiSearchActivity() {
super(false, R.layout.activity_map_poi);
}
private void initSearch() {
final List<Pattern> searchPatterns = new ArrayList<>();
final PatternAdapter adapter = new PatternAdapter(this, searchPatterns);
ListView searchList = (ListView) findViewById(R.id.search_list);
searchList.setAdapter(adapter);
Button addItem = (Button) findViewById(R.id.add_item);
addItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchPatterns.add(new Pattern("", ""));
adapter.notifyDataSetChanged();
}
});
Button startSearch = (Button) findViewById(R.id.start_search);
startSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Clear overlays
mMarkerLayer.removeAllItems();
mMap.render();
// POI search
List<Tag> tags = new ArrayList<>();
for (Pattern pattern : searchPatterns)
tags.add(new Tag(pattern.key, pattern.val));
new PoiSearchTask(PoiSearchActivity.this, null, tags).execute(mMap.getBoundingBox(0));
}
});
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
initSearch();
// Map events receiver // Map events receiver
mMap.layers().add(new PoiSearchActivity.MapEventsReceiver(mMap)); mMap.layers().add(new PoiSearchActivity.MapEventsReceiver(mMap));
} }
@@ -96,7 +139,7 @@ public class PoiSearchActivity extends MapsforgeActivity implements ItemizedLaye
super.onActivityResult(requestCode, resultCode, intent); super.onActivityResult(requestCode, resultCode, intent);
if (requestCode == SELECT_MAP_FILE) { if (requestCode == SELECT_MAP_FILE) {
if (mTileSource != null) if (mTileLayer.getTileSource() != null)
startActivityForResult(new Intent(this, PoiFilePicker.class), startActivityForResult(new Intent(this, PoiFilePicker.class),
SELECT_POI_FILE); SELECT_POI_FILE);
else else
@@ -110,24 +153,30 @@ public class PoiSearchActivity extends MapsforgeActivity implements ItemizedLaye
String file = intent.getStringExtra(FilePicker.SELECTED_FILE); String file = intent.getStringExtra(FilePicker.SELECTED_FILE);
mPersistenceManager = AndroidPoiPersistenceManagerFactory.getPoiPersistenceManager(file); mPersistenceManager = AndroidPoiPersistenceManagerFactory.getPoiPersistenceManager(file);
Bitmap bitmap = drawableToBitmap(getResources().getDrawable(R.drawable.marker_green)); Bitmap bitmap = new AndroidBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.marker_green));
MarkerSymbol symbol = new MarkerSymbol(bitmap, MarkerSymbol.HotspotPlace.BOTTOM_CENTER); MarkerSymbol symbol = new MarkerSymbol(bitmap, MarkerSymbol.HotspotPlace.BOTTOM_CENTER);
mMarkerLayer = new ItemizedLayer<>(mMap, new ArrayList<MarkerItem>(), symbol, this); mMarkerLayer = new ItemizedLayer(mMap, new ArrayList<MarkerInterface>(), symbol, this);
mMap.layers().add(mMarkerLayer); mMap.layers().add(mMarkerLayer);
} }
} }
@Override @Override
public boolean onItemSingleTapUp(int index, MarkerItem item) { public boolean onItemSingleTapUp(int index, MarkerInterface item) {
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show(); MarkerItem markerItem = (MarkerItem) item;
Toast.makeText(this, markerItem.getTitle(), Toast.LENGTH_SHORT).show();
return true; return true;
} }
@Override @Override
public boolean onItemLongPress(int index, MarkerItem item) { public boolean onItemLongPress(int index, MarkerInterface item) {
return false; return false;
} }
public void onToggleControls(View view) {
findViewById(R.id.controls).setVisibility(((ToggleButton) view).isChecked() ?
View.VISIBLE : View.GONE);
}
private class MapEventsReceiver extends Layer implements GestureListener { private class MapEventsReceiver extends Layer implements GestureListener {
MapEventsReceiver(Map map) { MapEventsReceiver(Map map) {
@@ -141,20 +190,100 @@ public class PoiSearchActivity extends MapsforgeActivity implements ItemizedLaye
mMarkerLayer.removeAllItems(); mMarkerLayer.removeAllItems();
mMap.render(); mMap.render();
// POI search // POI search
new PoiSearchTask(PoiSearchActivity.this, POI_CATEGORY).execute(mMap.getBoundingBox(0)); new PoiSearchTask(PoiSearchActivity.this, POI_CATEGORY, null).execute(mMap.getBoundingBox(0));
return true; return true;
} }
return false; return false;
} }
} }
private class Pattern {
String key;
String val;
Pattern(String key, String val) {
this.key = key;
this.val = val;
}
}
private class PatternAdapter extends ArrayAdapter<Pattern> {
PatternAdapter(Context context, List<Pattern> patterns) {
super(context, 0, patterns);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Pattern pattern = getItem(position);
assert pattern != null;
// Check if an existing view is being reused, otherwise inflate the view
if (convertView == null)
convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_poi_search, parent, false);
// Populate the data
EditText etKey = (EditText) convertView.findViewById(R.id.key);
etKey.removeTextChangedListener((PatternTextWatcher) etKey.getTag()); // remove previous listeners
etKey.setText(pattern.key); // set text when no listener is attached
PatternTextWatcher ptwKey = new PatternTextWatcher(pattern, true);
etKey.setTag(ptwKey);
etKey.addTextChangedListener(ptwKey);
EditText etValue = (EditText) convertView.findViewById(R.id.value);
etValue.removeTextChangedListener((PatternTextWatcher) etValue.getTag());
etValue.setText(pattern.val);
PatternTextWatcher ptwVal = new PatternTextWatcher(pattern, false);
etValue.setTag(ptwVal);
etValue.addTextChangedListener(ptwVal);
Button remove = (Button) convertView.findViewById(R.id.remove);
remove.setTag(pattern);
remove.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Pattern pat = (Pattern) v.getTag();
remove(pat);
}
});
return convertView;
}
}
private class PatternTextWatcher implements TextWatcher {
private Pattern pattern;
private boolean isKey;
PatternTextWatcher(Pattern pattern, boolean isKey) {
this.pattern = pattern;
this.isKey = isKey;
}
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (isKey)
pattern.key = s.toString();
else
pattern.val = s.toString();
}
}
private class PoiSearchTask extends AsyncTask<BoundingBox, Void, Collection<PointOfInterest>> { private class PoiSearchTask extends AsyncTask<BoundingBox, Void, Collection<PointOfInterest>> {
private final WeakReference<PoiSearchActivity> weakActivity; private final WeakReference<PoiSearchActivity> weakActivity;
private final String category; private final String category;
private final List<Tag> patterns;
private PoiSearchTask(PoiSearchActivity activity, String category) { private PoiSearchTask(PoiSearchActivity activity, String category, List<Tag> patterns) {
this.weakActivity = new WeakReference<>(activity); this.weakActivity = new WeakReference<>(activity);
this.category = category; this.category = category;
this.patterns = patterns;
} }
@Override @Override
@@ -163,11 +292,12 @@ public class PoiSearchActivity extends MapsforgeActivity implements ItemizedLaye
try { try {
PoiCategoryManager categoryManager = mPersistenceManager.getCategoryManager(); PoiCategoryManager categoryManager = mPersistenceManager.getCategoryManager();
PoiCategoryFilter categoryFilter = new ExactMatchPoiCategoryFilter(); PoiCategoryFilter categoryFilter = new ExactMatchPoiCategoryFilter();
categoryFilter.addCategory(categoryManager.getPoiCategoryByTitle(category)); if (category != null)
categoryFilter.addCategory(categoryManager.getPoiCategoryByTitle(category));
org.mapsforge.core.model.BoundingBox bb = new org.mapsforge.core.model.BoundingBox( org.mapsforge.core.model.BoundingBox bb = new org.mapsforge.core.model.BoundingBox(
params[0].getMinLatitude(), params[0].getMinLongitude(), params[0].getMinLatitude(), params[0].getMinLongitude(),
params[0].getMaxLatitude(), params[0].getMaxLongitude()); params[0].getMaxLatitude(), params[0].getMaxLongitude());
return mPersistenceManager.findInRect(bb, categoryFilter, null, Integer.MAX_VALUE); return mPersistenceManager.findInRect(bb, categoryFilter, patterns, Integer.MAX_VALUE);
} catch (Throwable t) { } catch (Throwable t) {
log.error(t.getMessage(), t); log.error(t.getMessage(), t);
} }
@@ -180,13 +310,14 @@ public class PoiSearchActivity extends MapsforgeActivity implements ItemizedLaye
if (activity == null) { if (activity == null) {
return; return;
} }
Toast.makeText(activity, category + ": " + (pointOfInterests != null ? pointOfInterests.size() : 0), Toast.LENGTH_SHORT).show(); Toast.makeText(activity, (category != null ? category : "Results") + ": "
+ (pointOfInterests != null ? pointOfInterests.size() : 0), Toast.LENGTH_SHORT).show();
if (pointOfInterests == null) { if (pointOfInterests == null) {
return; return;
} }
// Overlay POI // Overlay POI
List<MarkerItem> pts = new ArrayList<>(); List<MarkerInterface> pts = new ArrayList<>();
for (PointOfInterest pointOfInterest : pointOfInterests) for (PointOfInterest pointOfInterest : pointOfInterests)
pts.add(new MarkerItem(pointOfInterest.getName(), "", new GeoPoint(pointOfInterest.getLatitude(), pointOfInterest.getLongitude()))); pts.add(new MarkerItem(pointOfInterest.getName(), "", new GeoPoint(pointOfInterest.getLatitude(), pointOfInterest.getLongitude())));
mMarkerLayer.addItems(pts); mMarkerLayer.addItems(pts);

View File

@@ -32,6 +32,7 @@ import org.oscim.event.MotionEvent;
import org.oscim.layers.Layer; import org.oscim.layers.Layer;
import org.oscim.layers.TileGridLayer; import org.oscim.layers.TileGridLayer;
import org.oscim.map.Map; import org.oscim.map.Map;
import org.oscim.tiling.OverzoomTileDataSource;
import org.oscim.tiling.source.mapfile.MapDatabase; import org.oscim.tiling.source.mapfile.MapDatabase;
import org.oscim.tiling.source.mapfile.MapReadResult; import org.oscim.tiling.source.mapfile.MapReadResult;
import org.oscim.tiling.source.mapfile.PointOfInterest; import org.oscim.tiling.source.mapfile.PointOfInterest;
@@ -96,7 +97,7 @@ public class ReverseGeocodeActivity extends MapsforgeActivity {
int tileYMax = MercatorProjection.pixelYToTileY(pixelY + touchRadius, (byte) mMap.getMapPosition().getZoomLevel()); int tileYMax = MercatorProjection.pixelYToTileY(pixelY + touchRadius, (byte) mMap.getMapPosition().getZoomLevel());
Tile upperLeft = new Tile(tileXMin, tileYMin, (byte) mMap.getMapPosition().getZoomLevel()); Tile upperLeft = new Tile(tileXMin, tileYMin, (byte) mMap.getMapPosition().getZoomLevel());
Tile lowerRight = new Tile(tileXMax, tileYMax, (byte) mMap.getMapPosition().getZoomLevel()); Tile lowerRight = new Tile(tileXMax, tileYMax, (byte) mMap.getMapPosition().getZoomLevel());
MapReadResult mapReadResult = ((MapDatabase) mTileSource.getDataSource()).readLabels(upperLeft, lowerRight); MapReadResult mapReadResult = ((MapDatabase) ((OverzoomTileDataSource) mTileLayer.getTileSource().getDataSource()).getDataSource()).readLabels(upperLeft, lowerRight);
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();

View File

@@ -1,78 +0,0 @@
/*
* Copyright 2014 Hannes Janetzek
* Copyright 2016-2017 devemux86
* Copyright 2017 Longri
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.oscim.android.test;
import android.widget.Toast;
import org.oscim.layers.marker.MarkerItem;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.atomic.AtomicInteger;
public class RotateMarkerOverlayActivity extends MarkerOverlayActivity {
private Timer timer;
private int markerCount = 0;
private void itemEvent(final MarkerItem item) {
if (item.getMarker() == null) {
item.setMarker(mFocusMarker);
markerCount++;
final AtomicInteger rotValue = new AtomicInteger(0);
if (timer != null)
timer.cancel();
timer = new Timer();
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
float value = (float) (rotValue.incrementAndGet() * 10);
item.setRotation(value);
if (rotValue.get() > 36)
rotValue.set(0);
mMarkerLayer.update();
mMap.updateMap(true);
}
};
timer.schedule(timerTask, 1000, 1000);
} else {
item.setMarker(null);
markerCount--;
if (timer != null && markerCount == 0)
timer.cancel();
}
}
@Override
public boolean onItemSingleTapUp(int index, MarkerItem item) {
itemEvent(item);
Toast.makeText(this, "Marker tap\n" + item.getTitle(), Toast.LENGTH_SHORT).show();
return true;
}
@Override
public boolean onItemLongPress(int index, MarkerItem item) {
itemEvent(item);
Toast.makeText(this, "Marker long press\n" + item.getTitle(), Toast.LENGTH_SHORT).show();
return true;
}
}

View File

@@ -1,9 +1,15 @@
/* /*
* Copyright 2010, 2011, 2012, 2013 mapsforge.org * Copyright 2010, 2011, 2012, 2013 mapsforge.org
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016-2018 devemux86 * Copyright 2016-2020 devemux86
* Copyright 2016 mar-v-in
* Copyright 2016 Mathieu de Brito
* Copyright 2017-2018 Longri * Copyright 2017-2018 Longri
* Copyright 2017 nebular * Copyright 2017 nebular
* Copyright 2018 boldtrn
* Copyright 2018-2019 Gustl22
* Copyright 2019 Andrea Antonello
* Copyright 2019 Kostas Tzounopoulos
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@@ -83,56 +89,42 @@ public class Samples extends Activity {
linearLayout.addView(createLabel(null)); linearLayout.addView(createLabel(null));
linearLayout.addView(createButton(SimpleMapActivity.class)); linearLayout.addView(createButton(SimpleMapActivity.class));
linearLayout.addView(createButton(MapsforgeActivity.class)); linearLayout.addView(createButton(MapsforgeActivity.class));
linearLayout.addView(createButton(MBTilesMvtActivity.class));
linearLayout.addView(createButton(MapilionMvtActivity.class));
/*linearLayout.addView(createButton(MapzenMvtActivity.class)); /*linearLayout.addView(createButton(MapzenMvtActivity.class));
linearLayout.addView(createButton(MapzenGeojsonActivity.class));*/ linearLayout.addView(createButton(MapzenGeojsonActivity.class));
linearLayout.addView(createButton(NextzenMvtActivity.class)); linearLayout.addView(createButton(NextzenMvtActivity.class));
linearLayout.addView(createButton(NextzenGeojsonActivity.class)); linearLayout.addView(createButton(NextzenGeojsonActivity.class));
linearLayout.addView(createButton(OpenMapTilesMvtActivity.class)); linearLayout.addView(createButton(OpenMapTilesMvtActivity.class));*/
linearLayout.addView(createButton(GdxActivity.class)); linearLayout.addView(createButton(GdxActivity.class));
linearLayout.addView(createLabel("Features")); linearLayout.addView(createLabel("Features"));
linearLayout.addView(createButton(null, "GraphHopper Routing", new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/graphhopper/graphhopper/tree/master/android")));
}
}));
linearLayout.addView(createButton(LocationActivity.class)); linearLayout.addView(createButton(LocationActivity.class));
linearLayout.addView(createButton(LocationTextureActivity.class)); linearLayout.addView(createButton(LocationTextureActivity.class));
linearLayout.addView(createButton(PoiSearchActivity.class)); linearLayout.addView(createButton(PoiSearchActivity.class));
linearLayout.addView(createLabel("Vector Features")); linearLayout.addView(createLabel("Vector Features"));
linearLayout.addView(createButton(MapsforgeStyleActivity.class)); linearLayout.addView(createButton(MapsforgeStyleActivity.class));
linearLayout.addView(createButton(MapsforgePolyLabelActivity.class));
linearLayout.addView(createButton(MapsforgeS3DBActivity.class)); linearLayout.addView(createButton(MapsforgeS3DBActivity.class));
linearLayout.addView(createButton(AtlasThemeActivity.class)); linearLayout.addView(createButton(ShadowActivity.class));
linearLayout.addView(createButton(POTTextureActivity.class));
linearLayout.addView(createLabel("Raster Maps")); linearLayout.addView(createLabel("Raster Maps"));
linearLayout.addView(createButton(BitmapTileActivity.class)); linearLayout.addView(createButton(BitmapTileActivity.class));
linearLayout.addView(createButton(MBTilesBitmapActivity.class));
linearLayout.addView(createLabel("Overlays")); linearLayout.addView(createLabel("Overlays"));
linearLayout.addView(createButton(MarkerOverlayActivity.class)); linearLayout.addView(createButton(MarkerOverlayActivity.class));
linearLayout.addView(createButton(RotateMarkerOverlayActivity.class));
linearLayout.addView(createButton(AtlasMarkerOverlayActivity.class));
linearLayout.addView(createButton(AtlasMultiTextureActivity.class));
linearLayout.addView(createButton(ClusterMarkerOverlayActivity.class));
linearLayout.addView(createButton(PathOverlayActivity.class)); linearLayout.addView(createButton(PathOverlayActivity.class));
linearLayout.addView(createButton(LineTexActivity.class)); linearLayout.addView(createButton(LineTexActivity.class));
linearLayout.addView(createButton(VectorLayerActivity.class)); linearLayout.addView(createButton(VectorLayerActivity.class));
linearLayout.addView(createButton(AtlasMultiTextureActivity.class));
linearLayout.addView(createLabel("User Interaction"));
linearLayout.addView(createButton(Animator2Activity.class));
linearLayout.addView(createButton(MapEventLayer2Activity.class));
linearLayout.addView(createButton(LayerGroupActivity.class));
linearLayout.addView(createLabel("Dual Map Views"));
linearLayout.addView(createButton(MultiMapViewActivity.class));
linearLayout.addView(createLabel("Experiments")); linearLayout.addView(createLabel("Experiments"));
linearLayout.addView(createButton(ReverseGeocodeActivity.class)); linearLayout.addView(createButton(ReverseGeocodeActivity.class));
linearLayout.addView(createButton(OSciMapS3DBActivity.class));
linearLayout.addView(createButton(ThemeStylerActivity.class)); linearLayout.addView(createButton(ThemeStylerActivity.class));
linearLayout.addView(createButton(JeoIndoorActivity.class)); linearLayout.addView(createButton(JeoIndoorActivity.class));
linearLayout.addView(createButton(GdxPoi3DActivity.class));
linearLayout.addView(createButton(OverpassActivity.class));
linearLayout.addView(createButton(ClusterMarkerOverlayActivity.class));
} }
} }

View File

@@ -0,0 +1,72 @@
/*
* Copyright 2019 Gustl22
* Copyright 2019 devemux86
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.oscim.android.test;
import android.os.Bundle;
import android.view.View;
import android.widget.SeekBar;
import android.widget.ToggleButton;
import org.oscim.renderer.ExtrusionRenderer;
import org.oscim.renderer.light.Sun;
public class ShadowActivity extends SimpleMapActivity implements SeekBar.OnSeekBarChangeListener {
private SeekBar mSeekBar;
public ShadowActivity() {
super(true, R.layout.activity_shadow);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mSeekBar = findViewById(R.id.seekBarShadow);
mSeekBar.setOnSeekBarChangeListener(this);
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
int id = seekBar.getId();
if (id == R.id.seekBarShadow) {
Sun sun = mBuildingLayer.getExtrusionRenderer().getSun();
sun.setProgress(progress / 1000f);
sun.updatePosition();
sun.updateColor();
mMap.updateMap(true);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
public void onToggleCurrentSun(View view) {
boolean isCurrentSun = ((ToggleButton) view).isChecked();
mSeekBar.setEnabled(!isCurrentSun);
ExtrusionRenderer extrusionRenderer = mBuildingLayer.getExtrusionRenderer();
extrusionRenderer.enableCurrentSunPos(isCurrentSun);
extrusionRenderer.getSun().update();
mSeekBar.setProgress((int) (extrusionRenderer.getSun().getProgress() * 1000));
mMap.updateMap(true);
}
}

View File

@@ -1,6 +1,7 @@
/* /*
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016-2018 devemux86 * Copyright 2016-2019 devemux86
* Copyright 2019 Gustl22
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@@ -37,7 +38,23 @@ import org.oscim.theme.ThemeLoader;
import org.oscim.theme.VtmThemes; import org.oscim.theme.VtmThemes;
public class SimpleMapActivity extends BaseMapActivity { public class SimpleMapActivity extends BaseMapActivity {
private DefaultMapScaleBar mapScaleBar;
BuildingLayer mBuildingLayer;
private boolean mShadow;
public SimpleMapActivity() {
this(false);
}
public SimpleMapActivity(boolean shadow) {
super();
mShadow = shadow;
}
public SimpleMapActivity(boolean shadow, int contentView) {
super(contentView);
mShadow = shadow;
}
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
@@ -48,11 +65,12 @@ public class SimpleMapActivity extends BaseMapActivity {
void createLayers() { void createLayers() {
GroupLayer groupLayer = new GroupLayer(mMap); GroupLayer groupLayer = new GroupLayer(mMap);
groupLayer.layers.add(new BuildingLayer(mMap, mBaseLayer)); mBuildingLayer = new BuildingLayer(mMap, mBaseLayer, false, mShadow);
groupLayer.layers.add(mBuildingLayer);
groupLayer.layers.add(new LabelLayer(mMap, mBaseLayer)); groupLayer.layers.add(new LabelLayer(mMap, mBaseLayer));
mMap.layers().add(groupLayer); mMap.layers().add(groupLayer);
mapScaleBar = new DefaultMapScaleBar(mMap); DefaultMapScaleBar mapScaleBar = new DefaultMapScaleBar(mMap);
mapScaleBar.setScaleBarMode(DefaultMapScaleBar.ScaleBarMode.BOTH); mapScaleBar.setScaleBarMode(DefaultMapScaleBar.ScaleBarMode.BOTH);
mapScaleBar.setDistanceUnitAdapter(MetricUnitAdapter.INSTANCE); mapScaleBar.setDistanceUnitAdapter(MetricUnitAdapter.INSTANCE);
mapScaleBar.setSecondaryDistanceUnitAdapter(ImperialUnitAdapter.INSTANCE); mapScaleBar.setSecondaryDistanceUnitAdapter(ImperialUnitAdapter.INSTANCE);
@@ -67,14 +85,6 @@ public class SimpleMapActivity extends BaseMapActivity {
mMap.setTheme(VtmThemes.DEFAULT); mMap.setTheme(VtmThemes.DEFAULT);
} }
@Override
protected void onDestroy() {
if (mapScaleBar != null)
mapScaleBar.destroy();
super.onDestroy();
}
void runTheMonkey() { void runTheMonkey() {
themes[0] = ThemeLoader.load(VtmThemes.DEFAULT); themes[0] = ThemeLoader.load(VtmThemes.DEFAULT);
themes[1] = ThemeLoader.load(VtmThemes.OSMARENDER); themes[1] = ThemeLoader.load(VtmThemes.OSMARENDER);

View File

@@ -7,6 +7,7 @@ import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.ToggleButton; import android.widget.ToggleButton;
import org.oscim.backend.canvas.Color;
import org.oscim.layers.tile.buildings.BuildingLayer; import org.oscim.layers.tile.buildings.BuildingLayer;
import org.oscim.layers.tile.vector.VectorTileLayer; import org.oscim.layers.tile.vector.VectorTileLayer;
import org.oscim.layers.tile.vector.labeling.LabelLayer; import org.oscim.layers.tile.vector.labeling.LabelLayer;
@@ -24,9 +25,6 @@ import org.oscim.theme.styles.RenderStyle;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import static org.oscim.utils.ColorUtil.modHsv;
import static org.oscim.utils.ColorUtil.shiftHue;
public class ThemeStylerActivity extends BaseMapActivity implements OnSeekBarChangeListener { public class ThemeStylerActivity extends BaseMapActivity implements OnSeekBarChangeListener {
final Logger log = LoggerFactory.getLogger(ThemeStylerActivity.class); final Logger log = LoggerFactory.getLogger(ThemeStylerActivity.class);
@@ -90,13 +88,10 @@ public class ThemeStylerActivity extends BaseMapActivity implements OnSeekBarCha
} }
int modColor(int color, HSV hsv) { int modColor(int color, HSV hsv) {
return modHsv(shiftHue(color, hsv.hue), 1, hsv.sat, hsv.val, true); return hsv.mod(color, true);
} }
public static class HSV { public static class HSV extends Color.HSV {
public double hue = 0;
public double sat = 1;
public double val = 1;
public boolean changed; public boolean changed;
} }
@@ -124,16 +119,16 @@ public class ThemeStylerActivity extends BaseMapActivity implements OnSeekBarCha
c = outlineColor; c = outlineColor;
if (id == R.id.seekBarS) if (id == R.id.seekBarS)
c.sat = progress / 50f; c.saturation = progress / 50f;
else if (id == R.id.seekBarV) else if (id == R.id.seekBarV)
c.val = progress / 50f; c.value = progress / 50f;
else if (id == R.id.seekBarH) else if (id == R.id.seekBarH)
c.hue = progress / 100f; c.hue = progress / 100f;
log.debug((modArea ? "area" : "line") log.debug((modArea ? "area" : "line")
+ " h:" + c.hue + " h:" + c.hue
+ " s:" + c.sat + " s:" + c.saturation
+ " v:" + c.val); + " v:" + c.value);
VectorTileLayer l = (VectorTileLayer) mMap.layers().get(1); VectorTileLayer l = (VectorTileLayer) mMap.layers().get(1);
RenderTheme t = (RenderTheme) l.getTheme(); RenderTheme t = (RenderTheme) l.getTheme();
@@ -181,8 +176,8 @@ public class ThemeStylerActivity extends BaseMapActivity implements OnSeekBarCha
} }
if (c == null) if (c == null)
return; return;
((SeekBar) findViewById(R.id.seekBarS)).setProgress((int) (c.sat * 50)); ((SeekBar) findViewById(R.id.seekBarS)).setProgress((int) (c.saturation * 50));
((SeekBar) findViewById(R.id.seekBarV)).setProgress((int) (c.val * 50)); ((SeekBar) findViewById(R.id.seekBarV)).setProgress((int) (c.value * 50));
((SeekBar) findViewById(R.id.seekBarH)).setProgress((int) (c.hue * 100)); ((SeekBar) findViewById(R.id.seekBarH)).setProgress((int) (c.hue * 100));
} }
} }

View File

@@ -3,6 +3,7 @@ apply plugin: 'com.github.dcendents.android-maven'
dependencies { dependencies {
api project(':vtm') api project(':vtm')
api "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion"
} }
android { android {
@@ -15,8 +16,8 @@ android {
} }
defaultConfig { defaultConfig {
versionCode versionCode() versionCode project.versionCode()
versionName versionName() versionName project.versionName()
minSdkVersion androidMinSdk() minSdkVersion androidMinSdk()
targetSdkVersion androidTargetSdk() targetSdkVersion androidTargetSdk()
} }
@@ -25,7 +26,6 @@ android {
main { main {
manifest.srcFile 'AndroidManifest.xml' manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src'] java.srcDirs = ['src']
resources.srcDirs = ['src']
} }
debug.setRoot('build-types/debug') debug.setRoot('build-types/debug')
release.setRoot('build-types/release') release.setRoot('build-types/release')
@@ -40,11 +40,11 @@ android.libraryVariants.all { variant ->
return return
def jar = project.tasks.create "jar${name.capitalize()}", Jar def jar = project.tasks.create "jar${name.capitalize()}", Jar
jar.dependsOn variant.javaCompiler jar.dependsOn variant.javaCompileProvider
jar.exclude '**/BuildConfig.class' jar.exclude '**/BuildConfig.class'
jar.exclude '**/R.class' jar.exclude '**/R.class'
jar.exclude '**/R$*.class' jar.exclude '**/R$*.class'
jar.from variant.javaCompiler.destinationDir jar.from variant.javaCompileProvider.get().destinationDir
artifacts.add('archives', jar) artifacts.add('archives', jar)
file('natives').eachDir() { dir -> file('natives').eachDir() { dir ->

View File

@@ -1,5 +1,6 @@
/* /*
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2019 Gustl22
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@@ -19,6 +20,8 @@ package org.oscim.gdx;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.opengl.GLES20; import android.opengl.GLES20;
import com.badlogic.gdx.backends.android.AndroidGL20;
import org.oscim.backend.GL; import org.oscim.backend.GL;
import java.nio.Buffer; import java.nio.Buffer;
@@ -28,6 +31,8 @@ import java.nio.IntBuffer;
@SuppressLint("NewApi") @SuppressLint("NewApi")
public class AndroidGL implements GL { public class AndroidGL implements GL {
private static final AndroidGL20 androidGL = new AndroidGL20();
@Override @Override
public void attachShader(int program, int shader) { public void attachShader(int program, int shader) {
GLES20.glAttachShader(program, shader); GLES20.glAttachShader(program, shader);
@@ -103,11 +108,21 @@ public class AndroidGL implements GL {
return GLES20.glCreateShader(type); return GLES20.glCreateShader(type);
} }
@Override
public void deleteBuffer(int buffer) {
androidGL.glDeleteBuffer(buffer);
}
@Override @Override
public void deleteBuffers(int n, IntBuffer buffers) { public void deleteBuffers(int n, IntBuffer buffers) {
GLES20.glDeleteBuffers(n, buffers); GLES20.glDeleteBuffers(n, buffers);
} }
@Override
public void deleteFramebuffer(int framebuffer) {
androidGL.glDeleteFramebuffer(framebuffer);
}
@Override @Override
public void deleteFramebuffers(int n, IntBuffer framebuffers) { public void deleteFramebuffers(int n, IntBuffer framebuffers) {
GLES20.glDeleteFramebuffers(n, framebuffers); GLES20.glDeleteFramebuffers(n, framebuffers);
@@ -118,6 +133,11 @@ public class AndroidGL implements GL {
GLES20.glDeleteProgram(program); GLES20.glDeleteProgram(program);
} }
@Override
public void deleteRenderbuffer(int renderbuffer) {
androidGL.glDeleteRenderbuffer(renderbuffer);
}
@Override @Override
public void deleteRenderbuffers(int n, IntBuffer renderbuffers) { public void deleteRenderbuffers(int n, IntBuffer renderbuffers) {
GLES20.glDeleteRenderbuffers(n, renderbuffers); GLES20.glDeleteRenderbuffers(n, renderbuffers);
@@ -160,6 +180,11 @@ public class AndroidGL implements GL {
GLES20.glFramebufferTexture2D(target, attachment, textarget, texture, level); GLES20.glFramebufferTexture2D(target, attachment, textarget, texture, level);
} }
@Override
public int genBuffer() {
return androidGL.glGenBuffer();
}
@Override @Override
public void genBuffers(int n, IntBuffer buffers) { public void genBuffers(int n, IntBuffer buffers) {
GLES20.glGenBuffers(n, buffers); GLES20.glGenBuffers(n, buffers);
@@ -170,11 +195,21 @@ public class AndroidGL implements GL {
GLES20.glGenerateMipmap(target); GLES20.glGenerateMipmap(target);
} }
@Override
public int genFramebuffer() {
return androidGL.glGenFramebuffer();
}
@Override @Override
public void genFramebuffers(int n, IntBuffer framebuffers) { public void genFramebuffers(int n, IntBuffer framebuffers) {
GLES20.glGenFramebuffers(n, framebuffers); GLES20.glGenFramebuffers(n, framebuffers);
} }
@Override
public int genRenderbuffer() {
return androidGL.glGenRenderbuffer();
}
@Override @Override
public void genRenderbuffers(int n, IntBuffer renderbuffers) { public void genRenderbuffers(int n, IntBuffer renderbuffers) {
GLES20.glGenRenderbuffers(n, renderbuffers); GLES20.glGenRenderbuffers(n, renderbuffers);
@@ -187,14 +222,12 @@ public class AndroidGL implements GL {
@Override @Override
public String getActiveUniform(int program, int index, IntBuffer size, Buffer type) { public String getActiveUniform(int program, int index, IntBuffer size, Buffer type) {
//return GLES20.glGetActiveUniform(program, index, bufsize, length, size, type, name); return androidGL.glGetActiveUniform(program, index, size, type);
throw new UnsupportedOperationException("missing implementation");
} }
@Override @Override
public void getAttachedShaders(int program, int maxcount, Buffer count, IntBuffer shaders) { public void getAttachedShaders(int program, int maxcount, Buffer count, IntBuffer shaders) {
throw new UnsupportedOperationException("missing implementation"); androidGL.glGetAttachedShaders(program, maxcount, count, shaders);
//GLES20.glGetAttachedShaders(program, maxcount, count, shaders);
} }
@Override @Override
@@ -204,8 +237,7 @@ public class AndroidGL implements GL {
@Override @Override
public void getBooleanv(int pname, Buffer params) { public void getBooleanv(int pname, Buffer params) {
throw new UnsupportedOperationException("missing implementation"); androidGL.glGetBooleanv(pname, params);
//GLES20.glGetBooleanv(pname, params);
} }
@Override @Override
@@ -260,11 +292,6 @@ public class AndroidGL implements GL {
GLES20.glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision); GLES20.glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision);
} }
@Override
public void getShaderSource(int shader, int bufsize, Buffer length, String source) {
throw new UnsupportedOperationException("missing implementation");
}
@Override @Override
public void getTexParameterfv(int target, int pname, FloatBuffer params) { public void getTexParameterfv(int target, int pname, FloatBuffer params) {
GLES20.glGetTexParameterfv(target, pname, params); GLES20.glGetTexParameterfv(target, pname, params);
@@ -308,8 +335,7 @@ public class AndroidGL implements GL {
@Override @Override
public void getVertexAttribPointerv(int index, int pname, Buffer pointer) { public void getVertexAttribPointerv(int index, int pname, Buffer pointer) {
//GLES20.glGetVertexAttribPointerv(index, pname, pointer); androidGL.glGetVertexAttribPointerv(index, pname, pointer);
throw new UnsupportedOperationException("missing implementation");
} }
@Override @Override
@@ -431,6 +457,11 @@ public class AndroidGL implements GL {
} }
@Override
public void uniform1fv(int location, int count, float[] v, int offset) {
GLES20.glUniform1fv(location, count, v, offset);
}
@Override @Override
public void uniform1i(int location, int x) { public void uniform1i(int location, int x) {
GLES20.glUniform1i(location, x); GLES20.glUniform1i(location, x);
@@ -443,6 +474,11 @@ public class AndroidGL implements GL {
} }
@Override
public void uniform1iv(int location, int count, int[] v, int offset) {
GLES20.glUniform1iv(location, count, v, offset);
}
@Override @Override
public void uniform2f(int location, float x, float y) { public void uniform2f(int location, float x, float y) {
GLES20.glUniform2f(location, x, y); GLES20.glUniform2f(location, x, y);
@@ -455,6 +491,11 @@ public class AndroidGL implements GL {
} }
@Override
public void uniform2fv(int location, int count, float[] v, int offset) {
GLES20.glUniform2fv(location, count, v, offset);
}
@Override @Override
public void uniform2i(int location, int x, int y) { public void uniform2i(int location, int x, int y) {
GLES20.glUniform2i(location, x, y); GLES20.glUniform2i(location, x, y);
@@ -467,6 +508,11 @@ public class AndroidGL implements GL {
} }
@Override
public void uniform2iv(int location, int count, int[] v, int offset) {
GLES20.glUniform2iv(location, count, v, offset);
}
@Override @Override
public void uniform3f(int location, float x, float y, float z) { public void uniform3f(int location, float x, float y, float z) {
GLES20.glUniform3f(location, x, y, z); GLES20.glUniform3f(location, x, y, z);
@@ -479,6 +525,11 @@ public class AndroidGL implements GL {
} }
@Override
public void uniform3fv(int location, int count, float[] v, int offset) {
GLES20.glUniform3fv(location, count, v, offset);
}
@Override @Override
public void uniform3i(int location, int x, int y, int z) { public void uniform3i(int location, int x, int y, int z) {
GLES20.glUniform3i(location, x, y, z); GLES20.glUniform3i(location, x, y, z);
@@ -491,6 +542,11 @@ public class AndroidGL implements GL {
} }
@Override
public void uniform3iv(int location, int count, int[] v, int offset) {
GLES20.glUniform3iv(location, count, v, offset);
}
@Override @Override
public void uniform4f(int location, float x, float y, float z, float w) { public void uniform4f(int location, float x, float y, float z, float w) {
GLES20.glUniform4f(location, x, y, z, w); GLES20.glUniform4f(location, x, y, z, w);
@@ -501,6 +557,11 @@ public class AndroidGL implements GL {
GLES20.glUniform4fv(location, count, v); GLES20.glUniform4fv(location, count, v);
} }
@Override
public void uniform4fv(int location, int count, float[] v, int offset) {
GLES20.glUniform4fv(location, count, v, offset);
}
@Override @Override
public void uniform4i(int location, int x, int y, int z, int w) { public void uniform4i(int location, int x, int y, int z, int w) {
GLES20.glUniform4i(location, x, y, z, w); GLES20.glUniform4i(location, x, y, z, w);
@@ -513,24 +574,44 @@ public class AndroidGL implements GL {
} }
@Override
public void uniform4iv(int location, int count, int[] v, int offset) {
GLES20.glUniform4iv(location, count, v, offset);
}
@Override @Override
public void uniformMatrix2fv(int location, int count, boolean transpose, FloatBuffer value) { public void uniformMatrix2fv(int location, int count, boolean transpose, FloatBuffer value) {
GLES20.glUniformMatrix2fv(location, count, transpose, value); GLES20.glUniformMatrix2fv(location, count, transpose, value);
} }
@Override
public void uniformMatrix2fv(int location, int count, boolean transpose, float[] value, int offset) {
GLES20.glUniformMatrix2fv(location, count, transpose, value, offset);
}
@Override @Override
public void uniformMatrix3fv(int location, int count, boolean transpose, FloatBuffer value) { public void uniformMatrix3fv(int location, int count, boolean transpose, FloatBuffer value) {
GLES20.glUniformMatrix3fv(location, count, transpose, value); GLES20.glUniformMatrix3fv(location, count, transpose, value);
} }
@Override
public void uniformMatrix3fv(int location, int count, boolean transpose, float[] value, int offset) {
GLES20.glUniformMatrix3fv(location, count, transpose, value, offset);
}
@Override @Override
public void uniformMatrix4fv(int location, int count, boolean transpose, FloatBuffer value) { public void uniformMatrix4fv(int location, int count, boolean transpose, FloatBuffer value) {
GLES20.glUniformMatrix4fv(location, count, transpose, value); GLES20.glUniformMatrix4fv(location, count, transpose, value);
} }
@Override
public void uniformMatrix4fv(int location, int count, boolean transpose, float[] value, int offset) {
GLES20.glUniformMatrix4fv(location, count, transpose, value, offset);
}
@Override @Override
public void useProgram(int program) { public void useProgram(int program) {
GLES20.glUseProgram(program); GLES20.glUseProgram(program);
@@ -656,15 +737,13 @@ public class AndroidGL implements GL {
@Override @Override
public void compressedTexImage2D(int target, int level, int internalformat, int width, public void compressedTexImage2D(int target, int level, int internalformat, int width,
int height, int border, int imageSize, Buffer data) { int height, int border, int imageSize, Buffer data) {
throw new UnsupportedOperationException("missing implementation"); androidGL.glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
} }
@Override @Override
public void compressedTexSubImage2D(int target, int level, int xoffset, int yoffset, public void compressedTexSubImage2D(int target, int level, int xoffset, int yoffset,
int width, int height, int format, int imageSize, Buffer data) { int width, int height, int format, int imageSize, Buffer data) {
throw new UnsupportedOperationException("missing implementation"); androidGL.glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
} }
@Override @Override
@@ -691,6 +770,11 @@ public class AndroidGL implements GL {
} }
@Override
public void deleteTexture(int texture) {
androidGL.glDeleteTexture(texture);
}
@Override @Override
public void depthFunc(int func) { public void depthFunc(int func) {
GLES20.glDepthFunc(func); GLES20.glDepthFunc(func);
@@ -757,6 +841,11 @@ public class AndroidGL implements GL {
} }
@Override
public int genTexture() {
return androidGL.glGenTexture();
}
@Override @Override
public int getError() { public int getError() {
return GLES20.glGetError(); return GLES20.glGetError();
@@ -837,8 +926,7 @@ public class AndroidGL implements GL {
@Override @Override
public void texSubImage2D(int target, int level, int xoffset, int yoffset, int width, public void texSubImage2D(int target, int level, int xoffset, int yoffset, int width,
int height, int format, int type, Buffer pixels) { int height, int format, int type, Buffer pixels) {
GLES20 GLES20.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
} }

View File

@@ -0,0 +1,878 @@
/*
* Copyright 2019 Gustl22
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*******************************************************************************
* Copyright 2014 See AUTHORS file.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package org.oscim.gdx;
import android.annotation.SuppressLint;
import android.opengl.GLES30;
import org.oscim.backend.GL30;
/**
* See https://github.com/libgdx/libgdx/blob/master/backends/gdx-backend-android/src/com/badlogic/gdx/backends/android/AndroidGL30.java
*/
@SuppressLint("NewApi")
public class AndroidGL30 extends AndroidGL implements GL30 {
@Override
public void readBuffer(int mode) {
GLES30.glReadBuffer(mode);
}
@Override
public void drawRangeElements(int mode, int start, int end, int count, int type, java.nio.Buffer indices) {
GLES30.glDrawRangeElements(mode, start, end, count, type, indices);
}
@Override
public void drawRangeElements(int mode, int start, int end, int count, int type, int offset) {
GLES30.glDrawRangeElements(mode, start, end, count, type, offset);
}
@Override
public void texImage3D(int target, int level, int internalformat, int width, int height, int depth, int border, int format,
int type, java.nio.Buffer pixels) {
if (pixels == null)
GLES30.glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, 0);
else
GLES30.glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, pixels);
}
@Override
public void texImage3D(int target, int level, int internalformat, int width, int height, int depth, int border, int format,
int type, int offset) {
GLES30.glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, offset);
}
@Override
public void texSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth,
int format, int type, java.nio.Buffer pixels) {
GLES30.glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
}
@Override
public void texSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth,
int format, int type, int offset) {
GLES30.glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, offset);
}
@Override
public void copyTexSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int x, int y, int width,
int height) {
GLES30.glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height);
}
//
// @Override
// public void compressedTexImage3D(int target, int level, int internalformat, int width, int height, int depth, int border, int
// imageSize, java.nio.Buffer data) {
// GLES30.glCompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data);
// }
//
// @Override
// public void compressedTexImage3D(int target, int level, int internalformat, int width, int height, int depth, int border, int
// imageSize, int offset) {
// GLES30.glCompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, offset);
// }
//
// @Override
// public void compressedTexSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int
// depth, int format, int imageSize, java.nio.Buffer data) {
// GLES30.glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
// }
//
// @Override
// public void compressedTexSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int
// depth, int format, int imageSize, int offset) {
// GLES30.glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, offset);
// }
@Override
public void genQueries(int n, int[] ids, int offset) {
GLES30.glGenQueries(n, ids, offset);
}
@Override
public void genQueries(int n, java.nio.IntBuffer ids) {
GLES30.glGenQueries(n, ids);
}
@Override
public void deleteQueries(int n, int[] ids, int offset) {
GLES30.glDeleteQueries(n, ids, offset);
}
@Override
public void deleteQueries(int n, java.nio.IntBuffer ids) {
GLES30.glDeleteQueries(n, ids);
}
@Override
public boolean isQuery(int id) {
return GLES30.glIsQuery(id);
}
@Override
public void beginQuery(int target, int id) {
GLES30.glBeginQuery(target, id);
}
@Override
public void endQuery(int target) {
GLES30.glEndQuery(target);
}
// @Override
// public void getQueryiv(int target, int pname, int[] params, int offset) {
// GLES30.glGetQueryiv(target, pname, params, offset);
// }
@Override
public void getQueryiv(int target, int pname, java.nio.IntBuffer params) {
GLES30.glGetQueryiv(target, pname, params);
}
// @Override
// public void getQueryObjectuiv(int id, int pname, int[] params, int offset) {
// GLES30.glGetQueryObjectuiv(id, pname, params, offset);
// }
@Override
public void getQueryObjectuiv(int id, int pname, java.nio.IntBuffer params) {
GLES30.glGetQueryObjectuiv(id, pname, params);
}
@Override
public boolean unmapBuffer(int target) {
return GLES30.glUnmapBuffer(target);
}
@Override
public java.nio.Buffer getBufferPointerv(int target, int pname) {
return GLES30.glGetBufferPointerv(target, pname);
}
// @Override
// public void drawBuffers(int n, int[] bufs, int offset) {
// GLES30.glDrawBuffers(n, bufs, offset);
// }
@Override
public void drawBuffers(int n, java.nio.IntBuffer bufs) {
GLES30.glDrawBuffers(n, bufs);
}
// @Override
// public void uniformMatrix2x3fv(int location, int count, boolean transpose, float[] value, int offset) {
// GLES30.glUniformMatrix2x3fv(location, count, transpose, value, offset);
// }
@Override
public void uniformMatrix2x3fv(int location, int count, boolean transpose, java.nio.FloatBuffer value) {
GLES30.glUniformMatrix2x3fv(location, count, transpose, value);
}
// @Override
// public void uniformMatrix3x2fv(int location, int count, boolean transpose, float[] value, int offset) {
// GLES30.glUniformMatrix3x2fv(location, count, transpose, value, offset);
// }
@Override
public void uniformMatrix3x2fv(int location, int count, boolean transpose, java.nio.FloatBuffer value) {
GLES30.glUniformMatrix3x2fv(location, count, transpose, value);
}
// @Override
// public void uniformMatrix2x4fv(int location, int count, boolean transpose, float[] value, int offset) {
// GLES30.glUniformMatrix2x4fv(location, count, transpose, value, offset);
// }
@Override
public void uniformMatrix2x4fv(int location, int count, boolean transpose, java.nio.FloatBuffer value) {
GLES30.glUniformMatrix2x4fv(location, count, transpose, value);
}
// @Override
// public void uniformMatrix4x2fv(int location, int count, boolean transpose, float[] value, int offset) {
// GLES30.glUniformMatrix4x2fv(location, count, transpose, value, offset);
// }
@Override
public void uniformMatrix4x2fv(int location, int count, boolean transpose, java.nio.FloatBuffer value) {
GLES30.glUniformMatrix4x2fv(location, count, transpose, value);
}
// @Override
// public void uniformMatrix3x4fv(int location, int count, boolean transpose, float[] value, int offset) {
// GLES30.glUniformMatrix3x4fv(location, count, transpose, value, offset);
// }
@Override
public void uniformMatrix3x4fv(int location, int count, boolean transpose, java.nio.FloatBuffer value) {
GLES30.glUniformMatrix3x4fv(location, count, transpose, value);
}
// @Override
// public void uniformMatrix4x3fv(int location, int count, boolean transpose, float[] value, int offset) {
// GLES30.glUniformMatrix4x3fv(location, count, transpose, value, offset);
// }
@Override
public void uniformMatrix4x3fv(int location, int count, boolean transpose, java.nio.FloatBuffer value) {
GLES30.glUniformMatrix4x3fv(location, count, transpose, value);
}
@Override
public void blitFramebuffer(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1,
int mask, int filter) {
GLES30.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
}
@Override
public void renderbufferStorageMultisample(int target, int samples, int internalformat, int width, int height) {
GLES30.glRenderbufferStorageMultisample(target, samples, internalformat, width, height);
}
@Override
public void framebufferTextureLayer(int target, int attachment, int texture, int level, int layer) {
GLES30.glFramebufferTextureLayer(target, attachment, texture, level, layer);
}
// @Override
// public java.nio.Buffer mapBufferRange(int target, int offset, int length, int access) {
// return GLES30.glMapBufferRange(target, offset, length, access);
// }
@Override
public void flushMappedBufferRange(int target, int offset, int length) {
GLES30.glFlushMappedBufferRange(target, offset, length);
}
@Override
public void bindVertexArray(int array) {
GLES30.glBindVertexArray(array);
}
@Override
public void deleteVertexArrays(int n, int[] arrays, int offset) {
GLES30.glDeleteVertexArrays(n, arrays, offset);
}
@Override
public void deleteVertexArrays(int n, java.nio.IntBuffer arrays) {
GLES30.glDeleteVertexArrays(n, arrays);
}
@Override
public void genVertexArrays(int n, int[] arrays, int offset) {
GLES30.glGenVertexArrays(n, arrays, offset);
}
@Override
public void genVertexArrays(int n, java.nio.IntBuffer arrays) {
GLES30.glGenVertexArrays(n, arrays);
}
@Override
public boolean isVertexArray(int array) {
return GLES30.glIsVertexArray(array);
}
// @Override
// public void getIntegeri_v(int target, int index, int[] data, int offset) {
// GLES30.glGetIntegeri_v(target, index, data, offset);
// }
// @Override
// public void getIntegeri_v(int target, int index, java.nio.IntBuffer data) {
// GLES30.glGetIntegeri_v(target, index, data);
// }
@Override
public void beginTransformFeedback(int primitiveMode) {
GLES30.glBeginTransformFeedback(primitiveMode);
}
@Override
public void endTransformFeedback() {
GLES30.glEndTransformFeedback();
}
@Override
public void bindBufferRange(int target, int index, int buffer, int offset, int size) {
GLES30.glBindBufferRange(target, index, buffer, offset, size);
}
@Override
public void bindBufferBase(int target, int index, int buffer) {
GLES30.glBindBufferBase(target, index, buffer);
}
@Override
public void transformFeedbackVaryings(int program, String[] varyings, int bufferMode) {
GLES30.glTransformFeedbackVaryings(program, varyings, bufferMode);
}
// @Override
// public void getTransformFeedbackVarying(int program, int index, int bufsize, int[] length, int lengthOffset, int[] size, int
// sizeOffset, int[] type, int typeOffset, byte[] name, int nameOffset) {
// GLES30.glGetTransformFeedbackVarying(program, index, bufsize, length, lengthOffset, size, sizeOffset, type, typeOffset, name,
// nameOffset);
// }
// @Override
// public void getTransformFeedbackVarying(int program, int index, int bufsize, java.nio.IntBuffer length, java.nio.IntBuffer
// size, java.nio.IntBuffer type, byte name) {
// GLES30.glGetTransformFeedbackVarying(program, index, bufsize, length, size, type, name);
// }
//
// @Override
// public String getTransformFeedbackVarying(int program, int index, int[] size, int sizeOffset, int[] type, int typeOffset) {
// return GLES30.glGetTransformFeedbackVarying(program, index, size, sizeOffset, type, typeOffset);
// }
//
// @Override
// public String getTransformFeedbackVarying(int program, int index, java.nio.IntBuffer size, java.nio.IntBuffer type) {
// return GLES30.glGetTransformFeedbackVarying(program, index, size, type);
// }
@Override
public void vertexAttribIPointer(int index, int size, int type, int stride, int offset) {
GLES30.glVertexAttribIPointer(index, size, type, stride, offset);
}
// @Override
// public void getVertexAttribIiv(int index, int pname, int[] params, int offset) {
// GLES30.glGetVertexAttribIiv(index, pname, params, offset);
// }
@Override
public void getVertexAttribIiv(int index, int pname, java.nio.IntBuffer params) {
GLES30.glGetVertexAttribIiv(index, pname, params);
}
// @Override
// public void getVertexAttribIuiv(int index, int pname, int[] params, int offset) {
// GLES30.glGetVertexAttribIuiv(index, pname, params, offset);
// }
@Override
public void getVertexAttribIuiv(int index, int pname, java.nio.IntBuffer params) {
GLES30.glGetVertexAttribIuiv(index, pname, params);
}
@Override
public void vertexAttribI4i(int index, int x, int y, int z, int w) {
GLES30.glVertexAttribI4i(index, x, y, z, w);
}
@Override
public void vertexAttribI4ui(int index, int x, int y, int z, int w) {
GLES30.glVertexAttribI4ui(index, x, y, z, w);
}
// @Override
// public void vertexAttribI4iv(int index, int[] v, int offset) {
// GLES30.glVertexAttribI4iv(index, v, offset);
// }
//
// @Override
// public void vertexAttribI4iv(int index, java.nio.IntBuffer v) {
// GLES30.glVertexAttribI4iv(index, v);
// }
//
// @Override
// public void vertexAttribI4uiv(int index, int[] v, int offset) {
// GLES30.glVertexAttribI4uiv(index, v, offset);
// }
//
// @Override
// public void vertexAttribI4uiv(int index, java.nio.IntBuffer v) {
// GLES30.glVertexAttribI4uiv(index, v);
// }
//
// @Override
// public void getUniformuiv(int program, int location, int[] params, int offset) {
// GLES30.glGetUniformuiv(program, location, params, offset);
// }
@Override
public void getUniformuiv(int program, int location, java.nio.IntBuffer params) {
GLES30.glGetUniformuiv(program, location, params);
}
@Override
public int getFragDataLocation(int program, String name) {
return GLES30.glGetFragDataLocation(program, name);
}
// @Override
// public void uniform1ui(int location, int v0) {
// GLES30.glUniform1ui(location, v0);
// }
//
// @Override
// public void uniform2ui(int location, int v0, int v1) {
// GLES30.glUniform2ui(location, v0, v1);
// }
//
// @Override
// public void uniform3ui(int location, int v0, int v1, int v2) {
// GLES30.glUniform3ui(location, v0, v1, v2);
// }
// @Override
// public void uniform4ui(int location, int v0, int v1, int v2, int v3) {
// GLES30.glUniform4ui(location, v0, v1, v2, v3);
// }
//
// @Override
// public void uniform1uiv(int location, int count, int[] value, int offset) {
// GLES30.glUniform1uiv(location, count, value, offset);
// }
@Override
public void uniform1uiv(int location, int count, java.nio.IntBuffer value) {
GLES30.glUniform1uiv(location, count, value);
}
// @Override
// public void uniform2uiv(int location, int count, int[] value, int offset) {
// GLES30.glUniform2uiv(location, count, value, offset);
// }
//
// @Override
// public void uniform2uiv(int location, int count, java.nio.IntBuffer value) {
// GLES30.glUniform2uiv(location, count, value);
// }
//
// @Override
// public void uniform3uiv(int location, int count, int[] value, int offset) {
// GLES30.glUniform3uiv(location, count, value, offset);
// }
@Override
public void uniform3uiv(int location, int count, java.nio.IntBuffer value) {
GLES30.glUniform3uiv(location, count, value);
}
// @Override
// public void uniform4uiv(int location, int count, int[] value, int offset) {
// GLES30.glUniform4uiv(location, count, value, offset);
// }
@Override
public void uniform4uiv(int location, int count, java.nio.IntBuffer value) {
GLES30.glUniform4uiv(location, count, value);
}
// @Override
// public void clearBufferiv(int buffer, int drawbuffer, int[] value, int offset) {
// GLES30.glClearBufferiv(buffer, drawbuffer, value, offset);
// }
@Override
public void clearBufferiv(int buffer, int drawbuffer, java.nio.IntBuffer value) {
GLES30.glClearBufferiv(buffer, drawbuffer, value);
}
// @Override
// public void clearBufferuiv(int buffer, int drawbuffer, int[] value, int offset) {
// GLES30.glClearBufferuiv(buffer, drawbuffer, value, offset);
// }
@Override
public void clearBufferuiv(int buffer, int drawbuffer, java.nio.IntBuffer value) {
GLES30.glClearBufferuiv(buffer, drawbuffer, value);
}
//
// @Override
// public void clearBufferfv(int buffer, int drawbuffer, float[] value, int offset) {
// GLES30.glClearBufferfv(buffer, drawbuffer, value, offset);
// }
@Override
public void clearBufferfv(int buffer, int drawbuffer, java.nio.FloatBuffer value) {
GLES30.glClearBufferfv(buffer, drawbuffer, value);
}
@Override
public void clearBufferfi(int buffer, int drawbuffer, float depth, int stencil) {
GLES30.glClearBufferfi(buffer, drawbuffer, depth, stencil);
}
@Override
public String getStringi(int name, int index) {
return GLES30.glGetStringi(name, index);
}
@Override
public void copyBufferSubData(int readTarget, int writeTarget, int readOffset, int writeOffset, int size) {
GLES30.glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
}
//
// @Override
// public void getUniformIndices(int program, String[] uniformNames, int[] uniformIndices, int uniformIndicesOffset) {
// GLES30.glGetUniformIndices(program, uniformNames, uniformIndices, uniformIndicesOffset);
// }
@Override
public void getUniformIndices(int program, String[] uniformNames, java.nio.IntBuffer uniformIndices) {
GLES30.glGetUniformIndices(program, uniformNames, uniformIndices);
}
// @Override
// public void getActiveUniformsiv(int program, int uniformCount, int[] uniformIndices, int uniformIndicesOffset, int pname,
// int[] params, int paramsOffset) {
// GLES30.glGetActiveUniformsiv(program, uniformCount, uniformIndices, uniformIndicesOffset, pname, params, paramsOffset);
// }
@Override
public void getActiveUniformsiv(int program, int uniformCount, java.nio.IntBuffer uniformIndices, int pname,
java.nio.IntBuffer params) {
GLES30.glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params);
}
@Override
public int getUniformBlockIndex(int program, String uniformBlockName) {
return GLES30.glGetUniformBlockIndex(program, uniformBlockName);
}
//
// @Override
// public void getActiveUniformBlockiv(int program, int uniformBlockIndex, int pname, int[] params, int offset) {
// GLES30.glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params, offset);
// }
@Override
public void getActiveUniformBlockiv(int program, int uniformBlockIndex, int pname, java.nio.IntBuffer params) {
GLES30.glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params);
}
//
// @Override
// public void getActiveUniformBlockName(int program, int uniformBlockIndex, int bufSize, int[] length, int lengthOffset, byte[]
// uniformBlockName, int uniformBlockNameOffset) {
// GLES30.glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, lengthOffset, uniformBlockName,
// uniformBlockNameOffset);
// }
@Override
public void getActiveUniformBlockName(int program, int uniformBlockIndex, java.nio.Buffer length,
java.nio.Buffer uniformBlockName) {
GLES30.glGetActiveUniformBlockName(program, uniformBlockIndex, length, uniformBlockName);
}
@Override
public String getActiveUniformBlockName(int program, int uniformBlockIndex) {
return GLES30.glGetActiveUniformBlockName(program, uniformBlockIndex);
}
@Override
public void uniformBlockBinding(int program, int uniformBlockIndex, int uniformBlockBinding) {
GLES30.glUniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);
}
@Override
public void drawArraysInstanced(int mode, int first, int count, int instanceCount) {
GLES30.glDrawArraysInstanced(mode, first, count, instanceCount);
}
// @Override
// public void drawElementsInstanced(int mode, int count, int type, java.nio.Buffer indices, int instanceCount) {
// GLES30.glDrawElementsInstanced(mode, count, type, indices, instanceCount);
// }
@Override
public void drawElementsInstanced(int mode, int count, int type, int indicesOffset, int instanceCount) {
GLES30.glDrawElementsInstanced(mode, count, type, indicesOffset, instanceCount);
}
// @Override
// public long fenceSync(int condition, int flags) {
// return GLES30.glFenceSync(condition, flags);
// }
//
// @Override
// public boolean isSync(long sync) {
// return GLES30.glIsSync(sync);
// }
//
// @Override
// public void deleteSync(long sync) {
// GLES30.glDeleteSync(sync);
// }
//
// @Override
// public int clientWaitSync(long sync, int flags, long timeout) {
// return GLES30.glClientWaitSync(sync, flags, timeout);
// }
// @Override
// public void waitSync(long sync, int flags, long timeout) {
// GLES30.glWaitSync(sync, flags, timeout);
// }
//
// @Override
// public void getInteger64v(int pname, long[] params, int offset) {
// GLES30.glGetInteger64v(pname, params, offset);
// }
@Override
public void getInteger64v(int pname, java.nio.LongBuffer params) {
GLES30.glGetInteger64v(pname, params);
}
// @Override
// public void getSynciv(long sync, int pname, int bufSize, int[] length, int lengthOffset, int[] values, int valuesOffset) {
// GLES30.glGetSynciv(sync, pname, bufSize, length, lengthOffset, values, valuesOffset);
// }
//
// @Override
// public void getSynciv(long sync, int pname, int bufSize, java.nio.IntBuffer length, java.nio.IntBuffer values) {
// GLES30.glGetSynciv(sync, pname, bufSize, length, values);
// }
//
// @Override
// public void getInteger64i_v(int target, int index, long[] data, int offset) {
// GLES30.glGetInteger64i_v(target, index, data, offset);
// }
//
// @Override
// public void getInteger64i_v(int target, int index, java.nio.LongBuffer data) {
// GLES30.glGetInteger64i_v(target, index, data);
// }
//
// @Override
// public void getBufferParameteri64v(int target, int pname, long[] params, int offset) {
// GLES30.glGetBufferParameteri64v(target, pname, params, offset);
// }
@Override
public void getBufferParameteri64v(int target, int pname, java.nio.LongBuffer params) {
GLES30.glGetBufferParameteri64v(target, pname, params);
}
@Override
public void genSamplers(int count, int[] samplers, int offset) {
GLES30.glGenSamplers(count, samplers, offset);
}
@Override
public void genSamplers(int count, java.nio.IntBuffer samplers) {
GLES30.glGenSamplers(count, samplers);
}
@Override
public void deleteSamplers(int count, int[] samplers, int offset) {
GLES30.glDeleteSamplers(count, samplers, offset);
}
@Override
public void deleteSamplers(int count, java.nio.IntBuffer samplers) {
GLES30.glDeleteSamplers(count, samplers);
}
@Override
public boolean isSampler(int sampler) {
return GLES30.glIsSampler(sampler);
}
@Override
public void bindSampler(int unit, int sampler) {
GLES30.glBindSampler(unit, sampler);
}
@Override
public void samplerParameteri(int sampler, int pname, int param) {
GLES30.glSamplerParameteri(sampler, pname, param);
}
//
// @Override
// public void samplerParameteriv(int sampler, int pname, int[] param, int offset) {
// GLES30.glSamplerParameteriv(sampler, pname, param, offset);
// }
@Override
public void samplerParameteriv(int sampler, int pname, java.nio.IntBuffer param) {
GLES30.glSamplerParameteriv(sampler, pname, param);
}
@Override
public void samplerParameterf(int sampler, int pname, float param) {
GLES30.glSamplerParameterf(sampler, pname, param);
}
// @Override
// public void samplerParameterfv(int sampler, int pname, float[] param, int offset) {
// GLES30.glSamplerParameterfv(sampler, pname, param, offset);
// }
@Override
public void samplerParameterfv(int sampler, int pname, java.nio.FloatBuffer param) {
GLES30.glSamplerParameterfv(sampler, pname, param);
}
//
// @Override
// public void getSamplerParameteriv(int sampler, int pname, int[] params, int offset) {
// GLES30.glGetSamplerParameteriv(sampler, pname, params, offset);
// }
@Override
public void getSamplerParameteriv(int sampler, int pname, java.nio.IntBuffer params) {
GLES30.glGetSamplerParameteriv(sampler, pname, params);
}
// @Override
// public void getSamplerParameterfv(int sampler, int pname, float[] params, int offset) {
// GLES30.glGetSamplerParameterfv(sampler, pname, params, offset);
// }
@Override
public void getSamplerParameterfv(int sampler, int pname, java.nio.FloatBuffer params) {
GLES30.glGetSamplerParameterfv(sampler, pname, params);
}
@Override
public void vertexAttribDivisor(int index, int divisor) {
GLES30.glVertexAttribDivisor(index, divisor);
}
@Override
public void bindTransformFeedback(int target, int id) {
GLES30.glBindTransformFeedback(target, id);
}
@Override
public void deleteTransformFeedbacks(int n, int[] ids, int offset) {
GLES30.glDeleteTransformFeedbacks(n, ids, offset);
}
@Override
public void deleteTransformFeedbacks(int n, java.nio.IntBuffer ids) {
GLES30.glDeleteTransformFeedbacks(n, ids);
}
@Override
public void genTransformFeedbacks(int n, int[] ids, int offset) {
GLES30.glGenTransformFeedbacks(n, ids, offset);
}
@Override
public void genTransformFeedbacks(int n, java.nio.IntBuffer ids) {
GLES30.glGenTransformFeedbacks(n, ids);
}
@Override
public boolean isTransformFeedback(int id) {
return GLES30.glIsTransformFeedback(id);
}
@Override
public void pauseTransformFeedback() {
GLES30.glPauseTransformFeedback();
}
@Override
public void resumeTransformFeedback() {
GLES30.glResumeTransformFeedback();
}
// @Override
// public void getProgramBinary(int program, int bufSize, int[] length, int lengthOffset, int[] binaryFormat, int
// binaryFormatOffset, java.nio.Buffer binary) {
// GLES30.glGetProgramBinary(program, bufSize, length, lengthOffset, binaryFormat, binaryFormatOffset, binary);
// }
//
// @Override
// public void getProgramBinary(int program, int bufSize, java.nio.IntBuffer length, java.nio.IntBuffer binaryFormat,
// java.nio.Buffer binary) {
// GLES30.glGetProgramBinary(program, bufSize, length, binaryFormat, binary);
// }
// @Override
// public void programBinary(int program, int binaryFormat, java.nio.Buffer binary, int length) {
// GLES30.glProgramBinary(program, binaryFormat, binary, length);
// }
@Override
public void programParameteri(int program, int pname, int value) {
GLES30.glProgramParameteri(program, pname, value);
}
// @Override
// public void invalidateFramebuffer(int target, int numAttachments, int[] attachments, int offset) {
// GLES30.glInvalidateFramebuffer(target, numAttachments, attachments, offset);
// }
@Override
public void invalidateFramebuffer(int target, int numAttachments, java.nio.IntBuffer attachments) {
GLES30.glInvalidateFramebuffer(target, numAttachments, attachments);
}
//
// @Override
// public void invalidateSubFramebuffer(int target, int numAttachments, int[] attachments, int offset, int x, int y, int width,
// int height) {
// GLES30.glInvalidateSubFramebuffer(target, numAttachments, attachments, offset, x, y, width, height);
// }
@Override
public void invalidateSubFramebuffer(int target, int numAttachments, java.nio.IntBuffer attachments, int x, int y,
int width, int height) {
GLES30.glInvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height);
}
// @Override
// public void texStorage2D(int target, int levels, int internalformat, int width, int height) {
// GLES30.glTexStorage2D(target, levels, internalformat, width, height);
// }
// @Override
// public void texStorage3D(int target, int levels, int internalformat, int width, int height, int depth) {
// GLES30.glTexStorage3D(target, levels, internalformat, width, height, depth);
// }
//
// @Override
// public void getInternalformativ(int target, int internalformat, int pname, int bufSize, int[] params, int offset) {
// GLES30.glGetInternalformativ(target, internalformat, pname, bufSize, params, offset);
// }
//
// @Override
// public void getInternalformativ(int target, int internalformat, int pname, int bufSize, java.nio.IntBuffer params) {
// GLES30.glGetInternalformativ(target, internalformat, pname, bufSize, params);
// }
}

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<manifest package="org.oscim.android.mvt" />

View File

@@ -0,0 +1,55 @@
apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
dependencies {
api project(':vtm-android')
api project(':vtm-mvt')
}
android {
compileSdkVersion androidCompileSdk()
buildToolsVersion "$androidBuildVersionTools"
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
defaultConfig {
versionCode project.versionCode()
versionName project.versionName()
minSdkVersion androidMinSdk()
targetSdkVersion androidTargetSdk()
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
}
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
lintOptions { abortOnError false }
}
android.libraryVariants.all { variant ->
def name = variant.buildType.name
if (name == "debug")
return
def jar = project.tasks.create "jar${name.capitalize()}", Jar
jar.dependsOn variant.javaCompileProvider
jar.exclude '**/BuildConfig.class'
jar.exclude '**/R.class'
jar.exclude '**/R$*.class'
jar.from variant.javaCompileProvider.get().destinationDir
artifacts.add('archives', jar)
}
if (project.hasProperty("SONATYPE_USERNAME")) {
afterEvaluate {
project.apply from: "${rootProject.projectDir}/deploy.gradle"
}
}

View File

@@ -0,0 +1,144 @@
/*
* Copyright 2019 Kostas Tzounopoulos
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.oscim.android.mvt.tiling.source.mbtiles;
import android.database.Cursor;
import org.oscim.android.tiling.source.mbtiles.MBTilesTileDataSource;
import org.oscim.android.tiling.source.mbtiles.MBTilesUnsupportedException;
import org.oscim.core.MercatorProjection;
import org.oscim.layers.tile.MapTile;
import org.oscim.tiling.ITileDataSink;
import org.oscim.tiling.OverzoomDataSink;
import org.oscim.tiling.QueryResult;
import org.oscim.tiling.source.mvt.TileDecoder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.zip.GZIPInputStream;
/**
* A tile data source for MBTiles vector databases.
*/
public class MBTilesMvtTileDataSource extends MBTilesTileDataSource {
private static final Logger log = LoggerFactory.getLogger(MBTilesMvtTileDataSource.class);
private static final List<String> SUPPORTED_FORMATS = Collections.singletonList("pbf");
private static final String WHERE_FORMAT = "zoom_level=%d AND tile_column=%d AND tile_row=%d";
private final String mLanguage;
private final ThreadLocal<TileDecoder> mThreadLocalDecoders = new ThreadLocal<TileDecoder>() {
@Override
protected TileDecoder initialValue() {
return new TileDecoder(mLanguage);
}
};
/**
* Create a tile data source for MBTiles vector databases.
*
* @param path the path to the MBTiles database.
* @param language the language to use when rendering the MBTiles.
*/
public MBTilesMvtTileDataSource(String path, String language) {
super(path);
mLanguage = language != null ? language : "en";
try {
assertDatabaseFormat();
} catch (MBTilesUnsupportedException e) {
log.error("Invalid MBTiles database", e);
}
}
@Override
public void cancel() {
// do nothing
}
@Override
public void dispose() {
if (mDatabase != null && mDatabase.isOpen())
mDatabase.close();
}
@Override
public List<String> getSupportedFormats() {
return SUPPORTED_FORMATS;
}
private MapTile mapTile(Cursor cursor) {
int tileX = cursor.getInt(cursor.getColumnIndexOrThrow("tile_column"));
int tileY = cursor.getInt(cursor.getColumnIndexOrThrow("tile_row"));
int zoomLevel = cursor.getInt(cursor.getColumnIndexOrThrow("zoom_level"));
long tmsTileY = MercatorProjection.tileYToTMS(tileY, (byte) zoomLevel);
return new MapTile(tileX, (int) tmsTileY, zoomLevel);
}
/**
* Overzoom on the DB layer: generate a query for all tiles with lower zoomLevel than the one requested.
*/
private String overzoomQuery(MapTile tile) {
long tmsTileY = MercatorProjection.tileYToTMS(tile.tileY, tile.zoomLevel);
StringBuilder sb = new StringBuilder();
sb.append("(");
for (int zoomLevel = tile.zoomLevel - 1; zoomLevel > 0; zoomLevel--) {
int diff = tile.zoomLevel - zoomLevel;
sb.append(String.format(Locale.US, WHERE_FORMAT, zoomLevel, tile.tileX >> diff, tmsTileY >> diff));
if (zoomLevel > 1) // Not the last iteration
sb.append(") OR (");
}
sb.append(")");
return String.format(SELECT_TILES_FORMAT, sb.toString());
}
@Override
public void query(MapTile requestTile, ITileDataSink requestDataSink) {
Cursor cursor = null;
ITileDataSink responseDataSink = requestDataSink;
try {
long tmsTileY = MercatorProjection.tileYToTMS(requestTile.tileY, requestTile.zoomLevel);
cursor = mDatabase.rawQuery(String.format(SELECT_TILES_FORMAT, String.format(Locale.US, WHERE_FORMAT, requestTile.zoomLevel, requestTile.tileX, tmsTileY)), null);
if (cursor.getCount() == 0) {
cursor.close();
cursor = mDatabase.rawQuery(overzoomQuery(requestTile), null);
}
if (cursor.moveToFirst()) {
byte[] bytes = cursor.getBlob(cursor.getColumnIndexOrThrow("tile_data"));
MapTile responseTile = mapTile(cursor);
if (requestTile.zoomLevel != responseTile.zoomLevel)
responseDataSink = new OverzoomDataSink(requestDataSink, responseTile, requestTile);
boolean success = mThreadLocalDecoders.get().decode(responseTile, responseDataSink, new GZIPInputStream(new ByteArrayInputStream(bytes)));
responseDataSink.completed(success ? QueryResult.SUCCESS : QueryResult.FAILED);
} else
responseDataSink.completed(QueryResult.TILE_NOT_FOUND);
} catch (IOException e) {
responseDataSink.completed(QueryResult.FAILED);
} finally {
if (cursor != null)
cursor.close();
}
}
}

View File

@@ -0,0 +1,42 @@
/*
* Copyright 2019 Kostas Tzounopoulos
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.oscim.android.mvt.tiling.source.mbtiles;
import org.oscim.android.tiling.source.mbtiles.MBTilesTileSource;
/**
* A tile source for MBTiles vector databases.
*/
public class MBTilesMvtTileSource extends MBTilesTileSource {
/**
* Create a tile source for MBTiles vector databases.
*
* @param path the path to the MBTiles database.
*/
public MBTilesMvtTileSource(String path) {
this(path, null);
}
/**
* Create a tile source for MBTiles vector databases.
*
* @param path the path to the MBTiles database.
* @param language the language to use when rendering the MBTiles.
*/
public MBTilesMvtTileSource(String path, String language) {
super(new MBTilesMvtTileDataSource(path, language));
}
}

View File

@@ -3,7 +3,7 @@ apply plugin: 'com.github.dcendents.android-maven'
dependencies { dependencies {
api project(':vtm') api project(':vtm')
api 'com.caverock:androidsvg:1.3' api 'com.caverock:androidsvg:1.4'
} }
android { android {
@@ -16,8 +16,8 @@ android {
} }
defaultConfig { defaultConfig {
versionCode versionCode() versionCode project.versionCode()
versionName versionName() versionName project.versionName()
minSdkVersion androidMinSdk() minSdkVersion androidMinSdk()
targetSdkVersion androidTargetSdk() targetSdkVersion androidTargetSdk()
} }
@@ -26,7 +26,6 @@ android {
main { main {
manifest.srcFile 'AndroidManifest.xml' manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src'] java.srcDirs = ['src']
resources.srcDirs = ['src']
} }
debug.setRoot('build-types/debug') debug.setRoot('build-types/debug')
release.setRoot('build-types/release') release.setRoot('build-types/release')
@@ -41,11 +40,11 @@ android.libraryVariants.all { variant ->
return return
def jar = project.tasks.create "jar${name.capitalize()}", Jar def jar = project.tasks.create "jar${name.capitalize()}", Jar
jar.dependsOn variant.javaCompiler jar.dependsOn variant.javaCompileProvider
jar.exclude '**/BuildConfig.class' jar.exclude '**/BuildConfig.class'
jar.exclude '**/R.class' jar.exclude '**/R.class'
jar.exclude '**/R$*.class' jar.exclude '**/R$*.class'
jar.from variant.javaCompiler.destinationDir jar.from variant.javaCompileProvider.get().destinationDir
artifacts.add('archives', jar) artifacts.add('archives', jar)
file('natives').eachDir() { dir -> file('natives').eachDir() { dir ->

View File

@@ -1,7 +1,7 @@
/* /*
* Copyright 2012 Hannes Janetzek * Copyright 2012 Hannes Janetzek
* Copyright 2016-2018 devemux86 * Copyright 2016-2020 devemux86
* Copyright 2018 Gustl22 * Copyright 2018-2019 Gustl22
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@@ -28,13 +28,16 @@ import android.util.DisplayMetrics;
import android.view.Display; import android.view.Display;
import android.view.GestureDetector; import android.view.GestureDetector;
import android.view.WindowManager; import android.view.WindowManager;
import org.oscim.android.canvas.AndroidGraphics; import org.oscim.android.canvas.AndroidGraphics;
import org.oscim.android.gl.AndroidGL; import org.oscim.android.gl.AndroidGL;
import org.oscim.android.gl.AndroidGL30;
import org.oscim.android.gl.GlConfigChooser; import org.oscim.android.gl.GlConfigChooser;
import org.oscim.android.gl.GlContextFactory;
import org.oscim.android.input.AndroidMotionEvent; import org.oscim.android.input.AndroidMotionEvent;
import org.oscim.android.input.GestureHandler; import org.oscim.android.input.GestureHandler;
import org.oscim.backend.CanvasAdapter; import org.oscim.backend.CanvasAdapter;
import org.oscim.backend.DateTime;
import org.oscim.backend.DateTimeAdapter;
import org.oscim.backend.GLAdapter; import org.oscim.backend.GLAdapter;
import org.oscim.core.Tile; import org.oscim.core.Tile;
import org.oscim.map.Map; import org.oscim.map.Map;
@@ -45,6 +48,8 @@ import org.slf4j.LoggerFactory;
import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10; import javax.microedition.khronos.opengles.GL10;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/** /**
* The MapView, * The MapView,
@@ -57,8 +62,24 @@ public class MapView extends GLSurfaceView {
static final Logger log = LoggerFactory.getLogger(MapView.class); static final Logger log = LoggerFactory.getLogger(MapView.class);
private static final Pattern GL_PATTERN = Pattern.compile("OpenGL ES (\\d(\\.\\d){0,2})");
/**
* OpenGL ES 2.0 default on Android for performance / stability.
* Any larger not available versions fall back to OpenGL ES 2.0.
*/
public static double OPENGL_VERSION = 2.0;
private static void init() { private static void init() {
System.loadLibrary("vtm-jni"); if (Parameters.THREADED_INIT)
new Thread(new Runnable() {
@Override
public void run() {
System.loadLibrary("vtm-jni");
}
}).start();
else
System.loadLibrary("vtm-jni");
} }
protected AndroidMap mMap; protected AndroidMap mMap;
@@ -88,10 +109,10 @@ public class MapView extends GLSurfaceView {
/* Setup android backend */ /* Setup android backend */
AndroidGraphics.init(); AndroidGraphics.init();
AndroidAssets.init(context); AndroidAssets.init(context);
GLAdapter.init(new AndroidGL()); DateTimeAdapter.init(new DateTime());
DisplayMetrics metrics = getResources().getDisplayMetrics(); DisplayMetrics metrics = getResources().getDisplayMetrics();
CanvasAdapter.dpi = (int) (metrics.scaledDensity * CanvasAdapter.DEFAULT_DPI); CanvasAdapter.dpi = (int) (metrics.density * CanvasAdapter.DEFAULT_DPI);
if (!Parameters.CUSTOM_TILE_SIZE) if (!Parameters.CUSTOM_TILE_SIZE)
Tile.SIZE = Tile.calculateTileSize(); Tile.SIZE = Tile.calculateTileSize();
@@ -113,8 +134,21 @@ public class MapView extends GLSurfaceView {
mMap = new AndroidMap(this); mMap = new AndroidMap(this);
/* Initialize Renderer */ /* Initialize Renderer */
if (OPENGL_VERSION == 2.0)
setEGLContextClientVersion(2);
else {
// OpenGL ES 3.0 is supported with Android 4.3 (API level 18) and higher
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
try {
setEGLContextFactory(new GlContextFactory());
} catch (Throwable t) {
log.error("Falling back to GLES 2", t);
setEGLContextClientVersion(2);
}
} else
setEGLContextClientVersion(2);
}
setEGLConfigChooser(new GlConfigChooser()); setEGLConfigChooser(new GlConfigChooser());
setEGLContextClientVersion(2);
if (GLAdapter.debug) if (GLAdapter.debug)
setDebugFlags(GLSurfaceView.DEBUG_CHECK_GL_ERROR setDebugFlags(GLSurfaceView.DEBUG_CHECK_GL_ERROR
@@ -139,10 +173,12 @@ public class MapView extends GLSurfaceView {
mMap.destroy(); mMap.destroy();
} }
@Override
public void onPause() { public void onPause() {
mMap.pause(true); mMap.pause(true);
} }
@Override
public void onResume() { public void onResume() {
mMap.pause(false); mMap.pause(false);
} }
@@ -222,6 +258,11 @@ public class MapView extends GLSurfaceView {
} }
}; };
@Override
public void updateMap() {
updateMap(true);
}
@Override @Override
public void updateMap(boolean redraw) { public void updateMap(boolean redraw) {
synchronized (mRedrawCb) { synchronized (mRedrawCb) {
@@ -284,8 +325,63 @@ public class MapView extends GLSurfaceView {
super(map); super(map);
} }
/**
* @return GL version as [major, minor, release]
*/
private int[] extractVersion(String versionString) {
int[] version = new int[3];
Matcher matcher = GL_PATTERN.matcher(versionString);
if (matcher.find()) {
String[] split = matcher.group(1).split("\\.");
version[0] = parseInt(split[0], 2);
version[1] = split.length < 2 ? 0 : parseInt(split[1], 0);
version[2] = split.length < 3 ? 0 : parseInt(split[2], 0);
} else {
log.error("Invalid version string: " + versionString);
version[0] = 2;
version[1] = 0;
version[2] = 0;
}
return version;
}
/**
* Forgiving parsing of GL major, minor and release versions as some manufacturers don't adhere to spec.
**/
private int parseInt(String value, int defaultValue) {
try {
return Integer.parseInt(value);
} catch (NumberFormatException e) {
log.error("Error parsing number: " + value + ", assuming: " + defaultValue);
return defaultValue;
}
}
@Override @Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) { public void onSurfaceCreated(GL10 gl, EGLConfig config) {
if (OPENGL_VERSION == 2.0)
GLAdapter.init(new AndroidGL());
else {
try {
// Create a minimum supported OpenGL ES context, then check:
String versionString = gl.glGetString(GL10.GL_VERSION);
log.info("Version: " + versionString);
// The version format is displayed as: "OpenGL ES <major>.<minor>"
// followed by optional content provided by the implementation.
// OpenGL<space>ES<space><version number><space><vendor-specific information>.
int[] version = extractVersion(versionString);
int majorVersion = Math.min(version[0], (int) OPENGL_VERSION);
if (majorVersion >= 3)
GLAdapter.init(new AndroidGL30());
else
GLAdapter.init(new AndroidGL());
} catch (Throwable t) {
log.error("Falling back to GLES 2", t);
GLAdapter.init(new AndroidGL());
}
}
super.onSurfaceCreated(); super.onSurfaceCreated();
} }

View File

@@ -42,8 +42,8 @@ import java.util.ArrayList;
public class TileCache implements ITileCache { public class TileCache implements ITileCache {
final static org.slf4j.Logger log = LoggerFactory.getLogger(TileCache.class); static final org.slf4j.Logger log = LoggerFactory.getLogger(TileCache.class);
final static boolean dbg = false; static final boolean dbg = false;
class CacheTileReader implements TileReader { class CacheTileReader implements TileReader {
final InputStream mInputStream; final InputStream mInputStream;

View File

@@ -1,7 +1,7 @@
/* /*
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016 Longri * Copyright 2016 Longri
* Copyright 2016 devemux86 * Copyright 2016-2018 devemux86
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@@ -23,6 +23,8 @@ import android.graphics.BitmapFactory;
import android.opengl.GLES20; import android.opengl.GLES20;
import android.opengl.GLUtils; import android.opengl.GLUtils;
import org.oscim.backend.CanvasAdapter;
import org.oscim.utils.GraphicUtils;
import org.oscim.utils.IOUtils; import org.oscim.utils.IOUtils;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
@@ -31,7 +33,7 @@ import java.io.InputStream;
import static android.graphics.Bitmap.Config.ARGB_8888; import static android.graphics.Bitmap.Config.ARGB_8888;
public class AndroidBitmap implements org.oscim.backend.canvas.Bitmap { public class AndroidBitmap implements org.oscim.backend.canvas.Bitmap {
final Bitmap mBitmap; Bitmap mBitmap;
public AndroidBitmap(InputStream inputStream) { public AndroidBitmap(InputStream inputStream) {
Bitmap bitmap = BitmapFactory.decodeStream(inputStream); Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
@@ -43,6 +45,12 @@ public class AndroidBitmap implements org.oscim.backend.canvas.Bitmap {
mBitmap = bitmap; mBitmap = bitmap;
} }
public AndroidBitmap(InputStream inputStream, int width, int height, int percent) {
this(inputStream);
float[] newSize = GraphicUtils.imageSize(getWidth(), getHeight(), CanvasAdapter.getScale(), width, height, percent);
scaleTo((int) newSize[0], (int) newSize[1]);
}
@Override @Override
public boolean isValid() { public boolean isValid() {
return mBitmap != null; return mBitmap != null;
@@ -117,4 +125,17 @@ public class AndroidBitmap implements org.oscim.backend.canvas.Bitmap {
IOUtils.closeQuietly(outputStream); IOUtils.closeQuietly(outputStream);
} }
} }
@Override
public void scaleTo(int width, int height) {
if (getWidth() != width || getHeight() != height) {
// The effect of the filter argument to createScaledBitmap is not well documented in the
// official android docs, but according to
// http://stackoverflow.com/questions/2895065/what-does-the-filter-parameter-to-createscaledbitmap-do
// passing true results in smoother edges, less pixelation.
// If smoother corners improve the readability of map labels is perhaps debatable.
android.graphics.Bitmap scaledBitmap = android.graphics.Bitmap.createScaledBitmap(mBitmap, width, height, true);
mBitmap = scaledBitmap;
}
}
} }

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016-2017 devemux86 * Copyright 2016-2019 devemux86
* Copyright 2017 nebular * Copyright 2017 nebular
* Copyright 2017 Longri * Copyright 2017 Longri
* *
@@ -21,8 +21,8 @@ package org.oscim.android.canvas;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.PorterDuff; import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.RectF; import android.graphics.RectF;
import org.oscim.backend.canvas.Bitmap; import org.oscim.backend.canvas.Bitmap;
import org.oscim.backend.canvas.Canvas; import org.oscim.backend.canvas.Canvas;
import org.oscim.backend.canvas.Paint; import org.oscim.backend.canvas.Paint;
@@ -93,6 +93,7 @@ public class AndroidCanvas implements Canvas {
RectF rect = new RectF(x, y, x + width, y + height); RectF rect = new RectF(x, y, x + width, y + height);
android.graphics.Paint paint = new android.graphics.Paint(); android.graphics.Paint paint = new android.graphics.Paint();
paint.setColor(color); paint.setColor(color);
paint.setXfermode(new PorterDuffXfermode(color == Color.TRANSPARENT ? PorterDuff.Mode.CLEAR : PorterDuff.Mode.SRC_OVER));
canvas.drawRect(rect, paint); canvas.drawRect(rect, paint);
} }

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright 2010, 2011, 2012 mapsforge.org * Copyright 2010, 2011, 2012 mapsforge.org
* Copyright 2016-2017 devemux86 * Copyright 2016-2019 devemux86
* Copyright 2017 Longri * Copyright 2017 Longri
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
@@ -22,7 +22,7 @@ import android.content.res.Resources;
import android.graphics.Bitmap.Config; import android.graphics.Bitmap.Config;
import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Build;
import org.oscim.backend.CanvasAdapter; import org.oscim.backend.CanvasAdapter;
import org.oscim.backend.Platform; import org.oscim.backend.Platform;
import org.oscim.backend.canvas.Bitmap; import org.oscim.backend.canvas.Bitmap;
@@ -58,6 +58,11 @@ public final class AndroidGraphics extends CanvasAdapter {
return new AndroidBitmap(inputStream); return new AndroidBitmap(inputStream);
} }
@Override
public Bitmap decodeBitmapImpl(InputStream inputStream, int width, int height, int percent) {
return new AndroidBitmap(inputStream, width, height, percent);
}
@Override @Override
public Bitmap decodeSvgBitmapImpl(InputStream inputStream, int width, int height, int percent) throws IOException { public Bitmap decodeSvgBitmapImpl(InputStream inputStream, int width, int height, int percent) throws IOException {
return new AndroidSvgBitmap(inputStream, width, height, percent); return new AndroidSvgBitmap(inputStream, width, height, percent);
@@ -85,7 +90,7 @@ public final class AndroidGraphics extends CanvasAdapter {
//------------------------------------- //-------------------------------------
public static Bitmap drawableToBitmap(Drawable drawable) { public static Bitmap drawableToBitmap(Drawable drawable) {
if (drawable instanceof BitmapDrawable) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P && drawable instanceof BitmapDrawable) {
return new AndroidBitmap(((BitmapDrawable) drawable).getBitmap()); return new AndroidBitmap(((BitmapDrawable) drawable).getBitmap());
} }

View File

@@ -1,7 +1,7 @@
/* /*
* Copyright 2010, 2011, 2012 mapsforge.org * Copyright 2010, 2011, 2012 mapsforge.org
* Copyright 2013-2014 Ludwig M Brinckmann * Copyright 2013-2014 Ludwig M Brinckmann
* Copyright 2014-2017 devemux86 * Copyright 2014-2018 devemux86
* *
* This program is free software: you can redistribute it and/or modify it under the * This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software * terms of the GNU Lesser General Public License as published by the Free Software
@@ -24,6 +24,7 @@ import android.graphics.RectF;
import com.caverock.androidsvg.SVG; import com.caverock.androidsvg.SVG;
import org.oscim.backend.CanvasAdapter; import org.oscim.backend.CanvasAdapter;
import org.oscim.utils.GraphicUtils;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@@ -41,34 +42,12 @@ public class AndroidSvgBitmap extends AndroidBitmap {
double scale = scaleFactor / Math.sqrt((picture.getHeight() * picture.getWidth()) / defaultSize); double scale = scaleFactor / Math.sqrt((picture.getHeight() * picture.getWidth()) / defaultSize);
float bitmapWidth = (float) (picture.getWidth() * scale); float[] bmpSize = GraphicUtils.imageSize(picture.getWidth(), picture.getHeight(), (float) scale, width, height, percent);
float bitmapHeight = (float) (picture.getHeight() * scale);
float aspectRatio = (1f * picture.getWidth()) / picture.getHeight(); android.graphics.Bitmap bitmap = android.graphics.Bitmap.createBitmap((int) Math.ceil(bmpSize[0]),
(int) Math.ceil(bmpSize[1]), Bitmap.Config.ARGB_8888);
if (width != 0 && height != 0) {
// both width and height set, override any other setting
bitmapWidth = width;
bitmapHeight = height;
} else if (width == 0 && height != 0) {
// only width set, calculate from aspect ratio
bitmapWidth = height * aspectRatio;
bitmapHeight = height;
} else if (width != 0 && height == 0) {
// only height set, calculate from aspect ratio
bitmapHeight = width / aspectRatio;
bitmapWidth = width;
}
if (percent != 100) {
bitmapWidth *= percent / 100f;
bitmapHeight *= percent / 100f;
}
android.graphics.Bitmap bitmap = android.graphics.Bitmap.createBitmap((int) Math.ceil(bitmapWidth),
(int) Math.ceil(bitmapHeight), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap); Canvas canvas = new Canvas(bitmap);
canvas.drawPicture(picture, new RectF(0, 0, bitmapWidth, bitmapHeight)); canvas.drawPicture(picture, new RectF(0, 0, bmpSize[0], bmpSize[1]));
return bitmap; return bitmap;
} catch (Exception e) { } catch (Exception e) {

View File

@@ -1,5 +1,6 @@
/* /*
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2019 Gustl22
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@@ -25,6 +26,9 @@ import java.nio.Buffer;
import java.nio.FloatBuffer; import java.nio.FloatBuffer;
import java.nio.IntBuffer; import java.nio.IntBuffer;
/**
* TODO Unimplemented methods: https://github.com/libgdx/libgdx/blob/master/gdx/jni/android/AndroidGL20.cpp
*/
@SuppressLint("NewApi") @SuppressLint("NewApi")
public class AndroidGL implements GL { public class AndroidGL implements GL {
@@ -103,11 +107,21 @@ public class AndroidGL implements GL {
return GLES20.glCreateShader(type); return GLES20.glCreateShader(type);
} }
@Override
public void deleteBuffer(int buffer) {
throw new UnsupportedOperationException("missing implementation");
}
@Override @Override
public void deleteBuffers(int n, IntBuffer buffers) { public void deleteBuffers(int n, IntBuffer buffers) {
GLES20.glDeleteBuffers(n, buffers); GLES20.glDeleteBuffers(n, buffers);
} }
@Override
public void deleteFramebuffer(int framebuffer) {
throw new UnsupportedOperationException("missing implementation");
}
@Override @Override
public void deleteFramebuffers(int n, IntBuffer framebuffers) { public void deleteFramebuffers(int n, IntBuffer framebuffers) {
GLES20.glDeleteFramebuffers(n, framebuffers); GLES20.glDeleteFramebuffers(n, framebuffers);
@@ -118,6 +132,11 @@ public class AndroidGL implements GL {
GLES20.glDeleteProgram(program); GLES20.glDeleteProgram(program);
} }
@Override
public void deleteRenderbuffer(int renderbuffer) {
throw new UnsupportedOperationException("missing implementation");
}
@Override @Override
public void deleteRenderbuffers(int n, IntBuffer renderbuffers) { public void deleteRenderbuffers(int n, IntBuffer renderbuffers) {
GLES20.glDeleteRenderbuffers(n, renderbuffers); GLES20.glDeleteRenderbuffers(n, renderbuffers);
@@ -160,6 +179,11 @@ public class AndroidGL implements GL {
GLES20.glFramebufferTexture2D(target, attachment, textarget, texture, level); GLES20.glFramebufferTexture2D(target, attachment, textarget, texture, level);
} }
@Override
public int genBuffer() {
throw new UnsupportedOperationException("missing implementation");
}
@Override @Override
public void genBuffers(int n, IntBuffer buffers) { public void genBuffers(int n, IntBuffer buffers) {
GLES20.glGenBuffers(n, buffers); GLES20.glGenBuffers(n, buffers);
@@ -170,11 +194,21 @@ public class AndroidGL implements GL {
GLES20.glGenerateMipmap(target); GLES20.glGenerateMipmap(target);
} }
@Override
public int genFramebuffer() {
throw new UnsupportedOperationException("missing implementation");
}
@Override @Override
public void genFramebuffers(int n, IntBuffer framebuffers) { public void genFramebuffers(int n, IntBuffer framebuffers) {
GLES20.glGenFramebuffers(n, framebuffers); GLES20.glGenFramebuffers(n, framebuffers);
} }
@Override
public int genRenderbuffer() {
throw new UnsupportedOperationException("missing implementation");
}
@Override @Override
public void genRenderbuffers(int n, IntBuffer renderbuffers) { public void genRenderbuffers(int n, IntBuffer renderbuffers) {
GLES20.glGenRenderbuffers(n, renderbuffers); GLES20.glGenRenderbuffers(n, renderbuffers);
@@ -260,11 +294,6 @@ public class AndroidGL implements GL {
GLES20.glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision); GLES20.glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision);
} }
@Override
public void getShaderSource(int shader, int bufsize, Buffer length, String source) {
throw new UnsupportedOperationException("missing implementation");
}
@Override @Override
public void getTexParameterfv(int target, int pname, FloatBuffer params) { public void getTexParameterfv(int target, int pname, FloatBuffer params) {
GLES20.glGetTexParameterfv(target, pname, params); GLES20.glGetTexParameterfv(target, pname, params);
@@ -431,6 +460,11 @@ public class AndroidGL implements GL {
} }
@Override
public void uniform1fv(int location, int count, float[] v, int offset) {
GLES20.glUniform1fv(location, count, v, offset);
}
@Override @Override
public void uniform1i(int location, int x) { public void uniform1i(int location, int x) {
GLES20.glUniform1i(location, x); GLES20.glUniform1i(location, x);
@@ -443,6 +477,11 @@ public class AndroidGL implements GL {
} }
@Override
public void uniform1iv(int location, int count, int[] v, int offset) {
GLES20.glUniform1iv(location, count, v, offset);
}
@Override @Override
public void uniform2f(int location, float x, float y) { public void uniform2f(int location, float x, float y) {
GLES20.glUniform2f(location, x, y); GLES20.glUniform2f(location, x, y);
@@ -455,6 +494,11 @@ public class AndroidGL implements GL {
} }
@Override
public void uniform2fv(int location, int count, float[] v, int offset) {
GLES20.glUniform2fv(location, count, v, offset);
}
@Override @Override
public void uniform2i(int location, int x, int y) { public void uniform2i(int location, int x, int y) {
GLES20.glUniform2i(location, x, y); GLES20.glUniform2i(location, x, y);
@@ -467,6 +511,11 @@ public class AndroidGL implements GL {
} }
@Override
public void uniform2iv(int location, int count, int[] v, int offset) {
GLES20.glUniform2iv(location, count, v, offset);
}
@Override @Override
public void uniform3f(int location, float x, float y, float z) { public void uniform3f(int location, float x, float y, float z) {
GLES20.glUniform3f(location, x, y, z); GLES20.glUniform3f(location, x, y, z);
@@ -479,6 +528,11 @@ public class AndroidGL implements GL {
} }
@Override
public void uniform3fv(int location, int count, float[] v, int offset) {
GLES20.glUniform3fv(location, count, v, offset);
}
@Override @Override
public void uniform3i(int location, int x, int y, int z) { public void uniform3i(int location, int x, int y, int z) {
GLES20.glUniform3i(location, x, y, z); GLES20.glUniform3i(location, x, y, z);
@@ -491,6 +545,11 @@ public class AndroidGL implements GL {
} }
@Override
public void uniform3iv(int location, int count, int[] v, int offset) {
GLES20.glUniform3iv(location, count, v, offset);
}
@Override @Override
public void uniform4f(int location, float x, float y, float z, float w) { public void uniform4f(int location, float x, float y, float z, float w) {
GLES20.glUniform4f(location, x, y, z, w); GLES20.glUniform4f(location, x, y, z, w);
@@ -501,6 +560,11 @@ public class AndroidGL implements GL {
GLES20.glUniform4fv(location, count, v); GLES20.glUniform4fv(location, count, v);
} }
@Override
public void uniform4fv(int location, int count, float[] v, int offset) {
GLES20.glUniform4fv(location, count, v, offset);
}
@Override @Override
public void uniform4i(int location, int x, int y, int z, int w) { public void uniform4i(int location, int x, int y, int z, int w) {
GLES20.glUniform4i(location, x, y, z, w); GLES20.glUniform4i(location, x, y, z, w);
@@ -513,24 +577,44 @@ public class AndroidGL implements GL {
} }
@Override
public void uniform4iv(int location, int count, int[] v, int offset) {
GLES20.glUniform4iv(location, count, v, offset);
}
@Override @Override
public void uniformMatrix2fv(int location, int count, boolean transpose, FloatBuffer value) { public void uniformMatrix2fv(int location, int count, boolean transpose, FloatBuffer value) {
GLES20.glUniformMatrix2fv(location, count, transpose, value); GLES20.glUniformMatrix2fv(location, count, transpose, value);
} }
@Override
public void uniformMatrix2fv(int location, int count, boolean transpose, float[] value, int offset) {
GLES20.glUniformMatrix2fv(location, count, transpose, value, offset);
}
@Override @Override
public void uniformMatrix3fv(int location, int count, boolean transpose, FloatBuffer value) { public void uniformMatrix3fv(int location, int count, boolean transpose, FloatBuffer value) {
GLES20.glUniformMatrix3fv(location, count, transpose, value); GLES20.glUniformMatrix3fv(location, count, transpose, value);
} }
@Override
public void uniformMatrix3fv(int location, int count, boolean transpose, float[] value, int offset) {
GLES20.glUniformMatrix3fv(location, count, transpose, value, offset);
}
@Override @Override
public void uniformMatrix4fv(int location, int count, boolean transpose, FloatBuffer value) { public void uniformMatrix4fv(int location, int count, boolean transpose, FloatBuffer value) {
GLES20.glUniformMatrix4fv(location, count, transpose, value); GLES20.glUniformMatrix4fv(location, count, transpose, value);
} }
@Override
public void uniformMatrix4fv(int location, int count, boolean transpose, float[] value, int offset) {
GLES20.glUniformMatrix4fv(location, count, transpose, value, offset);
}
@Override @Override
public void useProgram(int program) { public void useProgram(int program) {
GLES20.glUseProgram(program); GLES20.glUseProgram(program);
@@ -691,6 +775,11 @@ public class AndroidGL implements GL {
} }
@Override
public void deleteTexture(int texture) {
throw new UnsupportedOperationException("missing implementation");
}
@Override @Override
public void depthFunc(int func) { public void depthFunc(int func) {
GLES20.glDepthFunc(func); GLES20.glDepthFunc(func);
@@ -757,6 +846,11 @@ public class AndroidGL implements GL {
} }
@Override
public int genTexture() {
throw new UnsupportedOperationException("missing implementation");
}
@Override @Override
public int getError() { public int getError() {
return GLES20.glGetError(); return GLES20.glGetError();
@@ -837,8 +931,7 @@ public class AndroidGL implements GL {
@Override @Override
public void texSubImage2D(int target, int level, int xoffset, int yoffset, int width, public void texSubImage2D(int target, int level, int xoffset, int yoffset, int width,
int height, int format, int type, Buffer pixels) { int height, int format, int type, Buffer pixels) {
GLES20 GLES20.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
} }

View File

@@ -0,0 +1,878 @@
/*
* Copyright 2019 Gustl22
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*******************************************************************************
* Copyright 2014 See AUTHORS file.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package org.oscim.android.gl;
import android.annotation.SuppressLint;
import android.opengl.GLES30;
import org.oscim.backend.GL30;
/**
* See https://github.com/libgdx/libgdx/blob/master/backends/gdx-backend-android/src/com/badlogic/gdx/backends/android/AndroidGL30.java
*/
@SuppressLint("NewApi")
public class AndroidGL30 extends AndroidGL implements GL30 {
@Override
public void readBuffer(int mode) {
GLES30.glReadBuffer(mode);
}
@Override
public void drawRangeElements(int mode, int start, int end, int count, int type, java.nio.Buffer indices) {
GLES30.glDrawRangeElements(mode, start, end, count, type, indices);
}
@Override
public void drawRangeElements(int mode, int start, int end, int count, int type, int offset) {
GLES30.glDrawRangeElements(mode, start, end, count, type, offset);
}
@Override
public void texImage3D(int target, int level, int internalformat, int width, int height, int depth, int border, int format,
int type, java.nio.Buffer pixels) {
if (pixels == null)
GLES30.glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, 0);
else
GLES30.glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, pixels);
}
@Override
public void texImage3D(int target, int level, int internalformat, int width, int height, int depth, int border, int format,
int type, int offset) {
GLES30.glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, offset);
}
@Override
public void texSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth,
int format, int type, java.nio.Buffer pixels) {
GLES30.glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
}
@Override
public void texSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth,
int format, int type, int offset) {
GLES30.glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, offset);
}
@Override
public void copyTexSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int x, int y, int width,
int height) {
GLES30.glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height);
}
//
// @Override
// public void compressedTexImage3D(int target, int level, int internalformat, int width, int height, int depth, int border, int
// imageSize, java.nio.Buffer data) {
// GLES30.glCompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data);
// }
//
// @Override
// public void compressedTexImage3D(int target, int level, int internalformat, int width, int height, int depth, int border, int
// imageSize, int offset) {
// GLES30.glCompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, offset);
// }
//
// @Override
// public void compressedTexSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int
// depth, int format, int imageSize, java.nio.Buffer data) {
// GLES30.glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
// }
//
// @Override
// public void compressedTexSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int
// depth, int format, int imageSize, int offset) {
// GLES30.glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, offset);
// }
@Override
public void genQueries(int n, int[] ids, int offset) {
GLES30.glGenQueries(n, ids, offset);
}
@Override
public void genQueries(int n, java.nio.IntBuffer ids) {
GLES30.glGenQueries(n, ids);
}
@Override
public void deleteQueries(int n, int[] ids, int offset) {
GLES30.glDeleteQueries(n, ids, offset);
}
@Override
public void deleteQueries(int n, java.nio.IntBuffer ids) {
GLES30.glDeleteQueries(n, ids);
}
@Override
public boolean isQuery(int id) {
return GLES30.glIsQuery(id);
}
@Override
public void beginQuery(int target, int id) {
GLES30.glBeginQuery(target, id);
}
@Override
public void endQuery(int target) {
GLES30.glEndQuery(target);
}
// @Override
// public void getQueryiv(int target, int pname, int[] params, int offset) {
// GLES30.glGetQueryiv(target, pname, params, offset);
// }
@Override
public void getQueryiv(int target, int pname, java.nio.IntBuffer params) {
GLES30.glGetQueryiv(target, pname, params);
}
// @Override
// public void getQueryObjectuiv(int id, int pname, int[] params, int offset) {
// GLES30.glGetQueryObjectuiv(id, pname, params, offset);
// }
@Override
public void getQueryObjectuiv(int id, int pname, java.nio.IntBuffer params) {
GLES30.glGetQueryObjectuiv(id, pname, params);
}
@Override
public boolean unmapBuffer(int target) {
return GLES30.glUnmapBuffer(target);
}
@Override
public java.nio.Buffer getBufferPointerv(int target, int pname) {
return GLES30.glGetBufferPointerv(target, pname);
}
// @Override
// public void drawBuffers(int n, int[] bufs, int offset) {
// GLES30.glDrawBuffers(n, bufs, offset);
// }
@Override
public void drawBuffers(int n, java.nio.IntBuffer bufs) {
GLES30.glDrawBuffers(n, bufs);
}
// @Override
// public void uniformMatrix2x3fv(int location, int count, boolean transpose, float[] value, int offset) {
// GLES30.glUniformMatrix2x3fv(location, count, transpose, value, offset);
// }
@Override
public void uniformMatrix2x3fv(int location, int count, boolean transpose, java.nio.FloatBuffer value) {
GLES30.glUniformMatrix2x3fv(location, count, transpose, value);
}
// @Override
// public void uniformMatrix3x2fv(int location, int count, boolean transpose, float[] value, int offset) {
// GLES30.glUniformMatrix3x2fv(location, count, transpose, value, offset);
// }
@Override
public void uniformMatrix3x2fv(int location, int count, boolean transpose, java.nio.FloatBuffer value) {
GLES30.glUniformMatrix3x2fv(location, count, transpose, value);
}
// @Override
// public void uniformMatrix2x4fv(int location, int count, boolean transpose, float[] value, int offset) {
// GLES30.glUniformMatrix2x4fv(location, count, transpose, value, offset);
// }
@Override
public void uniformMatrix2x4fv(int location, int count, boolean transpose, java.nio.FloatBuffer value) {
GLES30.glUniformMatrix2x4fv(location, count, transpose, value);
}
// @Override
// public void uniformMatrix4x2fv(int location, int count, boolean transpose, float[] value, int offset) {
// GLES30.glUniformMatrix4x2fv(location, count, transpose, value, offset);
// }
@Override
public void uniformMatrix4x2fv(int location, int count, boolean transpose, java.nio.FloatBuffer value) {
GLES30.glUniformMatrix4x2fv(location, count, transpose, value);
}
// @Override
// public void uniformMatrix3x4fv(int location, int count, boolean transpose, float[] value, int offset) {
// GLES30.glUniformMatrix3x4fv(location, count, transpose, value, offset);
// }
@Override
public void uniformMatrix3x4fv(int location, int count, boolean transpose, java.nio.FloatBuffer value) {
GLES30.glUniformMatrix3x4fv(location, count, transpose, value);
}
// @Override
// public void uniformMatrix4x3fv(int location, int count, boolean transpose, float[] value, int offset) {
// GLES30.glUniformMatrix4x3fv(location, count, transpose, value, offset);
// }
@Override
public void uniformMatrix4x3fv(int location, int count, boolean transpose, java.nio.FloatBuffer value) {
GLES30.glUniformMatrix4x3fv(location, count, transpose, value);
}
@Override
public void blitFramebuffer(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1,
int mask, int filter) {
GLES30.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
}
@Override
public void renderbufferStorageMultisample(int target, int samples, int internalformat, int width, int height) {
GLES30.glRenderbufferStorageMultisample(target, samples, internalformat, width, height);
}
@Override
public void framebufferTextureLayer(int target, int attachment, int texture, int level, int layer) {
GLES30.glFramebufferTextureLayer(target, attachment, texture, level, layer);
}
// @Override
// public java.nio.Buffer mapBufferRange(int target, int offset, int length, int access) {
// return GLES30.glMapBufferRange(target, offset, length, access);
// }
@Override
public void flushMappedBufferRange(int target, int offset, int length) {
GLES30.glFlushMappedBufferRange(target, offset, length);
}
@Override
public void bindVertexArray(int array) {
GLES30.glBindVertexArray(array);
}
@Override
public void deleteVertexArrays(int n, int[] arrays, int offset) {
GLES30.glDeleteVertexArrays(n, arrays, offset);
}
@Override
public void deleteVertexArrays(int n, java.nio.IntBuffer arrays) {
GLES30.glDeleteVertexArrays(n, arrays);
}
@Override
public void genVertexArrays(int n, int[] arrays, int offset) {
GLES30.glGenVertexArrays(n, arrays, offset);
}
@Override
public void genVertexArrays(int n, java.nio.IntBuffer arrays) {
GLES30.glGenVertexArrays(n, arrays);
}
@Override
public boolean isVertexArray(int array) {
return GLES30.glIsVertexArray(array);
}
// @Override
// public void getIntegeri_v(int target, int index, int[] data, int offset) {
// GLES30.glGetIntegeri_v(target, index, data, offset);
// }
// @Override
// public void getIntegeri_v(int target, int index, java.nio.IntBuffer data) {
// GLES30.glGetIntegeri_v(target, index, data);
// }
@Override
public void beginTransformFeedback(int primitiveMode) {
GLES30.glBeginTransformFeedback(primitiveMode);
}
@Override
public void endTransformFeedback() {
GLES30.glEndTransformFeedback();
}
@Override
public void bindBufferRange(int target, int index, int buffer, int offset, int size) {
GLES30.glBindBufferRange(target, index, buffer, offset, size);
}
@Override
public void bindBufferBase(int target, int index, int buffer) {
GLES30.glBindBufferBase(target, index, buffer);
}
@Override
public void transformFeedbackVaryings(int program, String[] varyings, int bufferMode) {
GLES30.glTransformFeedbackVaryings(program, varyings, bufferMode);
}
// @Override
// public void getTransformFeedbackVarying(int program, int index, int bufsize, int[] length, int lengthOffset, int[] size, int
// sizeOffset, int[] type, int typeOffset, byte[] name, int nameOffset) {
// GLES30.glGetTransformFeedbackVarying(program, index, bufsize, length, lengthOffset, size, sizeOffset, type, typeOffset, name,
// nameOffset);
// }
// @Override
// public void getTransformFeedbackVarying(int program, int index, int bufsize, java.nio.IntBuffer length, java.nio.IntBuffer
// size, java.nio.IntBuffer type, byte name) {
// GLES30.glGetTransformFeedbackVarying(program, index, bufsize, length, size, type, name);
// }
//
// @Override
// public String getTransformFeedbackVarying(int program, int index, int[] size, int sizeOffset, int[] type, int typeOffset) {
// return GLES30.glGetTransformFeedbackVarying(program, index, size, sizeOffset, type, typeOffset);
// }
//
// @Override
// public String getTransformFeedbackVarying(int program, int index, java.nio.IntBuffer size, java.nio.IntBuffer type) {
// return GLES30.glGetTransformFeedbackVarying(program, index, size, type);
// }
@Override
public void vertexAttribIPointer(int index, int size, int type, int stride, int offset) {
GLES30.glVertexAttribIPointer(index, size, type, stride, offset);
}
// @Override
// public void getVertexAttribIiv(int index, int pname, int[] params, int offset) {
// GLES30.glGetVertexAttribIiv(index, pname, params, offset);
// }
@Override
public void getVertexAttribIiv(int index, int pname, java.nio.IntBuffer params) {
GLES30.glGetVertexAttribIiv(index, pname, params);
}
// @Override
// public void getVertexAttribIuiv(int index, int pname, int[] params, int offset) {
// GLES30.glGetVertexAttribIuiv(index, pname, params, offset);
// }
@Override
public void getVertexAttribIuiv(int index, int pname, java.nio.IntBuffer params) {
GLES30.glGetVertexAttribIuiv(index, pname, params);
}
@Override
public void vertexAttribI4i(int index, int x, int y, int z, int w) {
GLES30.glVertexAttribI4i(index, x, y, z, w);
}
@Override
public void vertexAttribI4ui(int index, int x, int y, int z, int w) {
GLES30.glVertexAttribI4ui(index, x, y, z, w);
}
// @Override
// public void vertexAttribI4iv(int index, int[] v, int offset) {
// GLES30.glVertexAttribI4iv(index, v, offset);
// }
//
// @Override
// public void vertexAttribI4iv(int index, java.nio.IntBuffer v) {
// GLES30.glVertexAttribI4iv(index, v);
// }
//
// @Override
// public void vertexAttribI4uiv(int index, int[] v, int offset) {
// GLES30.glVertexAttribI4uiv(index, v, offset);
// }
//
// @Override
// public void vertexAttribI4uiv(int index, java.nio.IntBuffer v) {
// GLES30.glVertexAttribI4uiv(index, v);
// }
//
// @Override
// public void getUniformuiv(int program, int location, int[] params, int offset) {
// GLES30.glGetUniformuiv(program, location, params, offset);
// }
@Override
public void getUniformuiv(int program, int location, java.nio.IntBuffer params) {
GLES30.glGetUniformuiv(program, location, params);
}
@Override
public int getFragDataLocation(int program, String name) {
return GLES30.glGetFragDataLocation(program, name);
}
// @Override
// public void uniform1ui(int location, int v0) {
// GLES30.glUniform1ui(location, v0);
// }
//
// @Override
// public void uniform2ui(int location, int v0, int v1) {
// GLES30.glUniform2ui(location, v0, v1);
// }
//
// @Override
// public void uniform3ui(int location, int v0, int v1, int v2) {
// GLES30.glUniform3ui(location, v0, v1, v2);
// }
// @Override
// public void uniform4ui(int location, int v0, int v1, int v2, int v3) {
// GLES30.glUniform4ui(location, v0, v1, v2, v3);
// }
//
// @Override
// public void uniform1uiv(int location, int count, int[] value, int offset) {
// GLES30.glUniform1uiv(location, count, value, offset);
// }
@Override
public void uniform1uiv(int location, int count, java.nio.IntBuffer value) {
GLES30.glUniform1uiv(location, count, value);
}
// @Override
// public void uniform2uiv(int location, int count, int[] value, int offset) {
// GLES30.glUniform2uiv(location, count, value, offset);
// }
//
// @Override
// public void uniform2uiv(int location, int count, java.nio.IntBuffer value) {
// GLES30.glUniform2uiv(location, count, value);
// }
//
// @Override
// public void uniform3uiv(int location, int count, int[] value, int offset) {
// GLES30.glUniform3uiv(location, count, value, offset);
// }
@Override
public void uniform3uiv(int location, int count, java.nio.IntBuffer value) {
GLES30.glUniform3uiv(location, count, value);
}
// @Override
// public void uniform4uiv(int location, int count, int[] value, int offset) {
// GLES30.glUniform4uiv(location, count, value, offset);
// }
@Override
public void uniform4uiv(int location, int count, java.nio.IntBuffer value) {
GLES30.glUniform4uiv(location, count, value);
}
// @Override
// public void clearBufferiv(int buffer, int drawbuffer, int[] value, int offset) {
// GLES30.glClearBufferiv(buffer, drawbuffer, value, offset);
// }
@Override
public void clearBufferiv(int buffer, int drawbuffer, java.nio.IntBuffer value) {
GLES30.glClearBufferiv(buffer, drawbuffer, value);
}
// @Override
// public void clearBufferuiv(int buffer, int drawbuffer, int[] value, int offset) {
// GLES30.glClearBufferuiv(buffer, drawbuffer, value, offset);
// }
@Override
public void clearBufferuiv(int buffer, int drawbuffer, java.nio.IntBuffer value) {
GLES30.glClearBufferuiv(buffer, drawbuffer, value);
}
//
// @Override
// public void clearBufferfv(int buffer, int drawbuffer, float[] value, int offset) {
// GLES30.glClearBufferfv(buffer, drawbuffer, value, offset);
// }
@Override
public void clearBufferfv(int buffer, int drawbuffer, java.nio.FloatBuffer value) {
GLES30.glClearBufferfv(buffer, drawbuffer, value);
}
@Override
public void clearBufferfi(int buffer, int drawbuffer, float depth, int stencil) {
GLES30.glClearBufferfi(buffer, drawbuffer, depth, stencil);
}
@Override
public String getStringi(int name, int index) {
return GLES30.glGetStringi(name, index);
}
@Override
public void copyBufferSubData(int readTarget, int writeTarget, int readOffset, int writeOffset, int size) {
GLES30.glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
}
//
// @Override
// public void getUniformIndices(int program, String[] uniformNames, int[] uniformIndices, int uniformIndicesOffset) {
// GLES30.glGetUniformIndices(program, uniformNames, uniformIndices, uniformIndicesOffset);
// }
@Override
public void getUniformIndices(int program, String[] uniformNames, java.nio.IntBuffer uniformIndices) {
GLES30.glGetUniformIndices(program, uniformNames, uniformIndices);
}
// @Override
// public void getActiveUniformsiv(int program, int uniformCount, int[] uniformIndices, int uniformIndicesOffset, int pname,
// int[] params, int paramsOffset) {
// GLES30.glGetActiveUniformsiv(program, uniformCount, uniformIndices, uniformIndicesOffset, pname, params, paramsOffset);
// }
@Override
public void getActiveUniformsiv(int program, int uniformCount, java.nio.IntBuffer uniformIndices, int pname,
java.nio.IntBuffer params) {
GLES30.glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params);
}
@Override
public int getUniformBlockIndex(int program, String uniformBlockName) {
return GLES30.glGetUniformBlockIndex(program, uniformBlockName);
}
//
// @Override
// public void getActiveUniformBlockiv(int program, int uniformBlockIndex, int pname, int[] params, int offset) {
// GLES30.glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params, offset);
// }
@Override
public void getActiveUniformBlockiv(int program, int uniformBlockIndex, int pname, java.nio.IntBuffer params) {
GLES30.glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params);
}
//
// @Override
// public void getActiveUniformBlockName(int program, int uniformBlockIndex, int bufSize, int[] length, int lengthOffset, byte[]
// uniformBlockName, int uniformBlockNameOffset) {
// GLES30.glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, lengthOffset, uniformBlockName,
// uniformBlockNameOffset);
// }
@Override
public void getActiveUniformBlockName(int program, int uniformBlockIndex, java.nio.Buffer length,
java.nio.Buffer uniformBlockName) {
GLES30.glGetActiveUniformBlockName(program, uniformBlockIndex, length, uniformBlockName);
}
@Override
public String getActiveUniformBlockName(int program, int uniformBlockIndex) {
return GLES30.glGetActiveUniformBlockName(program, uniformBlockIndex);
}
@Override
public void uniformBlockBinding(int program, int uniformBlockIndex, int uniformBlockBinding) {
GLES30.glUniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);
}
@Override
public void drawArraysInstanced(int mode, int first, int count, int instanceCount) {
GLES30.glDrawArraysInstanced(mode, first, count, instanceCount);
}
// @Override
// public void drawElementsInstanced(int mode, int count, int type, java.nio.Buffer indices, int instanceCount) {
// GLES30.glDrawElementsInstanced(mode, count, type, indices, instanceCount);
// }
@Override
public void drawElementsInstanced(int mode, int count, int type, int indicesOffset, int instanceCount) {
GLES30.glDrawElementsInstanced(mode, count, type, indicesOffset, instanceCount);
}
// @Override
// public long fenceSync(int condition, int flags) {
// return GLES30.glFenceSync(condition, flags);
// }
//
// @Override
// public boolean isSync(long sync) {
// return GLES30.glIsSync(sync);
// }
//
// @Override
// public void deleteSync(long sync) {
// GLES30.glDeleteSync(sync);
// }
//
// @Override
// public int clientWaitSync(long sync, int flags, long timeout) {
// return GLES30.glClientWaitSync(sync, flags, timeout);
// }
// @Override
// public void waitSync(long sync, int flags, long timeout) {
// GLES30.glWaitSync(sync, flags, timeout);
// }
//
// @Override
// public void getInteger64v(int pname, long[] params, int offset) {
// GLES30.glGetInteger64v(pname, params, offset);
// }
@Override
public void getInteger64v(int pname, java.nio.LongBuffer params) {
GLES30.glGetInteger64v(pname, params);
}
// @Override
// public void getSynciv(long sync, int pname, int bufSize, int[] length, int lengthOffset, int[] values, int valuesOffset) {
// GLES30.glGetSynciv(sync, pname, bufSize, length, lengthOffset, values, valuesOffset);
// }
//
// @Override
// public void getSynciv(long sync, int pname, int bufSize, java.nio.IntBuffer length, java.nio.IntBuffer values) {
// GLES30.glGetSynciv(sync, pname, bufSize, length, values);
// }
//
// @Override
// public void getInteger64i_v(int target, int index, long[] data, int offset) {
// GLES30.glGetInteger64i_v(target, index, data, offset);
// }
//
// @Override
// public void getInteger64i_v(int target, int index, java.nio.LongBuffer data) {
// GLES30.glGetInteger64i_v(target, index, data);
// }
//
// @Override
// public void getBufferParameteri64v(int target, int pname, long[] params, int offset) {
// GLES30.glGetBufferParameteri64v(target, pname, params, offset);
// }
@Override
public void getBufferParameteri64v(int target, int pname, java.nio.LongBuffer params) {
GLES30.glGetBufferParameteri64v(target, pname, params);
}
@Override
public void genSamplers(int count, int[] samplers, int offset) {
GLES30.glGenSamplers(count, samplers, offset);
}
@Override
public void genSamplers(int count, java.nio.IntBuffer samplers) {
GLES30.glGenSamplers(count, samplers);
}
@Override
public void deleteSamplers(int count, int[] samplers, int offset) {
GLES30.glDeleteSamplers(count, samplers, offset);
}
@Override
public void deleteSamplers(int count, java.nio.IntBuffer samplers) {
GLES30.glDeleteSamplers(count, samplers);
}
@Override
public boolean isSampler(int sampler) {
return GLES30.glIsSampler(sampler);
}
@Override
public void bindSampler(int unit, int sampler) {
GLES30.glBindSampler(unit, sampler);
}
@Override
public void samplerParameteri(int sampler, int pname, int param) {
GLES30.glSamplerParameteri(sampler, pname, param);
}
//
// @Override
// public void samplerParameteriv(int sampler, int pname, int[] param, int offset) {
// GLES30.glSamplerParameteriv(sampler, pname, param, offset);
// }
@Override
public void samplerParameteriv(int sampler, int pname, java.nio.IntBuffer param) {
GLES30.glSamplerParameteriv(sampler, pname, param);
}
@Override
public void samplerParameterf(int sampler, int pname, float param) {
GLES30.glSamplerParameterf(sampler, pname, param);
}
// @Override
// public void samplerParameterfv(int sampler, int pname, float[] param, int offset) {
// GLES30.glSamplerParameterfv(sampler, pname, param, offset);
// }
@Override
public void samplerParameterfv(int sampler, int pname, java.nio.FloatBuffer param) {
GLES30.glSamplerParameterfv(sampler, pname, param);
}
//
// @Override
// public void getSamplerParameteriv(int sampler, int pname, int[] params, int offset) {
// GLES30.glGetSamplerParameteriv(sampler, pname, params, offset);
// }
@Override
public void getSamplerParameteriv(int sampler, int pname, java.nio.IntBuffer params) {
GLES30.glGetSamplerParameteriv(sampler, pname, params);
}
// @Override
// public void getSamplerParameterfv(int sampler, int pname, float[] params, int offset) {
// GLES30.glGetSamplerParameterfv(sampler, pname, params, offset);
// }
@Override
public void getSamplerParameterfv(int sampler, int pname, java.nio.FloatBuffer params) {
GLES30.glGetSamplerParameterfv(sampler, pname, params);
}
@Override
public void vertexAttribDivisor(int index, int divisor) {
GLES30.glVertexAttribDivisor(index, divisor);
}
@Override
public void bindTransformFeedback(int target, int id) {
GLES30.glBindTransformFeedback(target, id);
}
@Override
public void deleteTransformFeedbacks(int n, int[] ids, int offset) {
GLES30.glDeleteTransformFeedbacks(n, ids, offset);
}
@Override
public void deleteTransformFeedbacks(int n, java.nio.IntBuffer ids) {
GLES30.glDeleteTransformFeedbacks(n, ids);
}
@Override
public void genTransformFeedbacks(int n, int[] ids, int offset) {
GLES30.glGenTransformFeedbacks(n, ids, offset);
}
@Override
public void genTransformFeedbacks(int n, java.nio.IntBuffer ids) {
GLES30.glGenTransformFeedbacks(n, ids);
}
@Override
public boolean isTransformFeedback(int id) {
return GLES30.glIsTransformFeedback(id);
}
@Override
public void pauseTransformFeedback() {
GLES30.glPauseTransformFeedback();
}
@Override
public void resumeTransformFeedback() {
GLES30.glResumeTransformFeedback();
}
// @Override
// public void getProgramBinary(int program, int bufSize, int[] length, int lengthOffset, int[] binaryFormat, int
// binaryFormatOffset, java.nio.Buffer binary) {
// GLES30.glGetProgramBinary(program, bufSize, length, lengthOffset, binaryFormat, binaryFormatOffset, binary);
// }
//
// @Override
// public void getProgramBinary(int program, int bufSize, java.nio.IntBuffer length, java.nio.IntBuffer binaryFormat,
// java.nio.Buffer binary) {
// GLES30.glGetProgramBinary(program, bufSize, length, binaryFormat, binary);
// }
// @Override
// public void programBinary(int program, int binaryFormat, java.nio.Buffer binary, int length) {
// GLES30.glProgramBinary(program, binaryFormat, binary, length);
// }
@Override
public void programParameteri(int program, int pname, int value) {
GLES30.glProgramParameteri(program, pname, value);
}
// @Override
// public void invalidateFramebuffer(int target, int numAttachments, int[] attachments, int offset) {
// GLES30.glInvalidateFramebuffer(target, numAttachments, attachments, offset);
// }
@Override
public void invalidateFramebuffer(int target, int numAttachments, java.nio.IntBuffer attachments) {
GLES30.glInvalidateFramebuffer(target, numAttachments, attachments);
}
//
// @Override
// public void invalidateSubFramebuffer(int target, int numAttachments, int[] attachments, int offset, int x, int y, int width,
// int height) {
// GLES30.glInvalidateSubFramebuffer(target, numAttachments, attachments, offset, x, y, width, height);
// }
@Override
public void invalidateSubFramebuffer(int target, int numAttachments, java.nio.IntBuffer attachments, int x, int y,
int width, int height) {
GLES30.glInvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height);
}
// @Override
// public void texStorage2D(int target, int levels, int internalformat, int width, int height) {
// GLES30.glTexStorage2D(target, levels, internalformat, width, height);
// }
// @Override
// public void texStorage3D(int target, int levels, int internalformat, int width, int height, int depth) {
// GLES30.glTexStorage3D(target, levels, internalformat, width, height, depth);
// }
//
// @Override
// public void getInternalformativ(int target, int internalformat, int pname, int bufSize, int[] params, int offset) {
// GLES30.glGetInternalformativ(target, internalformat, pname, bufSize, params, offset);
// }
//
// @Override
// public void getInternalformativ(int target, int internalformat, int pname, int bufSize, java.nio.IntBuffer params) {
// GLES30.glGetInternalformativ(target, internalformat, pname, bufSize, params);
// }
}

View File

@@ -20,7 +20,7 @@ public class GlConfigChooser implements GLSurfaceView.EGLConfigChooser {
EGL10.EGL_ALPHA_SIZE, 8, EGL10.EGL_ALPHA_SIZE, 8,
EGL10.EGL_DEPTH_SIZE, 16, EGL10.EGL_DEPTH_SIZE, 16,
// Requires that setEGLContextClientVersion(2) is called on the view. // Requires that setEGLContextClientVersion(2) is called on the view.
EGL10.EGL_RENDERABLE_TYPE, 4 /* EGL_OPENGL_ES2_BIT */, EGL10.EGL_RENDERABLE_TYPE, 4 /*EGL14.EGL_OPENGL_ES2_BIT*/ /*0x40 /*EGLExt.EGL_OPENGL_ES3_BIT_KHR*/,
EGL10.EGL_STENCIL_SIZE, 8, EGL10.EGL_STENCIL_SIZE, 8,
EGL10.EGL_NONE}; EGL10.EGL_NONE};
@@ -38,7 +38,7 @@ public class GlConfigChooser implements GLSurfaceView.EGLConfigChooser {
EGL10.EGL_BLUE_SIZE, 8, EGL10.EGL_BLUE_SIZE, 8,
EGL10.EGL_ALPHA_SIZE, 8, EGL10.EGL_ALPHA_SIZE, 8,
EGL10.EGL_DEPTH_SIZE, 16, EGL10.EGL_DEPTH_SIZE, 16,
EGL10.EGL_RENDERABLE_TYPE, 4 /* EGL_OPENGL_ES2_BIT */, EGL10.EGL_RENDERABLE_TYPE, 4 /*EGL14.EGL_OPENGL_ES2_BIT*/ /*0x40 /*EGLExt.EGL_OPENGL_ES3_BIT_KHR*/,
EGL10.EGL_STENCIL_SIZE, 8, EGL10.EGL_STENCIL_SIZE, 8,
EGL10.EGL_NONE}; EGL10.EGL_NONE};

View File

@@ -0,0 +1,82 @@
/*
* Copyright 2019 Gustl22
* Copyright 2019 devemux86
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS"
* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package org.oscim.android.gl;
import android.opengl.GLSurfaceView;
import org.oscim.android.MapView;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.microedition.khronos.egl.EGL10;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.egl.EGLContext;
import javax.microedition.khronos.egl.EGLDisplay;
/**
* https://developer.android.com/guide/topics/graphics/opengl.html#version-check
* <p>
* https://github.com/libgdx/libgdx/blob/master/backends/gdx-backend-android/src/com/badlogic/gdx/backends/android/surfaceview/GLSurfaceView20.java
*/
public class GlContextFactory implements GLSurfaceView.EGLContextFactory {
private static final Logger log = LoggerFactory.getLogger(GlContextFactory.class);
private static final int EGL_CONTEXT_CLIENT_VERSION = 0x3098;
@Override
public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig) {
log.info("creating OpenGL ES " + MapView.OPENGL_VERSION + " context");
checkEglError("Before eglCreateContext " + MapView.OPENGL_VERSION, egl);
int[] attrib_list = {EGL_CONTEXT_CLIENT_VERSION, (int) MapView.OPENGL_VERSION, EGL10.EGL_NONE};
EGLContext context = egl.eglCreateContext(display, eglConfig, EGL10.EGL_NO_CONTEXT, attrib_list);
boolean success = checkEglError("After eglCreateContext " + MapView.OPENGL_VERSION, egl);
if ((!success || context == null) && MapView.OPENGL_VERSION > 2) {
log.warn("Falling back to GLES 2");
MapView.OPENGL_VERSION = 2.0;
return createContext(egl, display, eglConfig);
}
log.info("Returning a GLES " + MapView.OPENGL_VERSION + " context");
return context;
}
@Override
public void destroyContext(EGL10 egl, EGLDisplay display, EGLContext context) {
egl.eglDestroyContext(display, context);
}
private static boolean checkEglError(String prompt, EGL10 egl) {
int error;
boolean result = true;
while ((error = egl.eglGetError()) != EGL10.EGL_SUCCESS) {
result = false;
log.error(String.format("%s: EGL error: 0x%x", prompt, error));
}
return result;
}
}

View File

@@ -0,0 +1,155 @@
/*
* Copyright 2019 Andrea Antonello
* Copyright 2019 devemux86
* Copyright 2019 Kostas Tzounopoulos
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.oscim.android.tiling.source.mbtiles;
import android.database.Cursor;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import org.oscim.backend.CanvasAdapter;
import org.oscim.backend.canvas.Bitmap;
import org.oscim.core.MercatorProjection;
import org.oscim.layers.tile.MapTile;
import org.oscim.tiling.ITileDataSink;
import org.oscim.tiling.QueryResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Arrays;
import java.util.List;
/**
* A tile data source for MBTiles raster databases.
*/
public class MBTilesBitmapTileDataSource extends MBTilesTileDataSource {
private static final Logger log = LoggerFactory.getLogger(MBTilesBitmapTileDataSource.class);
private static final List<String> SUPPORTED_FORMATS = Arrays.asList("png", "jpg", "jpeg");
private final Integer mAlpha;
private final Integer mTransparentColor;
/**
* Create a tile data source for MBTiles raster databases.
*
* @param path the path to the MBTiles database.
* @param alpha an optional alpha value [0-255] to make the tiles transparent.
* @param transparentColor an optional color that will be made transparent in the bitmap.
*/
public MBTilesBitmapTileDataSource(String path, Integer alpha, Integer transparentColor) {
super(path);
mAlpha = alpha;
mTransparentColor = transparentColor;
try {
assertDatabaseFormat();
} catch (MBTilesUnsupportedException e) {
log.error("Invalid MBTiles database", e);
}
}
@Override
public void cancel() {
if (mDatabase != null && mDatabase.isOpen())
mDatabase.close();
}
@Override
public void dispose() {
if (mDatabase != null && mDatabase.isOpen())
mDatabase.close();
}
@Override
public List<String> getSupportedFormats() {
return SUPPORTED_FORMATS;
}
private static android.graphics.Bitmap processAlpha(android.graphics.Bitmap bitmap, int alpha) {
android.graphics.Bitmap newBitmap = android.graphics.Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), android.graphics.Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(newBitmap);
Paint paint = new Paint();
paint.setAlpha(alpha);
canvas.drawBitmap(bitmap, 0, 0, paint);
return newBitmap;
}
private static android.graphics.Bitmap processTransparentColor(android.graphics.Bitmap bitmap, int colorToRemove) {
int[] pixels = new int[bitmap.getWidth() * bitmap.getHeight()];
bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
for (int i = 0; i < pixels.length; i++) {
if (pixels[i] == colorToRemove)
pixels[i] = Color.alpha(Color.TRANSPARENT);
}
android.graphics.Bitmap newBitmap = android.graphics.Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), android.graphics.Bitmap.Config.ARGB_8888);
newBitmap.setPixels(pixels, 0, newBitmap.getWidth(), 0, 0, newBitmap.getWidth(), newBitmap.getHeight());
return newBitmap;
}
@Override
public void query(MapTile tile, ITileDataSink sink) {
QueryResult res = QueryResult.FAILED;
try {
byte[] bytes = readTile(tile.tileX, tile.tileY, tile.zoomLevel);
if (mTransparentColor != null || mAlpha != null) {
android.graphics.Bitmap androidBitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
if (mTransparentColor != null)
androidBitmap = processTransparentColor(androidBitmap, mTransparentColor);
if (mAlpha != null)
androidBitmap = processAlpha(androidBitmap, mAlpha);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
androidBitmap.compress(android.graphics.Bitmap.CompressFormat.PNG, 100, bos);
bytes = bos.toByteArray();
}
Bitmap bitmap = CanvasAdapter.decodeBitmap(new ByteArrayInputStream(bytes));
sink.setTileImage(bitmap);
res = QueryResult.SUCCESS;
} catch (Exception e) {
log.debug("{} invalid bitmap", tile);
} finally {
sink.completed(res);
}
}
/**
* Read a Tile's image bytes from the MBTiles database.
*
* @param tileX the x tile index.
* @param tileY the y tile index (OSM notation).
* @param zoomLevel the zoom level.
* @return the tile image bytes.
*/
private byte[] readTile(int tileX, int tileY, byte zoomLevel) {
Cursor cursor = null;
try {
long tmsTileY = MercatorProjection.tileYToTMS(tileY, zoomLevel);
cursor = mDatabase.rawQuery(String.format(MBTilesTileDataSource.SELECT_TILES_FORMAT, MBTilesTileDataSource.WHERE_FORMAT), new String[]{String.valueOf(zoomLevel), String.valueOf(tileX), String.valueOf(tmsTileY)});
if (cursor.moveToFirst())
return cursor.getBlob(cursor.getColumnIndexOrThrow("tile_data"));
} finally {
if (cursor != null)
cursor.close();
}
return null;
}
}

View File

@@ -0,0 +1,43 @@
/*
* Copyright 2019 Andrea Antonello
* Copyright 2019 devemux86
* Copyright 2019 Kostas Tzounopoulos
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.oscim.android.tiling.source.mbtiles;
/**
* A tile source for MBTiles raster databases.
*/
public class MBTilesBitmapTileSource extends MBTilesTileSource {
/**
* Create a tile source for MBTiles raster databases.
*
* @param path the path to the MBTiles database.
*/
public MBTilesBitmapTileSource(String path) {
this(path, null, null);
}
/**
* Create a tile source for MBTiles raster databases.
*
* @param path the path to the MBTiles database.
* @param alpha an optional alpha value [0-255] to make the tiles transparent.
* @param transparentColor an optional color that will be made transparent in the bitmap.
*/
public MBTilesBitmapTileSource(String path, Integer alpha, Integer transparentColor) {
super(new MBTilesBitmapTileDataSource(path, alpha, transparentColor));
}
}

View File

@@ -0,0 +1,154 @@
/*
* Copyright 2019 Andrea Antonello
* Copyright 2019 devemux86
* Copyright 2019 Kostas Tzounopoulos
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.oscim.android.tiling.source.mbtiles;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.text.TextUtils;
import org.oscim.core.BoundingBox;
import org.oscim.core.MapPosition;
import org.oscim.map.Viewport;
import org.oscim.tiling.ITileDataSource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* A tile data source for MBTiles databases.
*/
public abstract class MBTilesTileDataSource implements ITileDataSource {
private static final String SELECT_METADATA = "SELECT name, value FROM metadata";
protected static final String SELECT_TILES_FORMAT =
"SELECT zoom_level, tile_column, tile_row, tile_data " +
"FROM tiles " +
"WHERE %s " +
"ORDER BY zoom_level DESC " +
"LIMIT 1";
static final String WHERE_FORMAT = "zoom_level=? AND tile_column=? AND tile_row=?";
protected final SQLiteDatabase mDatabase;
private Map<String, String> mMetadata;
public MBTilesTileDataSource(String path) {
mDatabase = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);
}
protected void assertDatabaseFormat() {
String format = getFormat();
if (format == null)
throw new RuntimeException("'metadata.format' field was not found. Is this an MBTiles database?");
List<String> supportedFormats = getSupportedFormats();
if (!supportedFormats.contains(format))
throw new MBTilesUnsupportedException(String.format("Unsupported MBTiles 'metadata.format: %s'. Supported format(s) are: %s", format, TextUtils.join(", ", supportedFormats)));
}
public String getAttribution() {
return getMetadata().get("attribution");
}
public BoundingBox getBounds() {
String bounds = getMetadata().get("bounds");
if (bounds == null)
return null;
String[] split = bounds.split(",");
double w = Double.parseDouble(split[0]);
double s = Double.parseDouble(split[1]);
double e = Double.parseDouble(split[2]);
double n = Double.parseDouble(split[3]);
return new BoundingBox(s, w, n, e);
}
public MapPosition getCenter() {
String center = getMetadata().get("center");
if (center == null)
return null;
String[] split = center.split(",");
double latitude = Double.parseDouble(split[1]);
double longitude = Double.parseDouble(split[0]);
int zoomLevel = Integer.parseInt(split[2]);
return new MapPosition(latitude, longitude, 1 << zoomLevel);
}
public String getDescription() {
return getMetadata().get("description");
}
public String getFormat() {
return getMetadata().get("format");
}
public String getId() {
return getMetadata().get("id");
}
public String getJson() {
return getMetadata().get("json");
}
public int getMaxZoom() {
String maxZoom = getMetadata().get("maxzoom");
return maxZoom != null ? Integer.parseInt(maxZoom) : Viewport.MAX_ZOOM_LEVEL;
}
private Map<String, String> getMetadata() {
if (mMetadata == null) {
mMetadata = new HashMap<>();
Cursor cursor = null;
try {
cursor = mDatabase.rawQuery(SELECT_METADATA, null);
while (cursor.moveToNext()) {
String key = cursor.getString(0);
String value = cursor.getString(1);
mMetadata.put(key, value);
}
} finally {
if (cursor != null)
cursor.close();
}
}
return mMetadata;
}
public int getMinZoom() {
String minZoom = getMetadata().get("minzoom");
return minZoom != null ? Integer.parseInt(minZoom) : Viewport.MIN_ZOOM_LEVEL;
}
public Long getMTime() {
String mTime = getMetadata().get("mtime");
return mTime != null ? Long.parseLong(mTime) : null;
}
public String getName() {
return getMetadata().get("name");
}
public Integer getPixelScale() {
String pixelScale = getMetadata().get("pixel_scale");
return pixelScale != null ? Integer.parseInt(pixelScale) : null;
}
abstract public List<String> getSupportedFormats();
public String getVersion() {
return getMetadata().get("version");
}
}

View File

@@ -1,5 +1,7 @@
/* /*
* Copyright 2017-2018 devemux86 * Copyright 2019 Andrea Antonello
* Copyright 2019 devemux86
* Copyright 2019 Kostas Tzounopoulos
* *
* This program is free software: you can redistribute it and/or modify it under the * This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software * terms of the GNU Lesser General Public License as published by the Free Software
@@ -12,25 +14,33 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.android.test; package org.oscim.android.tiling.source.mbtiles;
import android.os.Bundle; import org.oscim.tiling.TileSource;
import org.oscim.utils.Parameters; /**
* A tile source for MBTiles databases.
*/
public abstract class MBTilesTileSource extends TileSource {
public class POTTextureActivity extends SimpleMapActivity { private final MBTilesTileDataSource mTileDataSource;
@Override public MBTilesTileSource(MBTilesTileDataSource tileDataSource) {
public void onCreate(Bundle savedInstanceState) { mTileDataSource = tileDataSource;
Parameters.POT_TEXTURES = true;
super.onCreate(savedInstanceState);
} }
@Override @Override
protected void onDestroy() { public void close() {
super.onDestroy(); getDataSource().dispose();
}
Parameters.POT_TEXTURES = false; @Override
public MBTilesTileDataSource getDataSource() {
return mTileDataSource;
}
@Override
public OpenResult open() {
return OpenResult.SUCCESS;
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2018 devemux86 * Copyright 2019 Kostas Tzounopoulos
* *
* This program is free software: you can redistribute it and/or modify it under the * This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software * terms of the GNU Lesser General Public License as published by the Free Software
@@ -12,17 +12,10 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.test; package org.oscim.android.tiling.source.mbtiles;
import org.oscim.gdx.GdxMapApp; public class MBTilesUnsupportedException extends RuntimeException {
import org.oscim.utils.Parameters; public MBTilesUnsupportedException(String message) {
super(message);
public class Animator2Test extends MarkerLayerTest {
public static void main(String[] args) {
Parameters.ANIMATOR2 = true;
GdxMapApp.init();
GdxMapApp.run(new Animator2Test());
} }
} }

View File

@@ -9,7 +9,6 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application <application
android:name=".App" android:name=".App"

View File

@@ -4,7 +4,8 @@ dependencies {
implementation project(':vtm-android') implementation project(':vtm-android')
implementation project(':vtm-extras') implementation project(':vtm-extras')
implementation project(':vtm-themes') implementation project(':vtm-themes')
implementation 'com.squareup.okhttp3:okhttp:3.8.0' // https://github.com/square/okhttp/issues/4481
implementation 'com.squareup.okhttp3:okhttp:3.12.5'
implementation "org.slf4j:slf4j-android:$slf4jVersion" implementation "org.slf4j:slf4j-android:$slf4jVersion"
} }
@@ -18,8 +19,8 @@ android {
} }
defaultConfig { defaultConfig {
versionCode versionCode() versionCode project.versionCode()
versionName versionName() versionName project.versionName()
minSdkVersion androidMinSdk() minSdkVersion androidMinSdk()
targetSdkVersion androidTargetSdk() targetSdkVersion androidTargetSdk()
} }
@@ -28,7 +29,6 @@ android {
main { main {
manifest.srcFile 'AndroidManifest.xml' manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src'] java.srcDirs = ['src']
resources.srcDirs = ['src']
res.srcDirs = ['res'] res.srcDirs = ['res']
assets.srcDirs = ['assets'] assets.srcDirs = ['assets']
file("${rootDir}/vtm-android/natives").eachDir() { dir -> file("${rootDir}/vtm-android/natives").eachDir() { dir ->

View File

@@ -31,7 +31,7 @@ import org.slf4j.LoggerFactory;
public class App extends Application { public class App extends Application {
public final static Logger log = LoggerFactory.getLogger(App.class); public static final Logger log = LoggerFactory.getLogger(App.class);
public static Map map; public static Map map;
public static MapView view; public static MapView view;

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016-2018 devemux86 * Copyright 2016-2020 devemux86
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@@ -20,7 +20,6 @@ package org.oscim.app;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import org.oscim.android.cache.TileCache; import org.oscim.android.cache.TileCache;
import org.oscim.layers.GenericLayer; import org.oscim.layers.GenericLayer;
import org.oscim.layers.Layer; import org.oscim.layers.Layer;
@@ -41,9 +40,12 @@ import org.oscim.tiling.source.oscimap4.OSciMap4TileSource;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.File;
import java.util.Collections;
public class MapLayers { public class MapLayers {
final static Logger log = LoggerFactory.getLogger(MapLayers.class); static final Logger log = LoggerFactory.getLogger(MapLayers.class);
abstract static class Config { abstract static class Config {
final String name; final String name;
@@ -56,15 +58,18 @@ public class MapLayers {
} }
static Config[] configs = new Config[]{new Config("OPENSCIENCEMAP4") { static Config[] configs = new Config[]{new Config("OPENSCIENCEMAP4") {
@Override
TileSource init() { TileSource init() {
return new OSciMap4TileSource(); return new OSciMap4TileSource();
} }
}, new Config("MAPSFORGE") { }, new Config("MAPSFORGE") {
@Override
TileSource init() { TileSource init() {
return new MapFileTileSource().setOption("file", return new MapFileTileSource().setOption("file",
"/storage/sdcard0/germany.map"); new File("/sdcard/berlin.map").getAbsolutePath());
} }
}, new Config("MAPNIK_VECTOR") { }, new Config("MAPNIK_VECTOR") {
@Override
TileSource init() { TileSource init() {
return new MapnikVectorTileSource(); return new MapnikVectorTileSource();
} }
@@ -179,7 +184,9 @@ public class MapLayers {
switch (id) { switch (id) {
case R.id.menu_layer_openstreetmap: case R.id.menu_layer_openstreetmap:
mBackgroundLayer = new BitmapTileLayer(App.map, DefaultSources.OPENSTREETMAP.build()); UrlTileSource tileSource = DefaultSources.OPENSTREETMAP.build();
tileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-playground"));
mBackgroundLayer = new BitmapTileLayer(App.map, tileSource);
break; break;
case R.id.menu_layer_naturalearth: case R.id.menu_layer_naturalearth:

View File

@@ -23,19 +23,14 @@ import android.view.View;
import android.widget.Button; import android.widget.Button;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.Toast; import android.widget.Toast;
import org.oscim.android.canvas.AndroidGraphics; import org.oscim.android.canvas.AndroidGraphics;
import org.oscim.core.BoundingBox; import org.oscim.core.BoundingBox;
import org.oscim.core.GeoPoint; import org.oscim.core.GeoPoint;
import org.oscim.layers.marker.MarkerInterface;
import org.oscim.layers.marker.MarkerSymbol; import org.oscim.layers.marker.MarkerSymbol;
import org.oscim.layers.marker.MarkerSymbol.HotspotPlace; import org.oscim.layers.marker.MarkerSymbol.HotspotPlace;
import org.oscim.map.Map; import org.oscim.map.Map;
import org.osmdroid.location.FlickrPOIProvider; import org.osmdroid.location.*;
import org.osmdroid.location.FourSquareProvider;
import org.osmdroid.location.GeoNamesPOIProvider;
import org.osmdroid.location.NominatimPOIProvider;
import org.osmdroid.location.POI;
import org.osmdroid.location.PicasaPOIProvider;
import org.osmdroid.overlays.DefaultInfoWindow; import org.osmdroid.overlays.DefaultInfoWindow;
import org.osmdroid.overlays.ExtendedMarkerItem; import org.osmdroid.overlays.ExtendedMarkerItem;
import org.osmdroid.overlays.ItemizedOverlayWithBubble; import org.osmdroid.overlays.ItemizedOverlayWithBubble;
@@ -45,21 +40,21 @@ import java.util.List;
public class POISearch { public class POISearch {
private final ArrayList<POI> mPOIs; private final ArrayList<POI> mPOIs;
ItemizedOverlayWithBubble<ExtendedMarkerItem> poiMarkers; ItemizedOverlayWithBubble poiMarkers;
MarkerSymbol[] mMarkers; MarkerSymbol[] mMarkers;
private final static int MDEFAULT = 0; private static final int MDEFAULT = 0;
private final static int MFLICKR = 1; private static final int MFLICKR = 1;
private final static int MPICASA = 2; private static final int MPICASA = 2;
private final static int MWIKI16 = 3; private static final int MWIKI16 = 3;
private final static int MWIKI32 = 4; private static final int MWIKI32 = 4;
POISearch() { POISearch() {
mPOIs = new ArrayList<POI>(); mPOIs = new ArrayList<POI>();
//POI markers: //POI markers:
final ArrayList<ExtendedMarkerItem> poiItems = new ArrayList<ExtendedMarkerItem>(); final ArrayList<MarkerInterface> poiItems = new ArrayList<>();
poiMarkers = new ItemizedOverlayWithBubble<ExtendedMarkerItem>(App.map, poiMarkers = new ItemizedOverlayWithBubble(App.map,
App.activity, App.activity,
null, null,
poiItems, poiItems,
@@ -89,12 +84,12 @@ public class POISearch {
return mPOIs; return mPOIs;
} }
final static String TAG_WIKIPEDIA = "wikipedia"; static final String TAG_WIKIPEDIA = "wikipedia";
final static String TAG_FLICKR = "flickr"; static final String TAG_FLICKR = "flickr";
final static String TAG_PICASA = "picasa"; static final String TAG_PICASA = "picasa";
final static String TAG_FOURSQUARE = "foursquare"; static final String TAG_FOURSQUARE = "foursquare";
//private final static String TAG_NOMINATIM = "nominatim"; //private static final String TAG_NOMINATIM = "nominatim";
class POITask extends AsyncTask<Object, Void, List<POI>> { class POITask extends AsyncTask<Object, Void, List<POI>> {
String mTag; String mTag;

View File

@@ -24,10 +24,10 @@ import android.widget.Button;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.RelativeLayout; import android.widget.RelativeLayout;
import android.widget.TextView; import android.widget.TextView;
import org.oscim.android.canvas.AndroidGraphics; import org.oscim.android.canvas.AndroidGraphics;
import org.oscim.core.GeoPoint; import org.oscim.core.GeoPoint;
import org.oscim.layers.PathLayer; import org.oscim.layers.PathLayer;
import org.oscim.layers.marker.MarkerInterface;
import org.oscim.layers.marker.MarkerSymbol; import org.oscim.layers.marker.MarkerSymbol;
import org.oscim.layers.marker.MarkerSymbol.HotspotPlace; import org.oscim.layers.marker.MarkerSymbol.HotspotPlace;
import org.osmdroid.location.GeocoderNominatim; import org.osmdroid.location.GeocoderNominatim;
@@ -48,7 +48,7 @@ public class RouteSearch {
private final PathLayer mRouteOverlay; private final PathLayer mRouteOverlay;
//private final ItemizedOverlayWithBubble<ExtendedOverlayItem> mRouteMarkers; //private final ItemizedOverlayWithBubble<ExtendedOverlayItem> mRouteMarkers;
private final ItemizedOverlayWithBubble<ExtendedMarkerItem> mItineraryMarkers; private final ItemizedOverlayWithBubble mItineraryMarkers;
private final RouteBar mRouteBar; private final RouteBar mRouteBar;
@@ -63,9 +63,9 @@ public class RouteSearch {
mViaPoints = new ArrayList<GeoPoint>(); mViaPoints = new ArrayList<GeoPoint>();
// Itinerary markers: // Itinerary markers:
ArrayList<ExtendedMarkerItem> waypointsItems = new ArrayList<ExtendedMarkerItem>(); ArrayList<MarkerInterface> waypointsItems = new ArrayList<>();
mItineraryMarkers = new ItemizedOverlayWithBubble<ExtendedMarkerItem>(App.map, mItineraryMarkers = new ItemizedOverlayWithBubble(App.map,
App.activity, App.activity,
null, null,
waypointsItems, waypointsItems,

View File

@@ -1,6 +1,6 @@
/* Copyright 2010, 2011, 2012 mapsforge.org /* Copyright 2010, 2011, 2012 mapsforge.org
* Copyright 2012 Hannes Janetzek * Copyright 2012 Hannes Janetzek
* Copyright 2016-2017 devemux86 * Copyright 2016-2019 devemux86
* *
* This program is free software: you can redistribute it and/or modify it under the * This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software * terms of the GNU Lesser General Public License as published by the Free Software
@@ -15,11 +15,13 @@
*/ */
package org.oscim.app; package org.oscim.app;
import android.Manifest;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.net.Uri; import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
@@ -49,7 +51,7 @@ import org.slf4j.LoggerFactory;
import java.util.Map; import java.util.Map;
public class TileMap extends MapActivity implements MapEventsReceiver { public class TileMap extends MapActivity implements MapEventsReceiver {
final static Logger log = LoggerFactory.getLogger(TileMap.class); static final Logger log = LoggerFactory.getLogger(TileMap.class);
private static final int DIALOG_ENTER_COORDINATES = 0; private static final int DIALOG_ENTER_COORDINATES = 0;
private static final int DIALOG_LOCATION_PROVIDER_DISABLED = 2; private static final int DIALOG_LOCATION_PROVIDER_DISABLED = 2;
@@ -73,6 +75,11 @@ public class TileMap extends MapActivity implements MapEventsReceiver {
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 0);
}
setContentView(R.layout.activity_tilemap); setContentView(R.layout.activity_tilemap);
App.view = (MapView) findViewById(R.id.mapView); App.view = (MapView) findViewById(R.id.mapView);
registerMapView(App.view); registerMapView(App.view);

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright 2010, 2011, 2012 mapsforge.org * Copyright 2010, 2011, 2012 mapsforge.org
* Copyright 2016 devemux86 * Copyright 2016-2019 devemux86
* *
* This program is free software: you can redistribute it and/or modify it under the * This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software * terms of the GNU Lesser General Public License as published by the Free Software
@@ -24,11 +24,9 @@ import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor; import android.content.SharedPreferences.Editor;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment;
import android.view.View; import android.view.View;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.GridView; import android.widget.GridView;
import org.oscim.app.R; import org.oscim.app.R;
import org.oscim.app.filefilter.ValidFileFilter; import org.oscim.app.filefilter.ValidFileFilter;
@@ -62,7 +60,6 @@ public class FilePicker extends Activity implements AdapterView.OnItemClickListe
public static final String SELECTED_FILE = "selectedFile"; public static final String SELECTED_FILE = "selectedFile";
private static final String CURRENT_DIRECTORY = "currentDirectory"; private static final String CURRENT_DIRECTORY = "currentDirectory";
private static final String DEFAULT_DIRECTORY = Environment.getExternalStorageDirectory().getAbsolutePath();
private static final int DIALOG_FILE_INVALID = 0; private static final int DIALOG_FILE_INVALID = 0;
// private static final int DIALOG_FILE_SELECT = 1; // private static final int DIALOG_FILE_SELECT = 1;
private static Comparator<File> fileComparator = getDefaultFileComparator(); private static Comparator<File> fileComparator = getDefaultFileComparator();
@@ -125,6 +122,7 @@ public class FilePicker extends Activity implements AdapterView.OnItemClickListe
} }
private File currentDirectory; private File currentDirectory;
private String defaultDirectory;
private FilePickerIconAdapter filePickerIconAdapter; private FilePickerIconAdapter filePickerIconAdapter;
private File[] files; private File[] files;
private File[] filesWithParentFolder; private File[] filesWithParentFolder;
@@ -166,7 +164,7 @@ public class FilePicker extends Activity implements AdapterView.OnItemClickListe
} }
// if a parent directory exists, add it at the first position // if a parent directory exists, add it at the first position
if (this.currentDirectory.getParentFile() != null) { if (this.currentDirectory.getParentFile() != null && this.currentDirectory.getParentFile().canRead()) {
this.filesWithParentFolder = new File[this.files.length + 1]; this.filesWithParentFolder = new File[this.files.length + 1];
this.filesWithParentFolder[0] = this.currentDirectory.getParentFile(); this.filesWithParentFolder[0] = this.currentDirectory.getParentFile();
System.arraycopy(this.files, 0, this.filesWithParentFolder, 1, System.arraycopy(this.files, 0, this.filesWithParentFolder, 1,
@@ -184,6 +182,7 @@ public class FilePicker extends Activity implements AdapterView.OnItemClickListe
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file_picker); setContentView(R.layout.activity_file_picker);
defaultDirectory = getExternalFilesDir(null) != null ? getExternalFilesDir(null).getAbsolutePath() : "/sdcard/";
this.filePickerIconAdapter = new FilePickerIconAdapter(this); this.filePickerIconAdapter = new FilePickerIconAdapter(this);
GridView gridView = (GridView) findViewById(R.id.filePickerView); GridView gridView = (GridView) findViewById(R.id.filePickerView);
gridView.setOnItemClickListener(this); gridView.setOnItemClickListener(this);
@@ -254,10 +253,9 @@ public class FilePicker extends Activity implements AdapterView.OnItemClickListe
// restore the current directory // restore the current directory
SharedPreferences preferences = getSharedPreferences(PREFERENCES_FILE, SharedPreferences preferences = getSharedPreferences(PREFERENCES_FILE,
MODE_PRIVATE); MODE_PRIVATE);
this.currentDirectory = new File(preferences.getString(CURRENT_DIRECTORY, this.currentDirectory = new File(preferences.getString(CURRENT_DIRECTORY, defaultDirectory));
DEFAULT_DIRECTORY));
if (!this.currentDirectory.exists() || !this.currentDirectory.canRead()) { if (!this.currentDirectory.exists() || !this.currentDirectory.canRead()) {
this.currentDirectory = new File(DEFAULT_DIRECTORY); this.currentDirectory = new File(defaultDirectory);
} }
browseToCurrentDirectory(); browseToCurrentDirectory();
} }

Some files were not shown because too many files have changed in this diff Show More