113 Commits

Author SHA1 Message Date
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
194 changed files with 4447 additions and 2425 deletions

View File

@@ -4,8 +4,8 @@ jdk:
- openjdk8 - openjdk8
env: env:
global: global:
- ANDROID=28 - ANDROID=29
- ANDROID_BUILD_TOOLS=28.0.3 - ANDROID_BUILD_TOOLS=29.0.2
- 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=

View File

@@ -8,7 +8,7 @@
VTM (Vector Tile Map) was developed within the [OpenScienceMap](https://github.com/opensciencemap) project. VTM (Vector Tile Map) was developed within the [OpenScienceMap](https://github.com/opensciencemap) project.
**This fork continues VTM development and provides compatibility with latest [Mapsforge](https://github.com/mapsforge/mapsforge).** **This fork continues VTM development and provides compatibility with [Mapsforge](https://github.com/mapsforge/mapsforge).**
See the **[integration guide](docs/Integration.md)** and [changelog](docs/Changelog.md). And read through [how to contribute](docs/CONTRIBUTING.md) guidelines. See the **[integration guide](docs/Integration.md)** and [changelog](docs/Changelog.md). And read through [how to contribute](docs/CONTRIBUTING.md) guidelines.
@@ -21,6 +21,7 @@ If you have any questions or problems, don't hesitate to ask our public [forum](
- Support for multiple tile sources: - Support for multiple tile sources:
- OpenScienceMap vector tiles - OpenScienceMap vector tiles
- Mapsforge vector maps - Mapsforge vector maps
- MBTiles vector & raster maps
- Mapbox vector tiles (e.g. Mapilion, Mapzen, Nextzen, OpenMapTiles) - 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
@@ -37,6 +38,8 @@ If you have any questions or problems, don't hesitate to ask our public [forum](
- **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

View File

@@ -4,7 +4,7 @@ buildscript {
jcenter() jcenter()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.3.2' classpath 'com.android.tools.build:gradle:3.5.3'
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' 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.3" ext.androidBuildVersionTools = "29.0.2"
ext.gdxVersion = "1.9.9" 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 }
@@ -44,12 +44,12 @@ subprojects {
google() google()
maven { url 'https://repo.boundlessgeo.com/main/' } 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,6 +6,7 @@
| [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 |
| [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 |

View File

@@ -1,5 +1,37 @@
# Changelog # Changelog
## 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) ## Version 0.11.1 (2019-04-12)
- MBTiles raster tile source (Android) [#708](https://github.com/mapsforge/vtm/pull/708) - MBTiles raster tile source (Android) [#708](https://github.com/mapsforge/vtm/pull/708)
@@ -173,7 +205,8 @@
- 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)

View File

@@ -1,5 +1 @@
For questions or discussion please always use our Forum first and make sure you read our Contributing Guide. For questions, reports and discussion please always use the [forum](https://groups.google.com/group/mapsforge-dev).
- Forum: https://groups.google.com/group/mapsforge-dev
- Contributing Guide: https://github.com/mapsforge/vtm/blob/master/docs/CONTRIBUTING.md

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.9' implementation 'com.badlogicgames.gdx:gdx:1.9.10'
implementation 'com.badlogicgames.gdx:gdx-backend-android:1.9.9' 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,47 +56,75 @@ 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.9' implementation 'org.mapsforge:vtm-desktop-lwjgl:[CURRENT-VERSION]'
implementation 'com.badlogicgames.gdx:gdx-platform:1.9.9:natives-desktop' implementation 'com.badlogicgames.gdx:gdx:1.9.10'
implementation 'com.badlogicgames.gdx:gdx-backend-lwjgl:1.9.9' 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)

View File

@@ -3,9 +3,9 @@
- [AndroidMaps](http://www.androidmaps.co.uk/) - [AndroidMaps](http://www.androidmaps.co.uk/)
- [Freizeitkarte](http://www.freizeitkarte-osm.de/android/en/index.html) - [Freizeitkarte](http://www.freizeitkarte-osm.de/android/en/index.html)
- [Kurviger](https://offline-maps.kurviger.de/) - [Kurviger](https://offline-maps.kurviger.de/)
- [Locusvectormaps](http://www.locusvectormaps.com)
- [Mapsforge](http://download.mapsforge.org/) - [Mapsforge](http://download.mapsforge.org/)
- [OpenAndroMaps](http://www.openandromaps.org/en/) - [OpenAndroMaps](http://www.openandromaps.org/en/)
- [OpenMaps](http://openmaps.eu/) - [OpenMaps](http://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 [forum](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

@@ -15,3 +15,5 @@ The jar file can be found in `build/libs` folder. Depending on the main class, p
``` ```
java -jar vtm-playground-master-SNAPSHOT-jar-with-dependencies.jar /path/to/map 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`.

View File

@@ -11,3 +11,9 @@ org.gradle.jvmargs=-Xmx1536m
# 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

View File

@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

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" />
@@ -235,9 +237,13 @@
<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">

View File

@@ -3,8 +3,11 @@ 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-gdx-poi3d'

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,15 +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=".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" />
@@ -49,9 +45,6 @@
<activity <activity
android:name=".JeoIndoorActivity" android:name=".JeoIndoorActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
<activity
android:name=".LayerGroupActivity"
android:configChanges="keyboardHidden|orientation|screenSize" />
<activity <activity
android:name=".LineTexActivity" android:name=".LineTexActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
@@ -61,9 +54,6 @@
<activity <activity
android:name=".LocationTextureActivity" android:name=".LocationTextureActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
<activity
android:name=".MapEventLayer2Activity"
android:configChanges="keyboardHidden|orientation|screenSize" />
<activity <activity
android:name=".MapilionMvtActivity" android:name=".MapilionMvtActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
@@ -92,10 +82,10 @@
android:name=".MarkerOverlayActivity" android:name=".MarkerOverlayActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
<activity <activity
android:name=".MBTilesBitmapTileActivity" android:name=".MBTilesBitmapActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
<activity <activity
android:name=".MultiMapViewActivity" android:name=".MBTilesMvtActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
<activity <activity
android:name=".NextzenGeojsonActivity" android:name=".NextzenGeojsonActivity"
@@ -106,9 +96,6 @@
<activity <activity
android:name=".OpenMapTilesMvtActivity" android:name=".OpenMapTilesMvtActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
<activity
android:name=".OSciMapS3DBActivity"
android:configChanges="keyboardHidden|orientation|screenSize" />
<activity <activity
android:name=".OverpassActivity" android:name=".OverpassActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />
@@ -121,15 +108,9 @@
<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
android:name=".RotateMarkerOverlayActivity"
android:configChanges="keyboardHidden|orientation|screenSize" />
<activity <activity
android:name=".ShadowActivity" android:name=".ShadowActivity"
android:configChanges="keyboardHidden|orientation|screenSize" /> android:configChanges="keyboardHidden|orientation|screenSize" />

View File

@@ -1,14 +1,8 @@
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-extras')
implementation project(':vtm-http') implementation project(':vtm-http')
implementation project(':vtm-jeo') implementation project(':vtm-jeo')
@@ -22,11 +16,11 @@ dependencies {
implementation project(':vtm-gdx') implementation project(':vtm-gdx')
implementation project(':vtm-gdx-poi3d') implementation project(':vtm-gdx-poi3d')
implementation 'org.mapsforge:mapsforge-poi-android:master-SNAPSHOT' implementation 'org.mapsforge:mapsforge-poi-android:0.13.0'
implementation 'org.mapsforge:sqlite-android:master-SNAPSHOT:natives-armeabi-v7a' implementation 'org.mapsforge:sqlite-android:0.13.0:natives-armeabi-v7a'
implementation 'org.mapsforge:sqlite-android:master-SNAPSHOT:natives-arm64-v8a' implementation 'org.mapsforge:sqlite-android:0.13.0:natives-arm64-v8a'
implementation 'org.mapsforge:sqlite-android:master-SNAPSHOT:natives-x86' implementation 'org.mapsforge:sqlite-android:0.13.0:natives-x86'
implementation 'org.mapsforge:sqlite-android:master-SNAPSHOT:natives-x86_64' implementation 'org.mapsforge:sqlite-android:0.13.0:natives-x86_64'
} }
android { android {
@@ -39,8 +33,8 @@ android {
} }
defaultConfig { defaultConfig {
versionCode versionCode() versionCode project.versionCode()
versionName versionName() versionName project.versionName()
minSdkVersion androidMinSdk() minSdkVersion androidMinSdk()
targetSdkVersion androidTargetSdk() targetSdkVersion androidTargetSdk()
} }

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

@@ -26,7 +26,7 @@
<string name="search_value">void or value</string> <string name="search_value">void or value</string>
<string name="now">Now</string> <string name="now">Now</string>
<string name="warning">Warning</string> <string name="warning">Warning</string>
<string name="startup_message_mbtiles">To run this sample activity, you need any MBTiles with filename test.mbtiles installed on storage.\n\nadb push file.mbtiles /sdcard/test.mbtiles</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> <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,5 +1,5 @@
/* /*
* Copyright 2016-2018 devemux86 * Copyright 2016-2019 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,16 +15,12 @@
*/ */
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.TileSource;
import org.oscim.tiling.source.OkHttpEngine; import org.oscim.tiling.source.OkHttpEngine;
@@ -33,8 +29,6 @@ import org.oscim.tiling.source.bitmap.DefaultSources;
import java.util.ArrayList; import java.util.ArrayList;
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;
@@ -50,7 +44,7 @@ public class ClusterMarkerOverlayActivity extends MarkerOverlayActivity {
.build(); .build();
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);

View File

@@ -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,7 +33,8 @@ 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 berlin.map from download.mapsforge.org in device storage. * You'll need a map with filename berlin.map from download.mapsforge.org in device storage:
* /sdcard/Android/data/org.oscim.android.test/files/
*/ */
public class GettingStarted extends Activity { public class GettingStarted extends Activity {
@@ -55,7 +54,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);

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

@@ -1,6 +1,7 @@
/* /*
* Copyright 2019 Andrea Antonello * Copyright 2019 Andrea Antonello
* Copyright 2019 devemux86 * 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
@@ -18,8 +19,8 @@ package org.oscim.android.test;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment;
import org.oscim.android.tiling.source.mbtiles.MBTilesBitmapTileSource; 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.BoundingBox;
import org.oscim.core.MapPosition; import org.oscim.core.MapPosition;
import org.oscim.core.Tile; import org.oscim.core.Tile;
@@ -28,19 +29,19 @@ import org.oscim.layers.tile.bitmap.BitmapTileLayer;
import java.io.File; import java.io.File;
/** /**
* An example activity making use of MBTiles. * An example activity making use of raster MBTiles.
*/ */
public class MBTilesBitmapTileActivity extends BitmapTileActivity { public class MBTilesBitmapActivity extends BitmapTileActivity {
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
File file = new File(Environment.getExternalStorageDirectory(), "test.mbtiles"); File file = new File(getExternalFilesDir(null), "raster.mbtiles");
if (!file.exists()) { if (!file.exists()) {
AlertDialog.Builder builder = new AlertDialog.Builder(this) AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle(R.string.warning) .setTitle(R.string.warning)
.setMessage(R.string.startup_message_mbtiles) .setMessage(getResources().getString(R.string.startup_message_mbtiles, file.getName(), file.getAbsolutePath()))
.setPositiveButton(R.string.exit, new DialogInterface.OnClickListener() { .setPositiveButton(R.string.exit, new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
@@ -51,7 +52,8 @@ public class MBTilesBitmapTileActivity extends BitmapTileActivity {
return; return;
} }
MBTilesBitmapTileSource tileSource = new MBTilesBitmapTileSource(file.getAbsolutePath(), 128, null); MBTilesTileSource tileSource = new MBTilesBitmapTileSource(file.getAbsolutePath(), 128, null);
BitmapTileLayer bitmapLayer = new BitmapTileLayer(mMap, tileSource); BitmapTileLayer bitmapLayer = new BitmapTileLayer(mMap, tileSource);
mMap.layers().add(bitmapLayer); mMap.layers().add(bitmapLayer);
@@ -59,7 +61,7 @@ public class MBTilesBitmapTileActivity extends BitmapTileActivity {
MapPosition pos = new MapPosition(); MapPosition pos = new MapPosition();
mMap.getMapPosition(pos); mMap.getMapPosition(pos);
if (pos.x == 0.5 && pos.y == 0.5) { if (pos.x == 0.5 && pos.y == 0.5) {
BoundingBox bbox = tileSource.getBounds(); BoundingBox bbox = tileSource.getDataSource().getBounds();
if (bbox != null) { if (bbox != null) {
pos.setByBoundingBox(bbox, Tile.SIZE * 4, Tile.SIZE * 4); pos.setByBoundingBox(bbox, Tile.SIZE * 4, Tile.SIZE * 4);
mMap.setMapPosition(pos); 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

@@ -1,32 +0,0 @@
/*
* Copyright 2016-2017 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 org.oscim.utils.Parameters;
public class MapEventLayer2Activity extends MarkerOverlayActivity {
public MapEventLayer2Activity() {
super();
Parameters.MAP_EVENT_LAYER2 = true;
}
@Override
protected void onDestroy() {
super.onDestroy();
Parameters.MAP_EVENT_LAYER2 = false;
}
}

View File

@@ -14,8 +14,11 @@
*/ */
package org.oscim.android.test; package org.oscim.android.test;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import okhttp3.CipherSuite;
import okhttp3.ConnectionSpec;
import okhttp3.OkHttpClient;
import org.oscim.android.cache.TileCache; import org.oscim.android.cache.TileCache;
import org.oscim.layers.tile.bitmap.BitmapTileLayer; import org.oscim.layers.tile.bitmap.BitmapTileLayer;
import org.oscim.layers.tile.buildings.BuildingLayer; import org.oscim.layers.tile.buildings.BuildingLayer;
@@ -27,6 +30,10 @@ import org.oscim.tiling.source.UrlTileSource;
import org.oscim.tiling.source.bitmap.DefaultSources; import org.oscim.tiling.source.bitmap.DefaultSources;
import org.oscim.tiling.source.mvt.MapilionMvtTileSource; import org.oscim.tiling.source.mvt.MapilionMvtTileSource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MapilionMvtActivity extends MapActivity { public class MapilionMvtActivity extends MapActivity {
// Metered API key for demonstration purposes // Metered API key for demonstration purposes
@@ -40,7 +47,23 @@ public class MapilionMvtActivity extends MapActivity {
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
OkHttpEngine.OkHttpFactory factory = new OkHttpEngine.OkHttpFactory(); 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() UrlTileSource tileSource = MapilionMvtTileSource.builder()
.apiKey(API_KEY) .apiKey(API_KEY)

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).
* *
@@ -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;
@@ -39,8 +40,6 @@ import org.oscim.tiling.source.bitmap.DefaultSources;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import static org.oscim.android.canvas.AndroidGraphics.drawableToBitmap;
public class MarkerOverlayActivity extends MapActivity public class MarkerOverlayActivity extends MapActivity
implements ItemizedLayer.OnItemGestureListener<MarkerItem> { implements ItemizedLayer.OnItemGestureListener<MarkerItem> {
@@ -64,14 +63,14 @@ public class MarkerOverlayActivity extends MapActivity
.build(); .build();
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

View File

@@ -1,91 +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;
@Override
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

@@ -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

@@ -1,36 +0,0 @@
/*
* 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 POTTextureActivity extends SimpleMapActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
Parameters.POT_TEXTURES = true;
super.onCreate(savedInstanceState);
}
@Override
protected void onDestroy() {
super.onDestroy();
Parameters.POT_TEXTURES = false;
}
}

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2017-2018 devemux86 * Copyright 2017-2019 devemux86
* Copyright 2018 Gustl22 * 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
@@ -17,6 +17,7 @@ package org.oscim.android.test;
import android.content.Context; 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.Editable;
@@ -25,20 +26,11 @@ import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ArrayAdapter; import android.widget.*;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.ToggleButton;
import org.mapsforge.core.model.Tag; 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;
@@ -60,8 +52,6 @@ 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/>
@@ -162,7 +152,7 @@ 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<MarkerItem>(), symbol, this);
mMap.layers().add(mMarkerLayer); mMap.layers().add(mMarkerLayer);

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

@@ -9,6 +9,7 @@
* Copyright 2018 boldtrn * Copyright 2018 boldtrn
* Copyright 2018-2019 Gustl22 * Copyright 2018-2019 Gustl22
* Copyright 2019 Andrea Antonello * 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).
* *
@@ -88,12 +89,13 @@ 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(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"));
@@ -110,37 +112,25 @@ public class Samples extends Activity {
linearLayout.addView(createLabel("Vector Features")); linearLayout.addView(createLabel("Vector Features"));
linearLayout.addView(createButton(MapsforgeStyleActivity.class)); linearLayout.addView(createButton(MapsforgeStyleActivity.class));
linearLayout.addView(createButton(MapsforgeS3DBActivity.class)); linearLayout.addView(createButton(MapsforgeS3DBActivity.class));
linearLayout.addView(createButton(AtlasThemeActivity.class));
linearLayout.addView(createButton(POTTextureActivity.class));
linearLayout.addView(createButton(ShadowActivity.class)); linearLayout.addView(createButton(ShadowActivity.class));
linearLayout.addView(createLabel("Raster Maps")); linearLayout.addView(createLabel("Raster Maps"));
linearLayout.addView(createButton(BitmapTileActivity.class)); linearLayout.addView(createButton(BitmapTileActivity.class));
linearLayout.addView(createButton(MBTilesBitmapTileActivity.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(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(GdxPoi3DActivity.class));
linearLayout.addView(createButton(OverpassActivity.class)); linearLayout.addView(createButton(OverpassActivity.class));
linearLayout.addView(createButton(ClusterMarkerOverlayActivity.class));
} }
} }

View File

@@ -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()
} }

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()
} }

View File

@@ -65,12 +65,21 @@ public class MapView extends GLSurfaceView {
private static final Pattern GL_PATTERN = Pattern.compile("OpenGL ES (\\d(\\.\\d){0,2})"); private static final Pattern GL_PATTERN = Pattern.compile("OpenGL ES (\\d(\\.\\d){0,2})");
/** /**
* Target OpenGL ES version, if not available fall back to OpenGL ES 2.0 * 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 targetGLESVersion = 3.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;
@@ -125,16 +134,20 @@ public class MapView extends GLSurfaceView {
mMap = new AndroidMap(this); mMap = new AndroidMap(this);
/* Initialize Renderer */ /* Initialize Renderer */
// OpenGL ES 3.0 is supported with Android 4.3 (API level 18) and higher if (OPENGL_VERSION == 2.0)
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); 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());
if (GLAdapter.debug) if (GLAdapter.debug)
@@ -346,23 +359,27 @@ public class MapView extends GLSurfaceView {
@Override @Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) { public void onSurfaceCreated(GL10 gl, EGLConfig config) {
try { if (OPENGL_VERSION == 2.0)
// 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 = version[0];
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()); 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

@@ -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-2018 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;
@@ -90,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

@@ -28,7 +28,6 @@
package org.oscim.android.gl; package org.oscim.android.gl;
import android.opengl.GLSurfaceView; import android.opengl.GLSurfaceView;
import org.oscim.android.MapView; import org.oscim.android.MapView;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -51,18 +50,18 @@ public class GlContextFactory implements GLSurfaceView.EGLContextFactory {
@Override @Override
public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig) { public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig) {
log.info("creating OpenGL ES " + MapView.targetGLESVersion + " context"); log.info("creating OpenGL ES " + MapView.OPENGL_VERSION + " context");
checkEglError("Before eglCreateContext " + MapView.targetGLESVersion, egl); checkEglError("Before eglCreateContext " + MapView.OPENGL_VERSION, egl);
int[] attrib_list = {EGL_CONTEXT_CLIENT_VERSION, (int) MapView.targetGLESVersion, EGL10.EGL_NONE}; 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); EGLContext context = egl.eglCreateContext(display, eglConfig, EGL10.EGL_NO_CONTEXT, attrib_list);
boolean success = checkEglError("After eglCreateContext " + MapView.targetGLESVersion, egl); boolean success = checkEglError("After eglCreateContext " + MapView.OPENGL_VERSION, egl);
if ((!success || context == null) && MapView.targetGLESVersion > 2) { if ((!success || context == null) && MapView.OPENGL_VERSION > 2) {
log.warn("Falling back to GLES 2"); log.warn("Falling back to GLES 2");
MapView.targetGLESVersion = 2.0; MapView.OPENGL_VERSION = 2.0;
return createContext(egl, display, eglConfig); return createContext(egl, display, eglConfig);
} }
log.info("Returning a GLES " + MapView.targetGLESVersion + " context"); log.info("Returning a GLES " + MapView.OPENGL_VERSION + " context");
return context; return context;
} }

View File

@@ -1,6 +1,7 @@
/* /*
* Copyright 2019 Andrea Antonello * Copyright 2019 Andrea Antonello
* Copyright 2019 devemux86 * 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
@@ -16,144 +17,70 @@
package org.oscim.android.tiling.source.mbtiles; package org.oscim.android.tiling.source.mbtiles;
import android.database.Cursor; import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.Paint; import android.graphics.Paint;
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.core.BoundingBox;
import org.oscim.core.MercatorProjection; import org.oscim.core.MercatorProjection;
import org.oscim.layers.tile.MapTile; import org.oscim.layers.tile.MapTile;
import org.oscim.map.Viewport;
import org.oscim.tiling.ITileDataSink; import org.oscim.tiling.ITileDataSink;
import org.oscim.tiling.ITileDataSource;
import org.oscim.tiling.QueryResult; import org.oscim.tiling.QueryResult;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.util.HashMap; import java.util.Arrays;
import java.util.Map; import java.util.List;
/** /**
* A tile data source for MBTiles raster databases. * A tile data source for MBTiles raster databases.
*/ */
public class MBTilesBitmapTileDataSource implements ITileDataSource { public class MBTilesBitmapTileDataSource extends MBTilesTileDataSource {
private static final Logger log = LoggerFactory.getLogger(MBTilesBitmapTileDataSource.class); private static final Logger log = LoggerFactory.getLogger(MBTilesBitmapTileDataSource.class);
private static final String TABLE_TILES = "tiles"; private static final List<String> SUPPORTED_FORMATS = Arrays.asList("png", "jpg", "jpeg");
private static final String COL_TILES_ZOOM_LEVEL = "zoom_level";
private static final String COL_TILES_TILE_COLUMN = "tile_column";
private static final String COL_TILES_TILE_ROW = "tile_row";
private static final String COL_TILES_TILE_DATA = "tile_data";
private static final String SELECT_TILES = "SELECT " + COL_TILES_TILE_DATA + " from " + TABLE_TILES + " where "
+ COL_TILES_ZOOM_LEVEL + "=? AND " + COL_TILES_TILE_COLUMN + "=? AND " + COL_TILES_TILE_ROW + "=?";
private static final String TABLE_METADATA = "metadata";
private static final String COL_METADATA_NAME = "name";
private static final String COL_METADATA_VALUE = "value";
private static final String SELECT_METADATA = "select " + COL_METADATA_NAME + "," + COL_METADATA_VALUE + " from "
+ TABLE_METADATA;
private final Integer mAlpha; private final Integer mAlpha;
private final SQLiteDatabase mDatabase;
private Map<String, String> mMetadata;
private final Integer mTransparentColor; private final Integer mTransparentColor;
/** /**
* Create a MBTiles tile data source. * Create a tile data source for MBTiles raster databases.
* *
* @param path the path to the MBTiles database. * @param path the path to the MBTiles database.
* @param alpha an optional alpha value [0-255] to make the tiles transparent. * @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. * @param transparentColor an optional color that will be made transparent in the bitmap.
*/ */
MBTilesBitmapTileDataSource(String path, Integer alpha, Integer transparentColor) { public MBTilesBitmapTileDataSource(String path, Integer alpha, Integer transparentColor) {
mDatabase = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY); super(path);
mAlpha = alpha; mAlpha = alpha;
mTransparentColor = transparentColor; mTransparentColor = transparentColor;
try {
assertDatabaseFormat();
} catch (MBTilesUnsupportedException e) {
log.error("Invalid MBTiles database", e);
}
} }
@Override @Override
public void cancel() { public void cancel() {
mDatabase.close(); if (mDatabase != null && mDatabase.isOpen())
mDatabase.close();
} }
@Override @Override
public void dispose() { public void dispose() {
mDatabase.close(); if (mDatabase != null && mDatabase.isOpen())
mDatabase.close();
} }
String getAttribution() { @Override
return getMetadata().get("attribution"); public List<String> getSupportedFormats() {
} return SUPPORTED_FORMATS;
BoundingBox getBounds() {
String bounds = getMetadata().get("bounds");
if (bounds != 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);
}
return null;
}
public String getDescription() {
return getMetadata().get("description");
}
/**
* @return the image format (jpg, png)
*/
public String getFormat() {
return getMetadata().get("format");
}
int getMaxZoom() {
String maxZoom = getMetadata().get("maxzoom");
if (maxZoom != null)
return Integer.parseInt(maxZoom);
return 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;
}
int getMinZoom() {
String minZoom = getMetadata().get("minzoom");
if (minZoom != null)
return Integer.parseInt(minZoom);
return Viewport.MIN_ZOOM_LEVEL;
}
String getName() {
return getMetadata().get("name");
}
public String getVersion() {
return getMetadata().get("version");
} }
private static android.graphics.Bitmap processAlpha(android.graphics.Bitmap bitmap, int alpha) { private static android.graphics.Bitmap processAlpha(android.graphics.Bitmap bitmap, int alpha) {
@@ -216,9 +143,9 @@ public class MBTilesBitmapTileDataSource implements ITileDataSource {
Cursor cursor = null; Cursor cursor = null;
try { try {
long tmsTileY = MercatorProjection.tileYToTMS(tileY, zoomLevel); long tmsTileY = MercatorProjection.tileYToTMS(tileY, zoomLevel);
cursor = mDatabase.rawQuery(SELECT_TILES, new String[]{String.valueOf(zoomLevel), String.valueOf(tileX), String.valueOf(tmsTileY)}); 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()) if (cursor.moveToFirst())
return cursor.getBlob(0); return cursor.getBlob(cursor.getColumnIndexOrThrow("tile_data"));
} finally { } finally {
if (cursor != null) if (cursor != null)
cursor.close(); cursor.close();

View File

@@ -1,6 +1,7 @@
/* /*
* Copyright 2019 Andrea Antonello * Copyright 2019 Andrea Antonello
* Copyright 2019 devemux86 * 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
@@ -15,19 +16,13 @@
*/ */
package org.oscim.android.tiling.source.mbtiles; package org.oscim.android.tiling.source.mbtiles;
import org.oscim.core.BoundingBox;
import org.oscim.tiling.ITileDataSource;
import org.oscim.tiling.TileSource;
/** /**
* A tile source for MBTiles raster databases. * A tile source for MBTiles raster databases.
*/ */
public class MBTilesBitmapTileSource extends TileSource { public class MBTilesBitmapTileSource extends MBTilesTileSource {
private final MBTilesBitmapTileDataSource mTileDataSource;
/** /**
* Create a MBTiles tile source. * Create a tile source for MBTiles raster databases.
* *
* @param path the path to the MBTiles database. * @param path the path to the MBTiles database.
*/ */
@@ -36,64 +31,13 @@ public class MBTilesBitmapTileSource extends TileSource {
} }
/** /**
* Create a MBTiles tile source. * Create a tile source for MBTiles raster databases.
* *
* @param path the path to the MBTiles database. * @param path the path to the MBTiles database.
* @param alpha an optional alpha value [0-255] to make the tiles transparent. * @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. * @param transparentColor an optional color that will be made transparent in the bitmap.
*/ */
public MBTilesBitmapTileSource(String path, Integer alpha, Integer transparentColor) { public MBTilesBitmapTileSource(String path, Integer alpha, Integer transparentColor) {
mTileDataSource = new MBTilesBitmapTileDataSource(path, alpha, transparentColor); super(new MBTilesBitmapTileDataSource(path, alpha, transparentColor));
}
@Override
public void close() {
mTileDataSource.dispose();
}
public String getAttribution() {
return mTileDataSource.getAttribution();
}
public BoundingBox getBounds() {
return mTileDataSource.getBounds();
}
@Override
public ITileDataSource getDataSource() {
return mTileDataSource;
}
public String getDescription() {
return mTileDataSource.getDescription();
}
/**
* @return the image format (jpg, png)
*/
public String getFormat() {
return mTileDataSource.getFormat();
}
public int getMaxZoom() {
return mTileDataSource.getMaxZoom();
}
public int getMinZoom() {
return mTileDataSource.getMinZoom();
}
public String getName() {
return mTileDataSource.getName();
}
public String getVersion() {
return mTileDataSource.getVersion();
}
@Override
public OpenResult open() {
return OpenResult.SUCCESS;
} }
} }

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,6 +1,7 @@
/* /*
* Copyright 2017 Longri * Copyright 2019 Andrea Antonello
* Copyright 2017-2018 devemux86 * 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
@@ -13,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 AtlasThemeActivity extends SimpleMapActivity { private final MBTilesTileDataSource mTileDataSource;
@Override public MBTilesTileSource(MBTilesTileDataSource tileDataSource) {
public void onCreate(Bundle savedInstanceState) { mTileDataSource = tileDataSource;
Parameters.TEXTURE_ATLAS = true;
super.onCreate(savedInstanceState);
} }
@Override @Override
protected void onDestroy() { public void close() {
super.onDestroy(); getDataSource().dispose();
}
Parameters.TEXTURE_ATLAS = false; @Override
public MBTilesTileDataSource getDataSource() {
return mTileDataSource;
}
@Override
public OpenResult open() {
return OpenResult.SUCCESS;
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2016-2017 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 MapEventLayer2Test extends MarkerLayerTest {
public static void main(String[] args) {
Parameters.MAP_EVENT_LAYER2 = true;
GdxMapApp.init();
GdxMapApp.run(new MapEventLayer2Test());
} }
} }

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()
} }

View File

@@ -19,9 +19,7 @@ package org.oscim.app;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.os.Environment;
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;
@@ -67,7 +65,7 @@ public class MapLayers {
@Override @Override
TileSource init() { TileSource init() {
return new MapFileTileSource().setOption("file", return new MapFileTileSource().setOption("file",
new File(Environment.getExternalStorageDirectory(), "berlin.map").getAbsolutePath()); new File("/sdcard/berlin.map").getAbsolutePath());
} }
}, new Config("MAPNIK_VECTOR") { }, new Config("MAPNIK_VECTOR") {
@Override @Override

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;
@@ -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();
} }

View File

@@ -1,7 +1,7 @@
/* /*
* Copyright 2013 Ahmad Saleem * Copyright 2013 Ahmad Saleem
* Copyright 2013 Hannes Janetzek * Copyright 2013 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
@@ -24,19 +24,17 @@ import android.hardware.SensorManager;
import android.view.animation.Animation; import android.view.animation.Animation;
import android.view.animation.RotateAnimation; import android.view.animation.RotateAnimation;
import android.widget.ImageView; import android.widget.ImageView;
import org.oscim.app.App; import org.oscim.app.App;
import org.oscim.app.R; import org.oscim.app.R;
import org.oscim.core.MapPosition; import org.oscim.core.MapPosition;
import org.oscim.event.Event; import org.oscim.event.Event;
import org.oscim.layers.Layer; import org.oscim.layers.Layer;
import org.oscim.map.Map; import org.oscim.map.Map;
import org.oscim.renderer.LocationRenderer; import org.oscim.renderer.LocationCallback;
import org.oscim.utils.FastMath; import org.oscim.utils.FastMath;
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public class Compass extends Layer implements SensorEventListener, Map.UpdateListener, public class Compass extends Layer implements SensorEventListener, Map.UpdateListener, LocationCallback {
LocationRenderer.Callback {
// static final Logger log = LoggerFactory.getLogger(Compass.class); // static final Logger log = LoggerFactory.getLogger(Compass.class);

View File

@@ -0,0 +1,19 @@
apply plugin: 'java-library'
apply plugin: 'maven'
dependencies {
api project(':vtm-desktop')
api "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion"
}
sourceSets {
main {
java.srcDirs = ['src']
}
}
if (project.hasProperty("SONATYPE_USERNAME")) {
afterEvaluate {
project.apply from: "${rootProject.projectDir}/deploy.gradle"
}
}

View File

@@ -23,7 +23,6 @@ import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
import com.badlogic.gdx.graphics.glutils.GLVersion; import com.badlogic.gdx.graphics.glutils.GLVersion;
import com.badlogic.gdx.utils.SharedLibraryLoader; import com.badlogic.gdx.utils.SharedLibraryLoader;
import org.oscim.awt.AwtGraphics; import org.oscim.awt.AwtGraphics;
import org.oscim.backend.DateTime; import org.oscim.backend.DateTime;
import org.oscim.backend.DateTimeAdapter; import org.oscim.backend.DateTimeAdapter;
@@ -66,7 +65,7 @@ public class GdxMapApp extends GdxMap {
protected static LwjglApplicationConfiguration getConfig(String title) { protected static LwjglApplicationConfiguration getConfig(String title) {
LwjglApplicationConfiguration.disableAudio = true; LwjglApplicationConfiguration.disableAudio = true;
LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration();
cfg.title = title != null ? title : "vtm-gdx"; cfg.title = title != null ? title : "vtm-gdx-lwjgl";
int[] sizes = new int[]{128, 64, 32, 16}; int[] sizes = new int[]{128, 64, 32, 16};
for (int size : sizes) { for (int size : sizes) {

View File

@@ -33,23 +33,11 @@
package org.oscim.gdx; package org.oscim.gdx;
import com.badlogic.gdx.utils.GdxRuntimeException; import com.badlogic.gdx.utils.GdxRuntimeException;
import org.lwjgl.BufferUtils; import org.lwjgl.BufferUtils;
import org.lwjgl.opengl.EXTFramebufferObject; import org.lwjgl.opengl.*;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL13;
import org.lwjgl.opengl.GL14;
import org.lwjgl.opengl.GL15;
import org.lwjgl.opengl.GL20;
import org.oscim.backend.GL; import org.oscim.backend.GL;
import java.nio.Buffer; import java.nio.*;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.DoubleBuffer;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import java.nio.ShortBuffer;
/** /**
* An implementation of the {@link GL20} interface based on LWJGL. Note that LWJGL shaders and OpenGL ES shaders will not be 100% * An implementation of the {@link GL20} interface based on LWJGL. Note that LWJGL shaders and OpenGL ES shaders will not be 100%

View File

@@ -17,32 +17,14 @@
package org.oscim.gdx; package org.oscim.gdx;
import com.badlogic.gdx.utils.GdxRuntimeException; import com.badlogic.gdx.utils.GdxRuntimeException;
import org.lwjgl.opengl.*;
import org.lwjgl.opengl.GL11; import java.nio.*;
import org.lwjgl.opengl.GL12;
import org.lwjgl.opengl.GL15;
import org.lwjgl.opengl.GL20;
import org.lwjgl.opengl.GL21;
import org.lwjgl.opengl.GL31;
import org.lwjgl.opengl.GL32;
import org.lwjgl.opengl.GL33;
import org.lwjgl.opengl.GL40;
import org.lwjgl.opengl.GL41;
import org.lwjgl.opengl.GL43;
import org.oscim.backend.GL30;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.DoubleBuffer;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import java.nio.LongBuffer;
import java.nio.ShortBuffer;
/** /**
* See https://github.com/libgdx/libgdx/blob/master/backends/gdx-backend-lwjgl3/src/com/badlogic/gdx/backends/lwjgl3/Lwjgl3GL30.java * See https://github.com/libgdx/libgdx/blob/master/backends/gdx-backend-lwjgl/src/com/badlogic/gdx/backends/lwjgl/LwjglGL30.java
*/ */
public class LwjglGL30 extends LwjglGL20 implements GL30 { public class LwjglGL30 extends LwjglGL20 implements org.oscim.backend.GL30 {
@Override @Override
public void readBuffer(int mode) { public void readBuffer(int mode) {
GL11.glReadBuffer(mode); GL11.glReadBuffer(mode);
@@ -222,246 +204,246 @@ public class LwjglGL30 extends LwjglGL20 implements GL30 {
@Override @Override
public void blitFramebuffer(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, public void blitFramebuffer(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1,
int mask, int filter) { int mask, int filter) {
org.lwjgl.opengl.GL30.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); GL30.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
} }
@Override @Override
public void bindFramebuffer(int target, int framebuffer) { public void bindFramebuffer(int target, int framebuffer) {
org.lwjgl.opengl.GL30.glBindFramebuffer(target, framebuffer); GL30.glBindFramebuffer(target, framebuffer);
} }
@Override @Override
public void bindRenderbuffer(int target, int renderbuffer) { public void bindRenderbuffer(int target, int renderbuffer) {
org.lwjgl.opengl.GL30.glBindRenderbuffer(target, renderbuffer); GL30.glBindRenderbuffer(target, renderbuffer);
} }
@Override @Override
public int checkFramebufferStatus(int target) { public int checkFramebufferStatus(int target) {
return org.lwjgl.opengl.GL30.glCheckFramebufferStatus(target); return GL30.glCheckFramebufferStatus(target);
} }
@Override @Override
public void deleteFramebuffers(int n, IntBuffer framebuffers) { public void deleteFramebuffers(int n, IntBuffer framebuffers) {
org.lwjgl.opengl.GL30.glDeleteFramebuffers(framebuffers); GL30.glDeleteFramebuffers(framebuffers);
} }
@Override @Override
public void deleteFramebuffer(int framebuffer) { public void deleteFramebuffer(int framebuffer) {
org.lwjgl.opengl.GL30.glDeleteFramebuffers(framebuffer); GL30.glDeleteFramebuffers(framebuffer);
} }
@Override @Override
public void deleteRenderbuffers(int n, IntBuffer renderbuffers) { public void deleteRenderbuffers(int n, IntBuffer renderbuffers) {
org.lwjgl.opengl.GL30.glDeleteRenderbuffers(renderbuffers); GL30.glDeleteRenderbuffers(renderbuffers);
} }
@Override @Override
public void deleteRenderbuffer(int renderbuffer) { public void deleteRenderbuffer(int renderbuffer) {
org.lwjgl.opengl.GL30.glDeleteRenderbuffers(renderbuffer); GL30.glDeleteRenderbuffers(renderbuffer);
} }
@Override @Override
public void generateMipmap(int target) { public void generateMipmap(int target) {
org.lwjgl.opengl.GL30.glGenerateMipmap(target); GL30.glGenerateMipmap(target);
} }
@Override @Override
public void genFramebuffers(int n, IntBuffer framebuffers) { public void genFramebuffers(int n, IntBuffer framebuffers) {
org.lwjgl.opengl.GL30.glGenFramebuffers(framebuffers); GL30.glGenFramebuffers(framebuffers);
} }
@Override @Override
public int genFramebuffer() { public int genFramebuffer() {
return org.lwjgl.opengl.GL30.glGenFramebuffers(); return GL30.glGenFramebuffers();
} }
@Override @Override
public void genRenderbuffers(int n, IntBuffer renderbuffers) { public void genRenderbuffers(int n, IntBuffer renderbuffers) {
org.lwjgl.opengl.GL30.glGenRenderbuffers(renderbuffers); GL30.glGenRenderbuffers(renderbuffers);
} }
@Override @Override
public int genRenderbuffer() { public int genRenderbuffer() {
return org.lwjgl.opengl.GL30.glGenRenderbuffers(); return GL30.glGenRenderbuffers();
} }
@Override @Override
public void getRenderbufferParameteriv(int target, int pname, IntBuffer params) { public void getRenderbufferParameteriv(int target, int pname, IntBuffer params) {
org.lwjgl.opengl.GL30.glGetRenderbufferParameter(target, pname, params); GL30.glGetRenderbufferParameter(target, pname, params);
} }
@Override @Override
public boolean isFramebuffer(int framebuffer) { public boolean isFramebuffer(int framebuffer) {
return org.lwjgl.opengl.GL30.glIsFramebuffer(framebuffer); return GL30.glIsFramebuffer(framebuffer);
} }
@Override @Override
public boolean isRenderbuffer(int renderbuffer) { public boolean isRenderbuffer(int renderbuffer) {
return org.lwjgl.opengl.GL30.glIsRenderbuffer(renderbuffer); return GL30.glIsRenderbuffer(renderbuffer);
} }
@Override @Override
public void renderbufferStorage(int target, int internalformat, int width, int height) { public void renderbufferStorage(int target, int internalformat, int width, int height) {
org.lwjgl.opengl.GL30.glRenderbufferStorage(target, internalformat, width, height); GL30.glRenderbufferStorage(target, internalformat, width, height);
} }
@Override @Override
public void renderbufferStorageMultisample(int target, int samples, int internalformat, int width, int height) { public void renderbufferStorageMultisample(int target, int samples, int internalformat, int width, int height) {
org.lwjgl.opengl.GL30.glRenderbufferStorageMultisample(target, samples, internalformat, width, height); GL30.glRenderbufferStorageMultisample(target, samples, internalformat, width, height);
} }
@Override @Override
public void framebufferTexture2D(int target, int attachment, int textarget, int texture, int level) { public void framebufferTexture2D(int target, int attachment, int textarget, int texture, int level) {
org.lwjgl.opengl.GL30.glFramebufferTexture2D(target, attachment, textarget, texture, level); GL30.glFramebufferTexture2D(target, attachment, textarget, texture, level);
} }
@Override @Override
public void framebufferRenderbuffer(int target, int attachment, int renderbuffertarget, int renderbuffer) { public void framebufferRenderbuffer(int target, int attachment, int renderbuffertarget, int renderbuffer) {
org.lwjgl.opengl.GL30.glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); GL30.glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
} }
@Override @Override
public void framebufferTextureLayer(int target, int attachment, int texture, int level, int layer) { public void framebufferTextureLayer(int target, int attachment, int texture, int level, int layer) {
org.lwjgl.opengl.GL30.glFramebufferTextureLayer(target, attachment, texture, level, layer); GL30.glFramebufferTextureLayer(target, attachment, texture, level, layer);
} }
@Override @Override
public void flushMappedBufferRange(int target, int offset, int length) { public void flushMappedBufferRange(int target, int offset, int length) {
org.lwjgl.opengl.GL30.glFlushMappedBufferRange(target, offset, length); GL30.glFlushMappedBufferRange(target, offset, length);
} }
@Override @Override
public void bindVertexArray(int array) { public void bindVertexArray(int array) {
org.lwjgl.opengl.GL30.glBindVertexArray(array); GL30.glBindVertexArray(array);
} }
@Override @Override
public void deleteVertexArrays(int n, int[] arrays, int offset) { public void deleteVertexArrays(int n, int[] arrays, int offset) {
for (int i = offset; i < offset + n; i++) { for (int i = offset; i < offset + n; i++) {
org.lwjgl.opengl.GL30.glDeleteVertexArrays(arrays[i]); GL30.glDeleteVertexArrays(arrays[i]);
} }
} }
@Override @Override
public void deleteVertexArrays(int n, IntBuffer arrays) { public void deleteVertexArrays(int n, IntBuffer arrays) {
org.lwjgl.opengl.GL30.glDeleteVertexArrays(arrays); GL30.glDeleteVertexArrays(arrays);
} }
@Override @Override
public void genVertexArrays(int n, int[] arrays, int offset) { public void genVertexArrays(int n, int[] arrays, int offset) {
for (int i = offset; i < offset + n; i++) { for (int i = offset; i < offset + n; i++) {
arrays[i] = org.lwjgl.opengl.GL30.glGenVertexArrays(); arrays[i] = GL30.glGenVertexArrays();
} }
} }
@Override @Override
public void genVertexArrays(int n, IntBuffer arrays) { public void genVertexArrays(int n, IntBuffer arrays) {
org.lwjgl.opengl.GL30.glGenVertexArrays(arrays); GL30.glGenVertexArrays(arrays);
} }
@Override @Override
public boolean isVertexArray(int array) { public boolean isVertexArray(int array) {
return org.lwjgl.opengl.GL30.glIsVertexArray(array); return GL30.glIsVertexArray(array);
} }
@Override @Override
public void beginTransformFeedback(int primitiveMode) { public void beginTransformFeedback(int primitiveMode) {
org.lwjgl.opengl.GL30.glBeginTransformFeedback(primitiveMode); GL30.glBeginTransformFeedback(primitiveMode);
} }
@Override @Override
public void endTransformFeedback() { public void endTransformFeedback() {
org.lwjgl.opengl.GL30.glEndTransformFeedback(); GL30.glEndTransformFeedback();
} }
@Override @Override
public void bindBufferRange(int target, int index, int buffer, int offset, int size) { public void bindBufferRange(int target, int index, int buffer, int offset, int size) {
org.lwjgl.opengl.GL30.glBindBufferRange(target, index, buffer, offset, size); GL30.glBindBufferRange(target, index, buffer, offset, size);
} }
@Override @Override
public void bindBufferBase(int target, int index, int buffer) { public void bindBufferBase(int target, int index, int buffer) {
org.lwjgl.opengl.GL30.glBindBufferBase(target, index, buffer); GL30.glBindBufferBase(target, index, buffer);
} }
@Override @Override
public void transformFeedbackVaryings(int program, String[] varyings, int bufferMode) { public void transformFeedbackVaryings(int program, String[] varyings, int bufferMode) {
org.lwjgl.opengl.GL30.glTransformFeedbackVaryings(program, varyings, bufferMode); GL30.glTransformFeedbackVaryings(program, varyings, bufferMode);
} }
@Override @Override
public void vertexAttribIPointer(int index, int size, int type, int stride, int offset) { public void vertexAttribIPointer(int index, int size, int type, int stride, int offset) {
org.lwjgl.opengl.GL30.glVertexAttribIPointer(index, size, type, stride, offset); GL30.glVertexAttribIPointer(index, size, type, stride, offset);
} }
@Override @Override
public void getVertexAttribIiv(int index, int pname, IntBuffer params) { public void getVertexAttribIiv(int index, int pname, IntBuffer params) {
org.lwjgl.opengl.GL30.glGetVertexAttribI(index, pname, params); GL30.glGetVertexAttribI(index, pname, params);
} }
@Override @Override
public void getVertexAttribIuiv(int index, int pname, IntBuffer params) { public void getVertexAttribIuiv(int index, int pname, IntBuffer params) {
org.lwjgl.opengl.GL30.glGetVertexAttribIu(index, pname, params); GL30.glGetVertexAttribIu(index, pname, params);
} }
@Override @Override
public void vertexAttribI4i(int index, int x, int y, int z, int w) { public void vertexAttribI4i(int index, int x, int y, int z, int w) {
org.lwjgl.opengl.GL30.glVertexAttribI4i(index, x, y, z, w); GL30.glVertexAttribI4i(index, x, y, z, w);
} }
@Override @Override
public void vertexAttribI4ui(int index, int x, int y, int z, int w) { public void vertexAttribI4ui(int index, int x, int y, int z, int w) {
org.lwjgl.opengl.GL30.glVertexAttribI4ui(index, x, y, z, w); GL30.glVertexAttribI4ui(index, x, y, z, w);
} }
@Override @Override
public void getUniformuiv(int program, int location, IntBuffer params) { public void getUniformuiv(int program, int location, IntBuffer params) {
org.lwjgl.opengl.GL30.glGetUniformu(program, location, params); GL30.glGetUniformu(program, location, params);
} }
@Override @Override
public int getFragDataLocation(int program, String name) { public int getFragDataLocation(int program, String name) {
return org.lwjgl.opengl.GL30.glGetFragDataLocation(program, name); return GL30.glGetFragDataLocation(program, name);
} }
@Override @Override
public void uniform1uiv(int location, int count, IntBuffer value) { public void uniform1uiv(int location, int count, IntBuffer value) {
org.lwjgl.opengl.GL30.glUniform1u(location, value); GL30.glUniform1u(location, value);
} }
@Override @Override
public void uniform3uiv(int location, int count, IntBuffer value) { public void uniform3uiv(int location, int count, IntBuffer value) {
org.lwjgl.opengl.GL30.glUniform3u(location, value); GL30.glUniform3u(location, value);
} }
@Override @Override
public void uniform4uiv(int location, int count, IntBuffer value) { public void uniform4uiv(int location, int count, IntBuffer value) {
org.lwjgl.opengl.GL30.glUniform4u(location, value); GL30.glUniform4u(location, value);
} }
@Override @Override
public void clearBufferiv(int buffer, int drawbuffer, IntBuffer value) { public void clearBufferiv(int buffer, int drawbuffer, IntBuffer value) {
org.lwjgl.opengl.GL30.glClearBuffer(buffer, drawbuffer, value); GL30.glClearBuffer(buffer, drawbuffer, value);
} }
@Override @Override
public void clearBufferuiv(int buffer, int drawbuffer, IntBuffer value) { public void clearBufferuiv(int buffer, int drawbuffer, IntBuffer value) {
org.lwjgl.opengl.GL30.glClearBufferu(buffer, drawbuffer, value); GL30.glClearBufferu(buffer, drawbuffer, value);
} }
@Override @Override
public void clearBufferfv(int buffer, int drawbuffer, FloatBuffer value) { public void clearBufferfv(int buffer, int drawbuffer, FloatBuffer value) {
org.lwjgl.opengl.GL30.glClearBuffer(buffer, drawbuffer, value); GL30.glClearBuffer(buffer, drawbuffer, value);
} }
@Override @Override
public void clearBufferfi(int buffer, int drawbuffer, float depth, int stencil) { public void clearBufferfi(int buffer, int drawbuffer, float depth, int stencil) {
org.lwjgl.opengl.GL30.glClearBufferfi(buffer, drawbuffer, depth, stencil); GL30.glClearBufferfi(buffer, drawbuffer, depth, stencil);
} }
@Override @Override
public String getStringi(int name, int index) { public String getStringi(int name, int index) {
return org.lwjgl.opengl.GL30.glGetStringi(name, index); return GL30.glGetStringi(name, index);
} }
@Override @Override

View File

@@ -0,0 +1,19 @@
apply plugin: 'java-library'
apply plugin: 'maven'
dependencies {
api project(':vtm-desktop')
api "com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion"
}
sourceSets {
main {
java.srcDirs = ['src']
}
}
if (project.hasProperty("SONATYPE_USERNAME")) {
afterEvaluate {
project.apply from: "${rootProject.projectDir}/deploy.gradle"
}
}

View File

@@ -0,0 +1,105 @@
/*
* Copyright 2013 Hannes Janetzek
* Copyright 2016-2018 devemux86
* Copyright 2018-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/>.
*/
package org.oscim.gdx;
import com.badlogic.gdx.Files;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration;
import com.badlogic.gdx.graphics.glutils.GLVersion;
import com.badlogic.gdx.utils.SharedLibraryLoader;
import org.oscim.awt.AwtGraphics;
import org.oscim.backend.DateTime;
import org.oscim.backend.DateTimeAdapter;
import org.oscim.backend.GLAdapter;
import org.oscim.core.Tile;
import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.oscimap4.OSciMap4TileSource;
import org.oscim.utils.FastMath;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class GdxMapApp extends GdxMap {
public static final Logger log = LoggerFactory.getLogger(GdxMapApp.class);
public static void init() {
// load native library
new SharedLibraryLoader().load("vtm-jni");
// init globals
AwtGraphics.init();
GdxAssets.init("assets/");
DateTimeAdapter.init(new DateTime());
}
public static void main(String[] args) {
init();
new Lwjgl3Application(new GdxMapApp(), getConfig(null));
}
public static void run(GdxMap map) {
run(map, null, Tile.SIZE);
}
public static void run(GdxMap map, Lwjgl3ApplicationConfiguration config, int tileSize) {
Tile.SIZE = FastMath.clamp(tileSize, 128, 512);
new Lwjgl3Application(map, (config == null ? getConfig(map.getClass().getSimpleName()) : config));
}
protected static Lwjgl3ApplicationConfiguration getConfig(String title) {
Lwjgl3ApplicationConfiguration cfg = new Lwjgl3ApplicationConfiguration();
cfg.disableAudio(true);
cfg.setTitle(title != null ? title : "vtm-gdx-lwjgl3");
int[] sizes = new int[]{128, 64, 32, 16};
String[] paths = new String[sizes.length];
for (int i = 0; i < paths.length; i++)
paths[i] = "res/ic_vtm_" + sizes[i] + ".png";
cfg.setWindowIcon(Files.FileType.Internal, paths);
cfg.setWindowedMode(1024, 768);
cfg.setBackBufferConfig(8, 8, 8, 8, 16, 8, /*2*/0);
//cfg.useOpenGL3(true, 3, 2);
cfg.setIdleFPS(10);
//cfg.forceExit = false;
return cfg;
}
@Override
protected void initGLAdapter(GLVersion version) {
if (version.getMajorVersion() >= 3)
GLAdapter.init(new Lwjgl3GL30());
else
GLAdapter.init(new Lwjgl3GL20());
}
@Override
public void createLayers() {
TileSource tileSource = new OSciMap4TileSource();
initDefaultLayers(tileSource, false, true, true);
mMap.setMapPosition(0, 0, 1 << 2);
}
@Override
public void dispose() {
System.exit(0);
}
}

View File

@@ -0,0 +1,997 @@
/*******************************************************************************
* Copyright 2011 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 com.badlogic.gdx.utils.GdxRuntimeException;
import org.lwjgl.BufferUtils;
import org.lwjgl.opengl.*;
import org.oscim.backend.GL;
import java.nio.*;
/**
* See https://github.com/libgdx/libgdx/blob/master/backends/gdx-backend-lwjgl3/src/com/badlogic/gdx/backends/lwjgl3/Lwjgl3GL20.java
*/
public class Lwjgl3GL20 implements GL {
private ByteBuffer buffer = null;
private FloatBuffer floatBuffer = null;
private IntBuffer intBuffer = null;
private void ensureBufferCapacity(int numBytes) {
if (buffer == null || buffer.capacity() < numBytes) {
buffer = com.badlogic.gdx.utils.BufferUtils.newByteBuffer(numBytes);
floatBuffer = buffer.asFloatBuffer();
intBuffer = buffer.asIntBuffer();
}
}
private FloatBuffer toFloatBuffer(float v[], int offset, int count) {
ensureBufferCapacity(count << 2);
floatBuffer.clear();
floatBuffer.limit(count);
floatBuffer.put(v, offset, count);
floatBuffer.position(0);
return floatBuffer;
}
private IntBuffer toIntBuffer(int v[], int offset, int count) {
ensureBufferCapacity(count << 2);
intBuffer.clear();
intBuffer.limit(count);
intBuffer.put(v, offset, count);
intBuffer.position(0);
return intBuffer;
}
@Override
public void activeTexture(int texture) {
GL13.glActiveTexture(texture);
}
@Override
public void attachShader(int program, int shader) {
GL20.glAttachShader(program, shader);
}
@Override
public void bindAttribLocation(int program, int index, String name) {
GL20.glBindAttribLocation(program, index, name);
}
@Override
public void bindBuffer(int target, int buffer) {
GL15.glBindBuffer(target, buffer);
}
@Override
public void bindFramebuffer(int target, int framebuffer) {
EXTFramebufferObject.glBindFramebufferEXT(target, framebuffer);
}
@Override
public void bindRenderbuffer(int target, int renderbuffer) {
EXTFramebufferObject.glBindRenderbufferEXT(target, renderbuffer);
}
@Override
public void bindTexture(int target, int texture) {
GL11.glBindTexture(target, texture);
}
@Override
public void blendColor(float red, float green, float blue, float alpha) {
GL14.glBlendColor(red, green, blue, alpha);
}
@Override
public void blendEquation(int mode) {
GL14.glBlendEquation(mode);
}
@Override
public void blendEquationSeparate(int modeRGB, int modeAlpha) {
GL20.glBlendEquationSeparate(modeRGB, modeAlpha);
}
@Override
public void blendFunc(int sfactor, int dfactor) {
GL11.glBlendFunc(sfactor, dfactor);
}
@Override
public void blendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha) {
GL14.glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
}
@Override
public void bufferData(int target, int size, Buffer data, int usage) {
if (data == null)
GL15.glBufferData(target, size, usage);
else if (data instanceof ByteBuffer)
GL15.glBufferData(target, (ByteBuffer) data, usage);
else if (data instanceof IntBuffer)
GL15.glBufferData(target, (IntBuffer) data, usage);
else if (data instanceof FloatBuffer)
GL15.glBufferData(target, (FloatBuffer) data, usage);
else if (data instanceof DoubleBuffer)
GL15.glBufferData(target, (DoubleBuffer) data, usage);
else if (data instanceof ShortBuffer) //
GL15.glBufferData(target, (ShortBuffer) data, usage);
}
@Override
public void bufferSubData(int target, int offset, int size, Buffer data) {
if (data == null)
throw new GdxRuntimeException("Using null for the data not possible, blame LWJGL");
else if (data instanceof ByteBuffer)
GL15.glBufferSubData(target, offset, (ByteBuffer) data);
else if (data instanceof IntBuffer)
GL15.glBufferSubData(target, offset, (IntBuffer) data);
else if (data instanceof FloatBuffer)
GL15.glBufferSubData(target, offset, (FloatBuffer) data);
else if (data instanceof DoubleBuffer)
GL15.glBufferSubData(target, offset, (DoubleBuffer) data);
else if (data instanceof ShortBuffer) //
GL15.glBufferSubData(target, offset, (ShortBuffer) data);
}
@Override
public int checkFramebufferStatus(int target) {
return EXTFramebufferObject.glCheckFramebufferStatusEXT(target);
}
@Override
public void clear(int mask) {
GL11.glClear(mask);
}
@Override
public void clearColor(float red, float green, float blue, float alpha) {
GL11.glClearColor(red, green, blue, alpha);
}
@Override
public void clearDepthf(float depth) {
GL11.glClearDepth(depth);
}
@Override
public void clearStencil(int s) {
GL11.glClearStencil(s);
}
@Override
public void colorMask(boolean red, boolean green, boolean blue, boolean alpha) {
GL11.glColorMask(red, green, blue, alpha);
}
@Override
public void compileShader(int shader) {
GL20.glCompileShader(shader);
}
@Override
public void compressedTexImage2D(int target, int level, int internalformat, int width, int height, int border,
int imageSize, Buffer data) {
if (data instanceof ByteBuffer) {
GL13.glCompressedTexImage2D(target, level, internalformat, width, height, border, (ByteBuffer) data);
} else {
throw new GdxRuntimeException("Can't use " + data.getClass().getName() + " with this method. Use ByteBuffer instead.");
}
}
@Override
public void compressedTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format,
int imageSize, Buffer data) {
throw new GdxRuntimeException("not implemented");
}
@Override
public void copyTexImage2D(int target, int level, int internalformat, int x, int y, int width, int height, int border) {
GL11.glCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
}
@Override
public void copyTexSubImage2D(int target, int level, int xoffset, int yoffset, int x, int y, int width, int height) {
GL11.glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
}
@Override
public int createProgram() {
return GL20.glCreateProgram();
}
@Override
public int createShader(int type) {
return GL20.glCreateShader(type);
}
@Override
public void cullFace(int mode) {
GL11.glCullFace(mode);
}
@Override
public void deleteBuffers(int n, IntBuffer buffers) {
GL15.glDeleteBuffers(buffers);
}
@Override
public void deleteBuffer(int buffer) {
GL15.glDeleteBuffers(buffer);
}
@Override
public void deleteFramebuffers(int n, IntBuffer framebuffers) {
EXTFramebufferObject.glDeleteFramebuffersEXT(framebuffers);
}
@Override
public void deleteFramebuffer(int framebuffer) {
EXTFramebufferObject.glDeleteFramebuffersEXT(framebuffer);
}
@Override
public void deleteProgram(int program) {
GL20.glDeleteProgram(program);
}
@Override
public void deleteRenderbuffers(int n, IntBuffer renderbuffers) {
EXTFramebufferObject.glDeleteRenderbuffersEXT(renderbuffers);
}
@Override
public void deleteRenderbuffer(int renderbuffer) {
EXTFramebufferObject.glDeleteRenderbuffersEXT(renderbuffer);
}
@Override
public void deleteShader(int shader) {
GL20.glDeleteShader(shader);
}
@Override
public void deleteTextures(int n, IntBuffer textures) {
GL11.glDeleteTextures(textures);
}
@Override
public void deleteTexture(int texture) {
GL11.glDeleteTextures(texture);
}
@Override
public void depthFunc(int func) {
GL11.glDepthFunc(func);
}
@Override
public void depthMask(boolean flag) {
GL11.glDepthMask(flag);
}
@Override
public void depthRangef(float zNear, float zFar) {
GL11.glDepthRange(zNear, zFar);
}
@Override
public void detachShader(int program, int shader) {
GL20.glDetachShader(program, shader);
}
@Override
public void disable(int cap) {
GL11.glDisable(cap);
}
@Override
public void disableVertexAttribArray(int index) {
GL20.glDisableVertexAttribArray(index);
}
@Override
public void drawArrays(int mode, int first, int count) {
GL11.glDrawArrays(mode, first, count);
}
@Override
public void drawElements(int mode, int count, int type, Buffer indices) {
if (indices instanceof ShortBuffer && type == com.badlogic.gdx.graphics.GL20.GL_UNSIGNED_SHORT)
GL11.glDrawElements(mode, (ShortBuffer) indices);
else if (indices instanceof ByteBuffer && type == com.badlogic.gdx.graphics.GL20.GL_UNSIGNED_SHORT)
GL11.glDrawElements(mode, ((ByteBuffer) indices).asShortBuffer());
else if (indices instanceof ByteBuffer && type == com.badlogic.gdx.graphics.GL20.GL_UNSIGNED_BYTE)
GL11.glDrawElements(mode, (ByteBuffer) indices);
else
throw new GdxRuntimeException("Can't use " + indices.getClass().getName()
+ " with this method. Use ShortBuffer or ByteBuffer instead. Blame LWJGL");
}
@Override
public void enable(int cap) {
GL11.glEnable(cap);
}
@Override
public void enableVertexAttribArray(int index) {
GL20.glEnableVertexAttribArray(index);
}
@Override
public void finish() {
GL11.glFinish();
}
@Override
public void flush() {
GL11.glFlush();
}
@Override
public void framebufferRenderbuffer(int target, int attachment, int renderbuffertarget, int renderbuffer) {
EXTFramebufferObject.glFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer);
}
@Override
public void framebufferTexture2D(int target, int attachment, int textarget, int texture, int level) {
EXTFramebufferObject.glFramebufferTexture2DEXT(target, attachment, textarget, texture, level);
}
@Override
public void frontFace(int mode) {
GL11.glFrontFace(mode);
}
@Override
public void genBuffers(int n, IntBuffer buffers) {
GL15.glGenBuffers(buffers);
}
@Override
public int genBuffer() {
return GL15.glGenBuffers();
}
@Override
public void genFramebuffers(int n, IntBuffer framebuffers) {
EXTFramebufferObject.glGenFramebuffersEXT(framebuffers);
}
@Override
public int genFramebuffer() {
return EXTFramebufferObject.glGenFramebuffersEXT();
}
@Override
public void genRenderbuffers(int n, IntBuffer renderbuffers) {
EXTFramebufferObject.glGenRenderbuffersEXT(renderbuffers);
}
@Override
public int genRenderbuffer() {
return EXTFramebufferObject.glGenRenderbuffersEXT();
}
@Override
public void genTextures(int n, IntBuffer textures) {
GL11.glGenTextures(textures);
}
@Override
public int genTexture() {
return GL11.glGenTextures();
}
@Override
public void generateMipmap(int target) {
EXTFramebufferObject.glGenerateMipmapEXT(target);
}
@Override
public String getActiveAttrib(int program, int index, IntBuffer size, Buffer type) {
IntBuffer typeTmp = BufferUtils.createIntBuffer(2);
String name = GL20.glGetActiveAttrib(program, index, 256, size, typeTmp);
size.put(typeTmp.get(0));
if (type instanceof IntBuffer) ((IntBuffer) type).put(typeTmp.get(1));
return name;
}
@Override
public String getActiveUniform(int program, int index, IntBuffer size, Buffer type) {
IntBuffer typeTmp = BufferUtils.createIntBuffer(2);
String name = GL20.glGetActiveUniform(program, index, 256, size, typeTmp);
size.put(typeTmp.get(0));
if (type instanceof IntBuffer) ((IntBuffer) type).put(typeTmp.get(1));
return name;
}
@Override
public void getAttachedShaders(int program, int maxcount, Buffer count, IntBuffer shaders) {
GL20.glGetAttachedShaders(program, (IntBuffer) count, shaders);
}
@Override
public int getAttribLocation(int program, String name) {
return GL20.glGetAttribLocation(program, name);
}
@Override
public void getBooleanv(int pname, Buffer params) {
GL11.glGetBooleanv(pname, (ByteBuffer) params);
}
@Override
public void getBufferParameteriv(int target, int pname, IntBuffer params) {
GL15.glGetBufferParameteriv(target, pname, params);
}
@Override
public int getError() {
return GL11.glGetError();
}
@Override
public void getFloatv(int pname, FloatBuffer params) {
GL11.glGetFloatv(pname, params);
}
@Override
public void getFramebufferAttachmentParameteriv(int target, int attachment, int pname, IntBuffer params) {
EXTFramebufferObject.glGetFramebufferAttachmentParameterivEXT(target, attachment, pname, params);
}
@Override
public void getIntegerv(int pname, IntBuffer params) {
GL11.glGetIntegerv(pname, params);
}
@Override
public String getProgramInfoLog(int program) {
ByteBuffer buffer = ByteBuffer.allocateDirect(1024 * 10);
buffer.order(ByteOrder.nativeOrder());
ByteBuffer tmp = ByteBuffer.allocateDirect(4);
tmp.order(ByteOrder.nativeOrder());
IntBuffer intBuffer = tmp.asIntBuffer();
GL20.glGetProgramInfoLog(program, intBuffer, buffer);
int numBytes = intBuffer.get(0);
byte[] bytes = new byte[numBytes];
buffer.get(bytes);
return new String(bytes);
}
@Override
public void getProgramiv(int program, int pname, IntBuffer params) {
GL20.glGetProgramiv(program, pname, params);
}
@Override
public void getRenderbufferParameteriv(int target, int pname, IntBuffer params) {
EXTFramebufferObject.glGetRenderbufferParameterivEXT(target, pname, params);
}
@Override
public String getShaderInfoLog(int shader) {
ByteBuffer buffer = ByteBuffer.allocateDirect(1024 * 10);
buffer.order(ByteOrder.nativeOrder());
ByteBuffer tmp = ByteBuffer.allocateDirect(4);
tmp.order(ByteOrder.nativeOrder());
IntBuffer intBuffer = tmp.asIntBuffer();
GL20.glGetShaderInfoLog(shader, intBuffer, buffer);
int numBytes = intBuffer.get(0);
byte[] bytes = new byte[numBytes];
buffer.get(bytes);
return new String(bytes);
}
@Override
public void getShaderPrecisionFormat(int shadertype, int precisiontype, IntBuffer range, IntBuffer precision) {
throw new UnsupportedOperationException("unsupported, won't implement");
}
@Override
public void getShaderiv(int shader, int pname, IntBuffer params) {
GL20.glGetShaderiv(shader, pname, params);
}
@Override
public String getString(int name) {
return GL11.glGetString(name);
}
@Override
public void getTexParameterfv(int target, int pname, FloatBuffer params) {
GL11.glGetTexParameterfv(target, pname, params);
}
@Override
public void getTexParameteriv(int target, int pname, IntBuffer params) {
GL11.glGetTexParameteriv(target, pname, params);
}
@Override
public int getUniformLocation(int program, String name) {
return GL20.glGetUniformLocation(program, name);
}
@Override
public void getUniformfv(int program, int location, FloatBuffer params) {
GL20.glGetUniformfv(program, location, params);
}
@Override
public void getUniformiv(int program, int location, IntBuffer params) {
GL20.glGetUniformiv(program, location, params);
}
@Override
public void getVertexAttribPointerv(int index, int pname, Buffer pointer) {
throw new UnsupportedOperationException("unsupported, won't implement");
}
@Override
public void getVertexAttribfv(int index, int pname, FloatBuffer params) {
GL20.glGetVertexAttribfv(index, pname, params);
}
@Override
public void getVertexAttribiv(int index, int pname, IntBuffer params) {
GL20.glGetVertexAttribiv(index, pname, params);
}
@Override
public void hint(int target, int mode) {
GL11.glHint(target, mode);
}
@Override
public boolean isBuffer(int buffer) {
return GL15.glIsBuffer(buffer);
}
@Override
public boolean isEnabled(int cap) {
return GL11.glIsEnabled(cap);
}
@Override
public boolean isFramebuffer(int framebuffer) {
return EXTFramebufferObject.glIsFramebufferEXT(framebuffer);
}
@Override
public boolean isProgram(int program) {
return GL20.glIsProgram(program);
}
@Override
public boolean isRenderbuffer(int renderbuffer) {
return EXTFramebufferObject.glIsRenderbufferEXT(renderbuffer);
}
@Override
public boolean isShader(int shader) {
return GL20.glIsShader(shader);
}
@Override
public boolean isTexture(int texture) {
return GL11.glIsTexture(texture);
}
@Override
public void lineWidth(float width) {
GL11.glLineWidth(width);
}
@Override
public void linkProgram(int program) {
GL20.glLinkProgram(program);
}
@Override
public void pixelStorei(int pname, int param) {
GL11.glPixelStorei(pname, param);
}
@Override
public void polygonOffset(float factor, float units) {
GL11.glPolygonOffset(factor, units);
}
@Override
public void readPixels(int x, int y, int width, int height, int format, int type, Buffer pixels) {
if (pixels instanceof ByteBuffer)
GL11.glReadPixels(x, y, width, height, format, type, (ByteBuffer) pixels);
else if (pixels instanceof ShortBuffer)
GL11.glReadPixels(x, y, width, height, format, type, (ShortBuffer) pixels);
else if (pixels instanceof IntBuffer)
GL11.glReadPixels(x, y, width, height, format, type, (IntBuffer) pixels);
else if (pixels instanceof FloatBuffer)
GL11.glReadPixels(x, y, width, height, format, type, (FloatBuffer) pixels);
else
throw new GdxRuntimeException("Can't use " + pixels.getClass().getName()
+ " with this method. Use ByteBuffer, ShortBuffer, IntBuffer or FloatBuffer instead. Blame LWJGL");
}
@Override
public void releaseShaderCompiler() {
// nothing to do here
}
@Override
public void renderbufferStorage(int target, int internalformat, int width, int height) {
EXTFramebufferObject.glRenderbufferStorageEXT(target, internalformat, width, height);
}
@Override
public void sampleCoverage(float value, boolean invert) {
GL13.glSampleCoverage(value, invert);
}
@Override
public void scissor(int x, int y, int width, int height) {
GL11.glScissor(x, y, width, height);
}
@Override
public void shaderBinary(int n, IntBuffer shaders, int binaryformat, Buffer binary, int length) {
throw new UnsupportedOperationException("unsupported, won't implement");
}
@Override
public void shaderSource(int shader, String string) {
GL20.glShaderSource(shader, string);
}
@Override
public void stencilFunc(int func, int ref, int mask) {
GL11.glStencilFunc(func, ref, mask);
}
@Override
public void stencilFuncSeparate(int face, int func, int ref, int mask) {
GL20.glStencilFuncSeparate(face, func, ref, mask);
}
@Override
public void stencilMask(int mask) {
GL11.glStencilMask(mask);
}
@Override
public void stencilMaskSeparate(int face, int mask) {
GL20.glStencilMaskSeparate(face, mask);
}
@Override
public void stencilOp(int fail, int zfail, int zpass) {
GL11.glStencilOp(fail, zfail, zpass);
}
@Override
public void stencilOpSeparate(int face, int fail, int zfail, int zpass) {
GL20.glStencilOpSeparate(face, fail, zfail, zpass);
}
@Override
public void texImage2D(int target, int level, int internalformat, int width, int height, int border, int format, int type,
Buffer pixels) {
if (pixels == null)
GL11.glTexImage2D(target, level, internalformat, width, height, border, format, type, (ByteBuffer) null);
else if (pixels instanceof ByteBuffer)
GL11.glTexImage2D(target, level, internalformat, width, height, border, format, type, (ByteBuffer) pixels);
else if (pixels instanceof ShortBuffer)
GL11.glTexImage2D(target, level, internalformat, width, height, border, format, type, (ShortBuffer) pixels);
else if (pixels instanceof IntBuffer)
GL11.glTexImage2D(target, level, internalformat, width, height, border, format, type, (IntBuffer) pixels);
else if (pixels instanceof FloatBuffer)
GL11.glTexImage2D(target, level, internalformat, width, height, border, format, type, (FloatBuffer) pixels);
else if (pixels instanceof DoubleBuffer)
GL11.glTexImage2D(target, level, internalformat, width, height, border, format, type, (DoubleBuffer) pixels);
else
throw new GdxRuntimeException("Can't use " + pixels.getClass().getName()
+ " with this method. Use ByteBuffer, ShortBuffer, IntBuffer, FloatBuffer or DoubleBuffer instead. Blame LWJGL");
}
@Override
public void texParameterf(int target, int pname, float param) {
GL11.glTexParameterf(target, pname, param);
}
@Override
public void texParameterfv(int target, int pname, FloatBuffer params) {
GL11.glTexParameterfv(target, pname, params);
}
@Override
public void texParameteri(int target, int pname, int param) {
GL11.glTexParameteri(target, pname, param);
}
@Override
public void texParameteriv(int target, int pname, IntBuffer params) {
GL11.glTexParameteriv(target, pname, params);
}
@Override
public void texSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, int type,
Buffer pixels) {
if (pixels instanceof ByteBuffer)
GL11.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, (ByteBuffer) pixels);
else if (pixels instanceof ShortBuffer)
GL11.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, (ShortBuffer) pixels);
else if (pixels instanceof IntBuffer)
GL11.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, (IntBuffer) pixels);
else if (pixels instanceof FloatBuffer)
GL11.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, (FloatBuffer) pixels);
else if (pixels instanceof DoubleBuffer)
GL11.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, (DoubleBuffer) pixels);
else
throw new GdxRuntimeException("Can't use " + pixels.getClass().getName()
+ " with this method. Use ByteBuffer, ShortBuffer, IntBuffer, FloatBuffer or DoubleBuffer instead. Blame LWJGL");
}
@Override
public void uniform1f(int location, float x) {
GL20.glUniform1f(location, x);
}
@Override
public void uniform1fv(int location, int count, FloatBuffer v) {
GL20.glUniform1fv(location, v);
}
@Override
public void uniform1fv(int location, int count, float[] v, int offset) {
GL20.glUniform1fv(location, toFloatBuffer(v, offset, count));
}
@Override
public void uniform1i(int location, int x) {
GL20.glUniform1i(location, x);
}
@Override
public void uniform1iv(int location, int count, IntBuffer v) {
GL20.glUniform1iv(location, v);
}
@Override
public void uniform1iv(int location, int count, int[] v, int offset) {
GL20.glUniform1iv(location, toIntBuffer(v, offset, count));
}
@Override
public void uniform2f(int location, float x, float y) {
GL20.glUniform2f(location, x, y);
}
@Override
public void uniform2fv(int location, int count, FloatBuffer v) {
GL20.glUniform2fv(location, v);
}
@Override
public void uniform2fv(int location, int count, float[] v, int offset) {
GL20.glUniform2fv(location, toFloatBuffer(v, offset, count << 1));
}
@Override
public void uniform2i(int location, int x, int y) {
GL20.glUniform2i(location, x, y);
}
@Override
public void uniform2iv(int location, int count, IntBuffer v) {
GL20.glUniform2iv(location, v);
}
@Override
public void uniform2iv(int location, int count, int[] v, int offset) {
GL20.glUniform2iv(location, toIntBuffer(v, offset, count << 1));
}
@Override
public void uniform3f(int location, float x, float y, float z) {
GL20.glUniform3f(location, x, y, z);
}
@Override
public void uniform3fv(int location, int count, FloatBuffer v) {
GL20.glUniform3fv(location, v);
}
@Override
public void uniform3fv(int location, int count, float[] v, int offset) {
GL20.glUniform3fv(location, toFloatBuffer(v, offset, count * 3));
}
@Override
public void uniform3i(int location, int x, int y, int z) {
GL20.glUniform3i(location, x, y, z);
}
@Override
public void uniform3iv(int location, int count, IntBuffer v) {
GL20.glUniform3iv(location, v);
}
@Override
public void uniform3iv(int location, int count, int[] v, int offset) {
GL20.glUniform3iv(location, toIntBuffer(v, offset, count * 3));
}
@Override
public void uniform4f(int location, float x, float y, float z, float w) {
GL20.glUniform4f(location, x, y, z, w);
}
@Override
public void uniform4fv(int location, int count, FloatBuffer v) {
GL20.glUniform4fv(location, v);
}
@Override
public void uniform4fv(int location, int count, float[] v, int offset) {
GL20.glUniform4fv(location, toFloatBuffer(v, offset, count << 2));
}
@Override
public void uniform4i(int location, int x, int y, int z, int w) {
GL20.glUniform4i(location, x, y, z, w);
}
@Override
public void uniform4iv(int location, int count, IntBuffer v) {
GL20.glUniform4iv(location, v);
}
@Override
public void uniform4iv(int location, int count, int[] v, int offset) {
GL20.glUniform4iv(location, toIntBuffer(v, offset, count << 2));
}
@Override
public void uniformMatrix2fv(int location, int count, boolean transpose, FloatBuffer value) {
GL20.glUniformMatrix2fv(location, transpose, value);
}
@Override
public void uniformMatrix2fv(int location, int count, boolean transpose, float[] value, int offset) {
GL20.glUniformMatrix2fv(location, transpose, toFloatBuffer(value, offset, count << 2));
}
@Override
public void uniformMatrix3fv(int location, int count, boolean transpose, FloatBuffer value) {
GL20.glUniformMatrix3fv(location, transpose, value);
}
@Override
public void uniformMatrix3fv(int location, int count, boolean transpose, float[] value, int offset) {
GL20.glUniformMatrix3fv(location, transpose, toFloatBuffer(value, offset, count * 9));
}
@Override
public void uniformMatrix4fv(int location, int count, boolean transpose, FloatBuffer value) {
GL20.glUniformMatrix4fv(location, transpose, value);
}
@Override
public void uniformMatrix4fv(int location, int count, boolean transpose, float[] value, int offset) {
GL20.glUniformMatrix4fv(location, transpose, toFloatBuffer(value, offset, count << 4));
}
@Override
public void useProgram(int program) {
GL20.glUseProgram(program);
}
@Override
public void validateProgram(int program) {
GL20.glValidateProgram(program);
}
@Override
public void vertexAttrib1f(int indx, float x) {
GL20.glVertexAttrib1f(indx, x);
}
@Override
public void vertexAttrib1fv(int indx, FloatBuffer values) {
GL20.glVertexAttrib1f(indx, values.get());
}
@Override
public void vertexAttrib2f(int indx, float x, float y) {
GL20.glVertexAttrib2f(indx, x, y);
}
@Override
public void vertexAttrib2fv(int indx, FloatBuffer values) {
GL20.glVertexAttrib2f(indx, values.get(), values.get());
}
@Override
public void vertexAttrib3f(int indx, float x, float y, float z) {
GL20.glVertexAttrib3f(indx, x, y, z);
}
@Override
public void vertexAttrib3fv(int indx, FloatBuffer values) {
GL20.glVertexAttrib3f(indx, values.get(), values.get(), values.get());
}
@Override
public void vertexAttrib4f(int indx, float x, float y, float z, float w) {
GL20.glVertexAttrib4f(indx, x, y, z, w);
}
@Override
public void vertexAttrib4fv(int indx, FloatBuffer values) {
GL20.glVertexAttrib4f(indx, values.get(), values.get(), values.get(), values.get());
}
@Override
public void vertexAttribPointer(int indx, int size, int type, boolean normalized, int stride, Buffer buffer) {
if (buffer instanceof ByteBuffer) {
if (type == GL.BYTE)
GL20.glVertexAttribPointer(indx, size, type, normalized, stride, (ByteBuffer) buffer);
else if (type == GL.UNSIGNED_BYTE)
GL20.glVertexAttribPointer(indx, size, type, normalized, stride, (ByteBuffer) buffer);
else if (type == GL.SHORT)
GL20.glVertexAttribPointer(indx, size, type, normalized, stride, ((ByteBuffer) buffer).asShortBuffer());
else if (type == GL.UNSIGNED_SHORT)
GL20.glVertexAttribPointer(indx, size, type, normalized, stride, ((ByteBuffer) buffer).asShortBuffer());
else if (type == GL.FLOAT)
GL20.glVertexAttribPointer(indx, size, type, normalized, stride, ((ByteBuffer) buffer).asFloatBuffer());
else
throw new GdxRuntimeException(
"Can't use "
+ buffer.getClass().getName()
+ " with type "
+ type
+ " with this method. Use ByteBuffer and one of GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT or GL_FLOAT for type. Blame LWJGL");
} else if (buffer instanceof FloatBuffer) {
if (type == GL.FLOAT)
GL20.glVertexAttribPointer(indx, size, type, normalized, stride, (FloatBuffer) buffer);
else
throw new GdxRuntimeException("Can't use " + buffer.getClass().getName() + " with type " + type
+ " with this method.");
} else
throw new GdxRuntimeException("Can't use " + buffer.getClass().getName()
+ " with this method. Use ByteBuffer instead. Blame LWJGL");
}
@Override
public void viewport(int x, int y, int width, int height) {
GL11.glViewport(x, y, width, height);
}
@Override
public void drawElements(int mode, int count, int type, int indices) {
GL11.glDrawElements(mode, count, type, indices);
}
@Override
public void vertexAttribPointer(int indx, int size, int type, boolean normalized, int stride, int ptr) {
GL20.glVertexAttribPointer(indx, size, type, normalized, stride, ptr);
}
}

View File

@@ -0,0 +1,640 @@
/*******************************************************************************
* Copyright 2011 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 com.badlogic.gdx.utils.GdxRuntimeException;
import org.lwjgl.opengl.*;
import java.nio.*;
/**
* See https://github.com/libgdx/libgdx/blob/master/backends/gdx-backend-lwjgl3/src/com/badlogic/gdx/backends/lwjgl3/Lwjgl3GL30.java
*/
public class Lwjgl3GL30 extends Lwjgl3GL20 implements org.oscim.backend.GL30 {
@Override
public void readBuffer(int mode) {
GL11.glReadBuffer(mode);
}
@Override
public void drawRangeElements(int mode, int start, int end, int count, int type, Buffer indices) {
if (indices instanceof ByteBuffer)
GL12.glDrawRangeElements(mode, start, end, (ByteBuffer) indices);
else if (indices instanceof ShortBuffer)
GL12.glDrawRangeElements(mode, start, end, (ShortBuffer) indices);
else if (indices instanceof IntBuffer)
GL12.glDrawRangeElements(mode, start, end, (IntBuffer) indices);
else throw new GdxRuntimeException("indices must be byte, short or int buffer");
}
@Override
public void drawRangeElements(int mode, int start, int end, int count, int type, int offset) {
GL12.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, Buffer pixels) {
if (pixels == null)
GL12.glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, (ByteBuffer) null);
else if (pixels instanceof ByteBuffer)
GL12.glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, (ByteBuffer) pixels);
else if (pixels instanceof ShortBuffer)
GL12.glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, (ShortBuffer) pixels);
else if (pixels instanceof IntBuffer)
GL12.glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, (IntBuffer) pixels);
else if (pixels instanceof FloatBuffer)
GL12.glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, (FloatBuffer) pixels);
else if (pixels instanceof DoubleBuffer)
GL12.glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, (DoubleBuffer) pixels);
else
throw new GdxRuntimeException("Can't use " + pixels.getClass().getName()
+ " with this method. Use ByteBuffer, ShortBuffer, IntBuffer, FloatBuffer or DoubleBuffer instead. Blame LWJGL");
}
@Override
public void texImage3D(int target, int level, int internalformat, int width, int height, int depth, int border, int format,
int type, int offset) {
GL12.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, Buffer pixels) {
if (pixels instanceof ByteBuffer)
GL12.glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, (ByteBuffer) pixels);
else if (pixels instanceof ShortBuffer)
GL12.glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, (ShortBuffer) pixels);
else if (pixels instanceof IntBuffer)
GL12.glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, (IntBuffer) pixels);
else if (pixels instanceof FloatBuffer)
GL12.glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, (FloatBuffer) pixels);
else if (pixels instanceof DoubleBuffer)
GL12.glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, (DoubleBuffer) pixels);
else
throw new GdxRuntimeException("Can't use " + pixels.getClass().getName()
+ " with this method. Use ByteBuffer, ShortBuffer, IntBuffer, FloatBuffer or DoubleBuffer instead. Blame LWJGL");
}
@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) {
GL12.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) {
GL12.glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height);
}
@Override
public void genQueries(int n, int[] ids, int offset) {
for (int i = offset; i < offset + n; i++) {
ids[i] = GL15.glGenQueries();
}
}
@Override
public void genQueries(int n, IntBuffer ids) {
for (int i = 0; i < n; i++) {
ids.put(GL15.glGenQueries());
}
}
@Override
public void deleteQueries(int n, int[] ids, int offset) {
for (int i = offset; i < offset + n; i++) {
GL15.glDeleteQueries(ids[i]);
}
}
@Override
public void deleteQueries(int n, IntBuffer ids) {
for (int i = 0; i < n; i++) {
GL15.glDeleteQueries(ids.get());
}
}
@Override
public boolean isQuery(int id) {
return GL15.glIsQuery(id);
}
@Override
public void beginQuery(int target, int id) {
GL15.glBeginQuery(target, id);
}
@Override
public void endQuery(int target) {
GL15.glEndQuery(target);
}
@Override
public void getQueryiv(int target, int pname, IntBuffer params) {
GL15.glGetQueryiv(target, pname, params);
}
@Override
public void getQueryObjectuiv(int id, int pname, IntBuffer params) {
GL15.glGetQueryObjectuiv(id, pname, params);
}
@Override
public boolean unmapBuffer(int target) {
return GL15.glUnmapBuffer(target);
}
@Override
public Buffer getBufferPointerv(int target, int pname) {
// FIXME glGetBufferPointerv needs a proper translation
// return GL15.glGetBufferPointer(target, pname);
throw new UnsupportedOperationException("Not implemented");
}
@Override
public void drawBuffers(int n, IntBuffer bufs) {
GL20.glDrawBuffers(bufs);
}
@Override
public void uniformMatrix2x3fv(int location, int count, boolean transpose, FloatBuffer value) {
GL21.glUniformMatrix2x3fv(location, transpose, value);
}
@Override
public void uniformMatrix3x2fv(int location, int count, boolean transpose, FloatBuffer value) {
GL21.glUniformMatrix3x2fv(location, transpose, value);
}
@Override
public void uniformMatrix2x4fv(int location, int count, boolean transpose, FloatBuffer value) {
GL21.glUniformMatrix2x4fv(location, transpose, value);
}
@Override
public void uniformMatrix4x2fv(int location, int count, boolean transpose, FloatBuffer value) {
GL21.glUniformMatrix4x2fv(location, transpose, value);
}
@Override
public void uniformMatrix3x4fv(int location, int count, boolean transpose, FloatBuffer value) {
GL21.glUniformMatrix3x4fv(location, transpose, value);
}
@Override
public void uniformMatrix4x3fv(int location, int count, boolean transpose, FloatBuffer value) {
GL21.glUniformMatrix4x3fv(location, 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) {
GL30.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
}
@Override
public void bindFramebuffer(int target, int framebuffer) {
GL30.glBindFramebuffer(target, framebuffer);
}
@Override
public void bindRenderbuffer(int target, int renderbuffer) {
GL30.glBindRenderbuffer(target, renderbuffer);
}
@Override
public int checkFramebufferStatus(int target) {
return GL30.glCheckFramebufferStatus(target);
}
@Override
public void deleteFramebuffers(int n, IntBuffer framebuffers) {
GL30.glDeleteFramebuffers(framebuffers);
}
@Override
public void deleteFramebuffer(int framebuffer) {
GL30.glDeleteFramebuffers(framebuffer);
}
@Override
public void deleteRenderbuffers(int n, IntBuffer renderbuffers) {
GL30.glDeleteRenderbuffers(renderbuffers);
}
@Override
public void deleteRenderbuffer(int renderbuffer) {
GL30.glDeleteRenderbuffers(renderbuffer);
}
@Override
public void generateMipmap(int target) {
GL30.glGenerateMipmap(target);
}
@Override
public void genFramebuffers(int n, IntBuffer framebuffers) {
GL30.glGenFramebuffers(framebuffers);
}
@Override
public int genFramebuffer() {
return GL30.glGenFramebuffers();
}
@Override
public void genRenderbuffers(int n, IntBuffer renderbuffers) {
GL30.glGenRenderbuffers(renderbuffers);
}
@Override
public int genRenderbuffer() {
return GL30.glGenRenderbuffers();
}
@Override
public void getRenderbufferParameteriv(int target, int pname, IntBuffer params) {
GL30.glGetRenderbufferParameteriv(target, pname, params);
}
@Override
public boolean isFramebuffer(int framebuffer) {
return GL30.glIsFramebuffer(framebuffer);
}
@Override
public boolean isRenderbuffer(int renderbuffer) {
return GL30.glIsRenderbuffer(renderbuffer);
}
@Override
public void renderbufferStorage(int target, int internalformat, int width, int height) {
GL30.glRenderbufferStorage(target, internalformat, width, height);
}
@Override
public void renderbufferStorageMultisample(int target, int samples, int internalformat, int width, int height) {
GL30.glRenderbufferStorageMultisample(target, samples, internalformat, width, height);
}
@Override
public void framebufferTexture2D(int target, int attachment, int textarget, int texture, int level) {
GL30.glFramebufferTexture2D(target, attachment, textarget, texture, level);
}
@Override
public void framebufferRenderbuffer(int target, int attachment, int renderbuffertarget, int renderbuffer) {
GL30.glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
}
@Override
public void framebufferTextureLayer(int target, int attachment, int texture, int level, int layer) {
GL30.glFramebufferTextureLayer(target, attachment, texture, level, layer);
}
@Override
public void flushMappedBufferRange(int target, int offset, int length) {
GL30.glFlushMappedBufferRange(target, offset, length);
}
@Override
public void bindVertexArray(int array) {
GL30.glBindVertexArray(array);
}
@Override
public void deleteVertexArrays(int n, int[] arrays, int offset) {
for (int i = offset; i < offset + n; i++) {
GL30.glDeleteVertexArrays(arrays[i]);
}
}
@Override
public void deleteVertexArrays(int n, IntBuffer arrays) {
GL30.glDeleteVertexArrays(arrays);
}
@Override
public void genVertexArrays(int n, int[] arrays, int offset) {
for (int i = offset; i < offset + n; i++) {
arrays[i] = GL30.glGenVertexArrays();
}
}
@Override
public void genVertexArrays(int n, IntBuffer arrays) {
GL30.glGenVertexArrays(arrays);
}
@Override
public boolean isVertexArray(int array) {
return GL30.glIsVertexArray(array);
}
@Override
public void beginTransformFeedback(int primitiveMode) {
GL30.glBeginTransformFeedback(primitiveMode);
}
@Override
public void endTransformFeedback() {
GL30.glEndTransformFeedback();
}
@Override
public void bindBufferRange(int target, int index, int buffer, int offset, int size) {
GL30.glBindBufferRange(target, index, buffer, offset, size);
}
@Override
public void bindBufferBase(int target, int index, int buffer) {
GL30.glBindBufferBase(target, index, buffer);
}
@Override
public void transformFeedbackVaryings(int program, String[] varyings, int bufferMode) {
GL30.glTransformFeedbackVaryings(program, varyings, bufferMode);
}
@Override
public void vertexAttribIPointer(int index, int size, int type, int stride, int offset) {
GL30.glVertexAttribIPointer(index, size, type, stride, offset);
}
@Override
public void getVertexAttribIiv(int index, int pname, IntBuffer params) {
GL30.glGetVertexAttribIiv(index, pname, params);
}
@Override
public void getVertexAttribIuiv(int index, int pname, IntBuffer params) {
GL30.glGetVertexAttribIuiv(index, pname, params);
}
@Override
public void vertexAttribI4i(int index, int x, int y, int z, int w) {
GL30.glVertexAttribI4i(index, x, y, z, w);
}
@Override
public void vertexAttribI4ui(int index, int x, int y, int z, int w) {
GL30.glVertexAttribI4ui(index, x, y, z, w);
}
@Override
public void getUniformuiv(int program, int location, IntBuffer params) {
GL30.glGetUniformuiv(program, location, params);
}
@Override
public int getFragDataLocation(int program, String name) {
return GL30.glGetFragDataLocation(program, name);
}
@Override
public void uniform1uiv(int location, int count, IntBuffer value) {
GL30.glUniform1uiv(location, value);
}
@Override
public void uniform3uiv(int location, int count, IntBuffer value) {
GL30.glUniform3uiv(location, value);
}
@Override
public void uniform4uiv(int location, int count, IntBuffer value) {
GL30.glUniform4uiv(location, value);
}
@Override
public void clearBufferiv(int buffer, int drawbuffer, IntBuffer value) {
GL30.glClearBufferiv(buffer, drawbuffer, value);
}
@Override
public void clearBufferuiv(int buffer, int drawbuffer, IntBuffer value) {
GL30.glClearBufferuiv(buffer, drawbuffer, value);
}
@Override
public void clearBufferfv(int buffer, int drawbuffer, FloatBuffer value) {
GL30.glClearBufferfv(buffer, drawbuffer, value);
}
@Override
public void clearBufferfi(int buffer, int drawbuffer, float depth, int stencil) {
GL30.glClearBufferfi(buffer, drawbuffer, depth, stencil);
}
@Override
public String getStringi(int name, int index) {
return GL30.glGetStringi(name, index);
}
@Override
public void copyBufferSubData(int readTarget, int writeTarget, int readOffset, int writeOffset, int size) {
GL31.glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
}
@Override
public void getUniformIndices(int program, String[] uniformNames, IntBuffer uniformIndices) {
GL31.glGetUniformIndices(program, uniformNames, uniformIndices);
}
@Override
public void getActiveUniformsiv(int program, int uniformCount, IntBuffer uniformIndices, int pname, IntBuffer params) {
GL31.glGetActiveUniformsiv(program, uniformIndices, pname, params);
}
@Override
public int getUniformBlockIndex(int program, String uniformBlockName) {
return GL31.glGetUniformBlockIndex(program, uniformBlockName);
}
@Override
public void getActiveUniformBlockiv(int program, int uniformBlockIndex, int pname, IntBuffer params) {
params.put(GL31.glGetActiveUniformBlocki(program, uniformBlockIndex, pname));
}
@Override
public void getActiveUniformBlockName(int program, int uniformBlockIndex, Buffer length, Buffer uniformBlockName) {
GL31.glGetActiveUniformBlockName(program, uniformBlockIndex, (IntBuffer) length, (ByteBuffer) uniformBlockName);
}
@Override
public String getActiveUniformBlockName(int program, int uniformBlockIndex) {
return GL31.glGetActiveUniformBlockName(program, uniformBlockIndex, 1024);
}
@Override
public void uniformBlockBinding(int program, int uniformBlockIndex, int uniformBlockBinding) {
GL31.glUniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);
}
@Override
public void drawArraysInstanced(int mode, int first, int count, int instanceCount) {
GL31.glDrawArraysInstanced(mode, first, count, instanceCount);
}
@Override
public void drawElementsInstanced(int mode, int count, int type, int indicesOffset, int instanceCount) {
GL31.glDrawElementsInstanced(mode, count, type, indicesOffset, instanceCount);
}
@Override
public void getInteger64v(int pname, LongBuffer params) {
GL32.glGetInteger64v(pname, params);
}
@Override
public void getBufferParameteri64v(int target, int pname, LongBuffer params) {
params.put(GL32.glGetBufferParameteri64(target, pname));
}
@Override
public void genSamplers(int count, int[] samplers, int offset) {
for (int i = offset; i < offset + count; i++) {
samplers[i] = GL33.glGenSamplers();
}
}
@Override
public void genSamplers(int count, IntBuffer samplers) {
GL33.glGenSamplers(samplers);
}
@Override
public void deleteSamplers(int count, int[] samplers, int offset) {
for (int i = offset; i < offset + count; i++) {
GL33.glDeleteSamplers(samplers[i]);
}
}
@Override
public void deleteSamplers(int count, IntBuffer samplers) {
GL33.glDeleteSamplers(samplers);
}
@Override
public boolean isSampler(int sampler) {
return GL33.glIsSampler(sampler);
}
@Override
public void bindSampler(int unit, int sampler) {
GL33.glBindSampler(unit, sampler);
}
@Override
public void samplerParameteri(int sampler, int pname, int param) {
GL33.glSamplerParameteri(sampler, pname, param);
}
@Override
public void samplerParameteriv(int sampler, int pname, IntBuffer param) {
GL33.glSamplerParameteriv(sampler, pname, param);
}
@Override
public void samplerParameterf(int sampler, int pname, float param) {
GL33.glSamplerParameterf(sampler, pname, param);
}
@Override
public void samplerParameterfv(int sampler, int pname, FloatBuffer param) {
GL33.glSamplerParameterfv(sampler, pname, param);
}
@Override
public void getSamplerParameteriv(int sampler, int pname, IntBuffer params) {
GL33.glGetSamplerParameterIiv(sampler, pname, params);
}
@Override
public void getSamplerParameterfv(int sampler, int pname, FloatBuffer params) {
GL33.glGetSamplerParameterfv(sampler, pname, params);
}
@Override
public void vertexAttribDivisor(int index, int divisor) {
GL33.glVertexAttribDivisor(index, divisor);
}
@Override
public void bindTransformFeedback(int target, int id) {
GL40.glBindTransformFeedback(target, id);
}
@Override
public void deleteTransformFeedbacks(int n, int[] ids, int offset) {
for (int i = offset; i < offset + n; i++) {
GL40.glDeleteTransformFeedbacks(ids[i]);
}
}
@Override
public void deleteTransformFeedbacks(int n, IntBuffer ids) {
GL40.glDeleteTransformFeedbacks(ids);
}
@Override
public void genTransformFeedbacks(int n, int[] ids, int offset) {
for (int i = offset; i < offset + n; i++) {
ids[i] = GL40.glGenTransformFeedbacks();
}
}
@Override
public void genTransformFeedbacks(int n, IntBuffer ids) {
GL40.glGenTransformFeedbacks(ids);
}
@Override
public boolean isTransformFeedback(int id) {
return GL40.glIsTransformFeedback(id);
}
@Override
public void pauseTransformFeedback() {
GL40.glPauseTransformFeedback();
}
@Override
public void resumeTransformFeedback() {
GL40.glResumeTransformFeedback();
}
@Override
public void programParameteri(int program, int pname, int value) {
GL41.glProgramParameteri(program, pname, value);
}
@Override
public void invalidateFramebuffer(int target, int numAttachments, IntBuffer attachments) {
GL43.glInvalidateFramebuffer(target, attachments);
}
@Override
public void invalidateSubFramebuffer(int target, int numAttachments, IntBuffer attachments, int x, int y, int width,
int height) {
GL43.glInvalidateSubFramebuffer(target, attachments, x, y, width, height);
}
}

View File

@@ -3,7 +3,6 @@ apply plugin: 'maven'
dependencies { dependencies {
api project(':vtm-gdx') api project(':vtm-gdx')
api "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion"
api 'com.github.blackears:svgSalamander:v1.1.1' api 'com.github.blackears:svgSalamander:v1.1.1'
} }

View File

@@ -1,7 +1,7 @@
/* /*
* Copyright 2010, 2011, 2012, 2013 mapsforge.org * Copyright 2010, 2011, 2012, 2013 mapsforge.org
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016-2017 devemux86 * Copyright 2016-2019 devemux86
* Copyright 2017 nebular * Copyright 2017 nebular
* Copyright 2018 Gustl22 * Copyright 2018 Gustl22
* *
@@ -22,12 +22,7 @@ package org.oscim.awt;
import org.oscim.backend.canvas.Paint; import org.oscim.backend.canvas.Paint;
import java.awt.BasicStroke; import java.awt.*;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.Stroke;
import java.awt.font.TextAttribute; import java.awt.font.TextAttribute;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.text.AttributedCharacterIterator.Attribute; import java.text.AttributedCharacterIterator.Attribute;
@@ -125,8 +120,8 @@ public class AwtPaint implements Paint {
Font font = DEFAULT_FONT; // new Font("Default", Font.PLAIN, 13); Font font = DEFAULT_FONT; // new Font("Default", Font.PLAIN, 13);
Stroke stroke; Stroke stroke;
Style style = Style.FILL; Style style = Style.FILL;
private int cap = getCap(Cap.BUTT); private int cap = getCap(Cap.ROUND);
private int join = getJoin(Join.MITER); private int join = getJoin(Join.ROUND);
private float strokeWidth; private float strokeWidth;
private float textSize = DEFAULT_FONT.getSize(); private float textSize = DEFAULT_FONT.getSize();

View File

@@ -3,9 +3,10 @@ apply plugin: 'maven'
dependencies { dependencies {
api project(':vtm') api project(':vtm')
api 'com.fasterxml.jackson.core:jackson-core:2.8.4' api 'com.fasterxml.jackson.core:jackson-core:2.9.9'
api 'org.locationtech.jts:jts-core:1.15.0' // https://github.com/locationtech/jts/issues/145
api 'org.openstreetmap.osmosis:osmosis-osm-binary:0.46' api 'org.locationtech.jts:jts-core:1.15.1'
api 'org.openstreetmap.osmosis:osmosis-osm-binary:0.47'
} }
sourceSets { sourceSets {

View File

@@ -78,6 +78,6 @@ public class OverpassTileSource extends UrlTileSource {
@Override @Override
public ITileDataSource getDataSource() { public ITileDataSource getDataSource() {
return new OverzoomTileDataSource(new UrlTileDataSource(this, new OverpassTileDecoder(), getHttpEngine()), mOverZoom); return new OverzoomTileDataSource(new UrlTileDataSource(this, new TileDecoder(), getHttpEngine()), mOverZoom);
} }
} }

View File

@@ -39,14 +39,14 @@ import java.io.InputStream;
import static org.oscim.core.MercatorProjection.latitudeToY; import static org.oscim.core.MercatorProjection.latitudeToY;
import static org.oscim.core.MercatorProjection.longitudeToX; import static org.oscim.core.MercatorProjection.longitudeToX;
public class OverpassTileDecoder implements ITileDecoder { public class TileDecoder implements ITileDecoder {
private final MapElement mMapElement; private final MapElement mMapElement;
private ITileDataSink mTileDataSink; private ITileDataSink mTileDataSink;
private double mTileY, mTileX, mTileScale; private double mTileY, mTileX, mTileScale;
public OverpassTileDecoder() { public TileDecoder() {
mMapElement = new MapElement(); mMapElement = new MapElement();
mMapElement.layer = 5; mMapElement.layer = 5;
} }

View File

@@ -3,7 +3,8 @@ apply plugin: 'maven'
dependencies { dependencies {
api project(':vtm') api project(':vtm')
api 'com.squareup.okhttp3:okhttp:3.8.0' // https://github.com/square/okhttp/issues/4481
api 'com.squareup.okhttp3:okhttp:3.12.5'
} }
sourceSets { sourceSets {

View File

@@ -3,7 +3,7 @@ buildscript {
jcenter() jcenter()
} }
dependencies { dependencies {
classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.5' classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.7'
} }
} }
@@ -15,7 +15,7 @@ sourceSets.main.java.srcDirs = ["src/"]
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8' [compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
ext { ext {
roboVMVersion = "2.3.5" roboVMVersion = "2.3.7"
} }
launchIPhoneSimulator.dependsOn build launchIPhoneSimulator.dependsOn build

View File

@@ -3,7 +3,7 @@ buildscript {
jcenter() jcenter()
} }
dependencies { dependencies {
classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.5' classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.7'
} }
} }
@@ -16,7 +16,7 @@ sourceSets.main.java.srcDirs = ["src/"]
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8' [compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
ext { ext {
roboVMVersion = "2.3.5" roboVMVersion = "2.3.7"
} }
launchIPhoneSimulator.dependsOn build launchIPhoneSimulator.dependsOn build

View File

@@ -3,7 +3,7 @@ apply plugin: 'maven'
dependencies { dependencies {
api project(':vtm') api project(':vtm')
api 'com.fasterxml.jackson.core:jackson-core:2.8.4' api 'com.fasterxml.jackson.core:jackson-core:2.9.9'
} }
sourceSets { sourceSets {

View File

@@ -3,7 +3,8 @@ apply plugin: 'maven'
dependencies { dependencies {
api project(':vtm') api project(':vtm')
api 'org.locationtech.jts:jts-core:1.15.0' // https://github.com/locationtech/jts/issues/145
api 'org.locationtech.jts:jts-core:1.15.1'
} }
sourceSets { sourceSets {

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).
* *
@@ -17,18 +17,11 @@
*/ */
package org.oscim.layers.vector; package org.oscim.layers.vector;
import org.locationtech.jts.geom.Envelope;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.LineString;
import org.locationtech.jts.geom.Point; import org.locationtech.jts.geom.Point;
import org.locationtech.jts.geom.Polygon; import org.locationtech.jts.geom.*;
import org.locationtech.jts.simplify.DouglasPeuckerSimplifier; import org.locationtech.jts.simplify.DouglasPeuckerSimplifier;
import org.oscim.backend.canvas.Color; import org.oscim.backend.canvas.Color;
import org.oscim.core.Box; import org.oscim.core.*;
import org.oscim.core.GeoPoint;
import org.oscim.core.GeometryBuffer;
import org.oscim.core.MapPosition;
import org.oscim.core.Tile;
import org.oscim.event.Gesture; import org.oscim.event.Gesture;
import org.oscim.event.GestureListener; import org.oscim.event.GestureListener;
import org.oscim.event.MotionEvent; import org.oscim.event.MotionEvent;
@@ -124,7 +117,7 @@ public class VectorLayer extends AbstractVectorLayer<Drawable> implements Gestur
* *
* @param drawable * @param drawable
*/ */
public void add(Drawable drawable) { public synchronized void add(Drawable drawable) {
mDrawables.insert(bbox(drawable.getGeometry(), drawable.getStyle()), drawable); mDrawables.insert(bbox(drawable.getGeometry(), drawable.getStyle()), drawable);
} }
@@ -135,7 +128,7 @@ public class VectorLayer extends AbstractVectorLayer<Drawable> implements Gestur
* @param geometry * @param geometry
* @param style * @param style
*/ */
public synchronized void add(Geometry geometry, Style style) { synchronized void add(Geometry geometry, Style style) {
mDrawables.insert(bbox(geometry, style), new GeometryWithStyle(geometry, style)); mDrawables.insert(bbox(geometry, style), new GeometryWithStyle(geometry, style));
} }

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).
* *
@@ -94,7 +94,7 @@ public class Style {
public static class Builder { public static class Builder {
private float strokeWidth = 1f; private float strokeWidth = 1f;
private int strokeColor = Color.GRAY; public int strokeColor = Color.GRAY;
private int fillColor = Color.GRAY; private int fillColor = Color.GRAY;
private float fillAlpha = 0.25f; private float fillAlpha = 0.25f;

View File

@@ -3,7 +3,7 @@ apply plugin: 'maven'
dependencies { dependencies {
api project(':vtm') api project(':vtm')
api 'com.wdtinc:mapbox-vector-tile:3.0.0' api 'com.wdtinc:mapbox-vector-tile:3.1.0'
} }
sourceSets { sourceSets {

View File

@@ -65,6 +65,6 @@ public class MapilionMvtTileSource extends UrlTileSource {
@Override @Override
public ITileDataSource getDataSource() { public ITileDataSource getDataSource() {
return new OverzoomTileDataSource(new UrlTileDataSource(this, new MvtTileDecoder(locale), getHttpEngine()), mOverZoom); return new OverzoomTileDataSource(new UrlTileDataSource(this, new TileDecoder(locale), getHttpEngine()), mOverZoom);
} }
} }

View File

@@ -69,6 +69,6 @@ public class MapzenMvtTileSource extends UrlTileSource {
@Override @Override
public ITileDataSource getDataSource() { public ITileDataSource getDataSource() {
return new OverzoomTileDataSource(new UrlTileDataSource(this, new MvtTileDecoder(locale), getHttpEngine()), mOverZoom); return new OverzoomTileDataSource(new UrlTileDataSource(this, new TileDecoder(locale), getHttpEngine()), mOverZoom);
} }
} }

View File

@@ -66,6 +66,6 @@ public class NextzenMvtTileSource extends UrlTileSource {
@Override @Override
public ITileDataSource getDataSource() { public ITileDataSource getDataSource() {
return new OverzoomTileDataSource(new UrlTileDataSource(this, new MvtTileDecoder(locale), getHttpEngine()), mOverZoom); return new OverzoomTileDataSource(new UrlTileDataSource(this, new TileDecoder(locale), getHttpEngine()), mOverZoom);
} }
} }

View File

@@ -69,6 +69,6 @@ public class OpenMapTilesMvtTileSource extends UrlTileSource {
@Override @Override
public ITileDataSource getDataSource() { public ITileDataSource getDataSource() {
return new OverzoomTileDataSource(new UrlTileDataSource(this, new MvtTileDecoder(locale), getHttpEngine()), mOverZoom); return new OverzoomTileDataSource(new UrlTileDataSource(this, new TileDecoder(locale), getHttpEngine()), mOverZoom);
} }
} }

View File

@@ -42,7 +42,7 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.Map; import java.util.Map;
public class MvtTileDecoder implements ITileDecoder { public class TileDecoder implements ITileDecoder {
private final String mLocale; private final String mLocale;
private static final float REF_TILE_SIZE = 4096.0f; private static final float REF_TILE_SIZE = 4096.0f;
@@ -52,11 +52,11 @@ public class MvtTileDecoder implements ITileDecoder {
private final MapElement mMapElement; private final MapElement mMapElement;
private ITileDataSink mTileDataSink; private ITileDataSink mTileDataSink;
public MvtTileDecoder() { public TileDecoder() {
this(""); this("");
} }
public MvtTileDecoder(String locale) { public TileDecoder(String locale) {
mLocale = locale; mLocale = locale;
mGeomFactory = new GeometryFactory(); mGeomFactory = new GeometryFactory();
mMapElement = new MapElement(); mMapElement = new MapElement();

View File

@@ -1,7 +1,7 @@
apply plugin: 'application' apply plugin: 'application'
dependencies { dependencies {
implementation project(':vtm-desktop') implementation project(':vtm-desktop-lwjgl')
file("${rootDir}/vtm-desktop/natives").eachDir() { dir -> file("${rootDir}/vtm-desktop/natives").eachDir() { dir ->
implementation files(dir.path) implementation files(dir.path)
} }

View File

@@ -18,7 +18,6 @@
package org.oscim.test; package org.oscim.test;
import com.badlogic.gdx.Input; import com.badlogic.gdx.Input;
import org.oscim.core.BoundingBox; import org.oscim.core.BoundingBox;
import org.oscim.gdx.GdxMapApp; import org.oscim.gdx.GdxMapApp;
import org.oscim.layers.tile.bitmap.BitmapTileLayer; import org.oscim.layers.tile.bitmap.BitmapTileLayer;

View File

@@ -1,99 +0,0 @@
/*
* Copyright 2016-2018 devemux86
* Copyright 2017 Longri
*
* 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.test;
import org.oscim.backend.CanvasAdapter;
import org.oscim.backend.canvas.Bitmap;
import org.oscim.core.GeoPoint;
import org.oscim.gdx.GdxMapApp;
import org.oscim.layers.marker.ItemizedLayer;
import org.oscim.layers.marker.MarkerItem;
import org.oscim.layers.marker.MarkerSymbol;
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.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import static org.oscim.layers.marker.MarkerSymbol.HotspotPlace;
public class AtlasMarkerLayerTest extends MarkerLayerTest {
@Override
public void createLayers() {
try {
// 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));
mMap.setMapPosition(0, 0, 1 << 2);
Bitmap bitmapPoi = CanvasAdapter.decodeBitmap(getClass().getResourceAsStream("/res/marker_poi.png"));
Bitmap bitmapFocus = CanvasAdapter.decodeBitmap(getClass().getResourceAsStream("/res/marker_focus.png"));
// 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);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
GdxMapApp.init();
GdxMapApp.run(new AtlasMarkerLayerTest());
}
}

View File

@@ -17,7 +17,6 @@
package org.oscim.test; package org.oscim.test;
import com.badlogic.gdx.Input; import com.badlogic.gdx.Input;
import org.oscim.gdx.GdxMapApp; import org.oscim.gdx.GdxMapApp;
import org.oscim.layers.tile.bitmap.BitmapTileLayer; import org.oscim.layers.tile.bitmap.BitmapTileLayer;
import org.oscim.renderer.MapRenderer; import org.oscim.renderer.MapRenderer;

View File

@@ -20,13 +20,7 @@ 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.gdx.GdxMapApp; import org.oscim.gdx.GdxMapApp;
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.TileSource;
import org.oscim.tiling.source.OkHttpEngine; import org.oscim.tiling.source.OkHttpEngine;

View File

@@ -17,7 +17,6 @@
package org.oscim.test; package org.oscim.test;
import com.badlogic.gdx.Input; import com.badlogic.gdx.Input;
import org.oscim.gdx.GdxMapApp; import org.oscim.gdx.GdxMapApp;
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;

View File

@@ -28,7 +28,7 @@ import org.oscim.theme.VtmThemes;
public class ExtrusionsTest extends GdxMapApp { public class ExtrusionsTest extends GdxMapApp {
enum GroundShape { enum GroundShape {
HEXAGON, RECTANGLE, SHAPE_L, SHAPE_O, SHAPE_T, SHAPE_U, SHAPE_V, SHAPE_X, SHAPE_Z, TEST HEXAGON, RECTANGLE, SHAPE_L, SHAPE_M, SHAPE_O, SHAPE_T, SHAPE_U, SHAPE_V, SHAPE_X, SHAPE_Z, TEST
} }
/** /**
@@ -123,6 +123,9 @@ public class ExtrusionsTest extends GdxMapApp {
case SHAPE_L: case SHAPE_L:
shapeLGround(e); shapeLGround(e);
break; break;
case SHAPE_M:
shapeMGround(e);
break;
case SHAPE_O: case SHAPE_O:
shapeOGround(e); shapeOGround(e);
break; break;
@@ -181,6 +184,19 @@ public class ExtrusionsTest extends GdxMapApp {
e.addPoint(0, 10); e.addPoint(0, 10);
} }
private void shapeMGround(MapElement e) {
e.addPoint(0, 0);
e.addPoint(10, 0);
e.addPoint(10, 5);
e.addPoint(20, 5);
e.addPoint(20, 20);
e.addPoint(37, 20);
e.addPoint(37, 25);
e.addPoint(12, 25);
e.addPoint(12, 15);
e.addPoint(0, 15);
}
private void shapeOGround(MapElement e) { private void shapeOGround(MapElement e) {
hexagonGround(e); hexagonGround(e);
e.reverse(); e.reverse();

View File

@@ -24,7 +24,6 @@ import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.utils.viewport.ScreenViewport; import com.badlogic.gdx.utils.viewport.ScreenViewport;
import com.badlogic.gdx.utils.viewport.Viewport; import com.badlogic.gdx.utils.viewport.Viewport;
import org.oscim.backend.GL; import org.oscim.backend.GL;
import org.oscim.core.Point; import org.oscim.core.Point;
import org.oscim.gdx.GdxMapApp; import org.oscim.gdx.GdxMapApp;

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.test; package org.oscim.test;
import com.badlogic.gdx.Input; import com.badlogic.gdx.Input;
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.backend.canvas.Paint.Cap; import org.oscim.backend.canvas.Paint.Cap;
@@ -78,7 +77,7 @@ public class LineRenderTest extends GdxMapApp {
TextureItem tex = null; TextureItem tex = null;
try { try {
tex = new TextureItem(CanvasAdapter.getBitmapAsset("", "patterns/dot.png")); tex = new TextureItem(CanvasAdapter.getBitmapAsset("", "patterns/dot.png"));
tex.mipmap = true; //tex.mipmap = true;
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }

View File

@@ -2,7 +2,6 @@ package org.oscim.test;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input; import com.badlogic.gdx.Input;
import org.oscim.backend.canvas.Color; import org.oscim.backend.canvas.Color;
import org.oscim.core.GeometryBuffer; import org.oscim.core.GeometryBuffer;
import org.oscim.gdx.GdxMapApp; import org.oscim.gdx.GdxMapApp;

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).
* *
@@ -38,7 +38,7 @@ import java.util.List;
public class LineTexTest extends GdxMapApp { public class LineTexTest extends GdxMapApp {
private static final boolean ANIMATION = false; private static final boolean ANIMATION = true;
private List<PathLayer> mPathLayers = new ArrayList<>(); private List<PathLayer> mPathLayers = new ArrayList<>();
private TextureItem tex; private TextureItem tex;
@@ -54,7 +54,7 @@ public class LineTexTest extends GdxMapApp {
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

@@ -14,6 +14,8 @@
*/ */
package org.oscim.test; package org.oscim.test;
import okhttp3.Cache;
import okhttp3.OkHttpClient;
import org.oscim.core.MapPosition; import org.oscim.core.MapPosition;
import org.oscim.gdx.GdxMapApp; import org.oscim.gdx.GdxMapApp;
import org.oscim.layers.tile.bitmap.BitmapTileLayer; import org.oscim.layers.tile.bitmap.BitmapTileLayer;
@@ -29,9 +31,6 @@ import org.oscim.tiling.source.mvt.MapilionMvtTileSource;
import java.io.File; import java.io.File;
import java.util.UUID; import java.util.UUID;
import okhttp3.Cache;
import okhttp3.OkHttpClient;
public class MapilionMvtTest extends GdxMapApp { public class MapilionMvtTest extends GdxMapApp {
// Metered API key for demonstration purposes // Metered API key for demonstration purposes

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