50 Commits

Author SHA1 Message Date
Emux
0a374bc635 0.14.0 2020-08-25 18:39:22 +03:00
marq24
8602b5780a Fix issue with drawing elements with false style (#778)
When the style of the drawable has changed the level needs to adjusted before draw(...) is called - in any other case then you have the risk, that the false style will be applied to the drawable [since the false bucket (with wrong style) will be returned when calling t.buckets.get{.*}Bucket(level)]
2020-08-03 11:08:43 +03:00
Emux
ab32f25a7c Update Android Gradle plugin 2020-07-15 11:30:28 +03:00
Emux
ebfb7bd85d Merge pull request #776 from mapsforge/buffer
ReadBuffer.readFromFile: handle byte allocation
2020-07-14 15:04:45 +03:00
Emux
ed739c59f5 ReadBuffer.readFromFile: handle byte allocation 2020-07-14 15:00:49 +03:00
Emux
238a5f8f14 PointDrawable: correct constructor parameters, fix #775 2020-07-14 10:08:11 +03:00
Emux
126c47dfd7 Update samples 2020-07-03 14:22:35 +03:00
Emux
e8389e6887 LineStyle: rename constructor parameter stroke to color 2020-06-23 13:00:33 +03:00
Emux
81f526dc56 Merge pull request #773 from mapsforge/density
Android: use DisplayMetrics density
2020-06-22 15:11:33 +03:00
Emux
23ae072ed6 Android: use DisplayMetrics density 2020-06-22 14:02:06 +03:00
Emux
20f4fad7f3 Revert "Update Android build tools"
This reverts commit 1805e861
2020-06-11 11:21:38 +03:00
Emux
1805e86173 Update Android build tools 2020-06-11 11:15:00 +03:00
Emux
8acda4fbf5 Update Gradle 2020-05-29 14:35:14 +03:00
Emux
65d8bd9675 Merge pull request #771 from mapsforge/item
More mutable itemized layer
2020-05-01 10:25:13 +03:00
Emux
34ea0af92d Update changelog 2020-05-01 10:17:27 +03:00
Emux
2d64186a1a More mutable itemized layer 2020-04-28 14:15:05 +03:00
Emux
4604f07042 ItemizedLayer: fix populate in addItem 2020-04-26 16:00:29 +03:00
Emux
52f47bd797 Update docs 2020-04-24 14:45:21 +03:00
Emux
50f885b5f8 Update Android Gradle plugin 2020-04-21 11:26:58 +03:00
Emux
742405a193 Update documentation 2020-04-20 18:47:10 +03:00
Jan Lippert
18ee0a393f Update vtm-jeo module (#770) 2020-04-20 18:39:29 +03:00
Emux
29634d29b5 Update changelog 2020-04-16 18:52:12 +03:00
Andrey Novikov
635d5bacdd Render themes: symbol styles (#769) 2020-04-16 18:52:12 +03:00
Emux
1156976ea5 Disable vtm-jeo module, fix #768 2020-04-13 10:35:07 +03:00
Emux
964736d60f Update Android Gradle plugin 2020-04-01 14:52:07 +03:00
Emux
2de19ef080 Update documentation 2020-03-18 09:57:02 +02:00
Emux
0faf3eca66 InternalItem: make public 2020-03-17 12:18:46 +02:00
Emux
c239d8c1b7 Samples: set user agent for OpenStreetMap provider
https://operations.osmfoundation.org/policies/tiles/
2020-03-17 12:03:03 +02:00
Emux
c28aec5f59 MarkerRenderer: sort option 2020-03-17 11:34:53 +02:00
Emux
e0efff50a8 Update Android Gradle plugin 2020-03-02 15:51:02 +02:00
Emux
8364ff83d1 Update Mapsforge providers 2020-02-25 11:33:30 +02:00
Emux
5d7a4e0954 Update Gradle 2020-02-25 11:03:13 +02:00
Emux
2785d22a3a Update Mapsforge-Maps.md 2020-02-22 16:40:39 +02:00
Emux
2768f84a5f Update ISSUE_TEMPLATE.md 2020-02-22 14:28:34 +02:00
Emux
1ede5c5456 Update CONTRIBUTING.md 2020-02-22 14:26:10 +02:00
Emux
5778d0e74a Update Mapsforge providers 2020-02-21 14:27:41 +02:00
Emux
6672c57f05 Update Mapsforge server 2020-02-21 14:16:56 +02:00
Emux
c1fbdb42be Merge pull request #766 from zimmi/allow-clearing-event-listeners
Add EventDispatcher::clear
2020-02-10 17:50:03 +02:00
thomas
841b3af042 Add EventDispatcher::clear 2020-02-09 13:51:36 +01:00
Emux
bdd08e3486 Update Android build tools 2020-01-30 10:49:20 +02:00
Emux
68679c6dc0 Merge pull request #765 from Meibes/improvement/android/examples
android-examples: demonstrate usage of VectorTileLayer.getTileSource()
2020-01-30 10:32:59 +02:00
Stephan Brandt
9f280a41c0 ViewController: allow rotation around map view center, fix drift (#764) 2020-01-30 10:03:44 +02:00
Meibes
65c8d5199f small improvements to examples, demonstrating the new VectorTileLayer.getTileSource()-method 2020-01-28 19:42:42 +01:00
Emux
2b8326f465 Update changelog 2020-01-26 18:16:19 +02:00
Emux
488b350671 Merge pull request #763 from Meibes/feature/MapScaleBarLayer/onDetach
MapScaleBarLayer: add onDetach-method to free resources automatically
2020-01-26 18:12:58 +02:00
Emux
5285b0c272 Merge pull request #762 from Meibes/getTileSource
VectorTileLayer.getTileSource
2020-01-26 17:55:40 +02:00
Meibes
ebe98c8990 add onDetach-method to MapScaleBarLayer to free resources automatically
removed mapScaleBar.destroy() methods from onDestroy-Activity methods
changed global mapScaleBar-variables to local
2020-01-26 16:39:44 +01:00
Meibes
c30095c59d add getter for mTileSource in VectorTileLayer 2020-01-26 15:56:08 +01:00
Emux
f449a0a6fb Update Applications.md 2020-01-20 20:13:27 +02:00
Emux
74dfa07c81 Update Applications.md 2020-01-14 10:34:40 +02:00
78 changed files with 1002 additions and 440 deletions

View File

@@ -5,7 +5,7 @@ jdk:
env: env:
global: global:
- ANDROID=29 - ANDROID=29
- ANDROID_BUILD_TOOLS=29.0.2 - ANDROID_BUILD_TOOLS=29.0.3
- GRADLE_OPTS="-Xmx2048m" - GRADLE_OPTS="-Xmx2048m"
- secure: sW674wuFZOuoX7jHQHDbX3j8NxL8JxR07cyq+CrrqJ537dU9lxWQmMBRUpOb+p/q7sQ74PUtiKJkmFgKCSJSAKY+nr6GJ8P/q6u5TUKbmUWODSn8znehX2zualfvFwpF4PILok/wUzXBQE62jn4lUua7cMdsHRMNHbLmKqBoVL0meObDDjsaJ/RCbOPuruy3FmgvXPp0+Y4zl1GsklDSyjFzg4LBzjAk9Ryvh1O4zvJBkkyfCgurLKCnOKIPy3v5fPMS9oDfO1aarAVGoZZe416pvTW4hb8cdB6kn9XWYDob4NDFX/sP5k7XIhd/NAIn9LrKFg0sLtATaKLX+BcasF1CgDR/u6+SEeQd5QaRF7Go2Nq5Ltuu4OIFONI2qhEeVDDK6Otf2WSWj9KPno2GHuumBfbg4ypWoJgmZrMXk8JeVV/OP/0jIQz3p/7yfF21X1XBEqYaVHPAMKdEYYkCSa46KfACyOt6LfnkuCHtoTOpFo7sq0omIA2HOtpIx1u3vMBUyAbQqT6cokkKB1b6gNTFwhHc+8ybfLFPljJB8cWshI+V/b06S6fekRmvTNxvDykWNsdlkENBYqc9hMfjcT4hO4K+76SWN62mimQYODvFyfTVMC7WkQ3k/XEnmqUPV5XkbaILbS1d/tA57N148FiJ5/QXtI6Y94imubYyVqU= - secure: sW674wuFZOuoX7jHQHDbX3j8NxL8JxR07cyq+CrrqJ537dU9lxWQmMBRUpOb+p/q7sQ74PUtiKJkmFgKCSJSAKY+nr6GJ8P/q6u5TUKbmUWODSn8znehX2zualfvFwpF4PILok/wUzXBQE62jn4lUua7cMdsHRMNHbLmKqBoVL0meObDDjsaJ/RCbOPuruy3FmgvXPp0+Y4zl1GsklDSyjFzg4LBzjAk9Ryvh1O4zvJBkkyfCgurLKCnOKIPy3v5fPMS9oDfO1aarAVGoZZe416pvTW4hb8cdB6kn9XWYDob4NDFX/sP5k7XIhd/NAIn9LrKFg0sLtATaKLX+BcasF1CgDR/u6+SEeQd5QaRF7Go2Nq5Ltuu4OIFONI2qhEeVDDK6Otf2WSWj9KPno2GHuumBfbg4ypWoJgmZrMXk8JeVV/OP/0jIQz3p/7yfF21X1XBEqYaVHPAMKdEYYkCSa46KfACyOt6LfnkuCHtoTOpFo7sq0omIA2HOtpIx1u3vMBUyAbQqT6cokkKB1b6gNTFwhHc+8ybfLFPljJB8cWshI+V/b06S6fekRmvTNxvDykWNsdlkENBYqc9hMfjcT4hO4K+76SWN62mimQYODvFyfTVMC7WkQ3k/XEnmqUPV5XkbaILbS1d/tA57N148FiJ5/QXtI6Y94imubYyVqU=
- secure: AdKSZKA4gMuKXI4X4dQNJqcMv5OmPIHdN8fpy55Y9yoOQPQHZE3Zwc4QDWBh20q298jyEC854tVTPTysdZ7h+2s2FhsprYv1Bt/QNzKIrLpeIMj2quuVGMbdPuk08y55gost94KwVLJv0sIDpRlB/PEQkA7Mg/UDsT9zR8E1Ms5x+ul2C8e1ag0zzNl1wVnT5jY8WCp74uA/XXCcJl/80qT1stUERazCKwbKNo007hi7rdm4HA7YGevORq8e2r67je+WIBZUAwrHT0Zjuo4ibwUii4LdwvjuN3w0Z6e9Wf4x5bBqGgnih0T31uom2yPjNx+U/c2AWI+Nxfy/SEF2U+9bjBEZ3ZhI7F1B9ofXo2mhvvsVDiUrymMBbG2V64C9kAzeUh7xIBTqIrbdtpAEBV9FlLAtF2swVTwtCgZgcVTOt3RKXCi3X3nk3cuH7PAorFa/QGfT4xxVu2011FVAt2Rm7SD0ZWztZTSTz/4Nt/egtGBOJfrCc7oLEygLzDmLqsqCwCROITVQjWLjrtqDyLteaNiSXeNIQMKun3izApbXnHmXB+FV3R3EZocboqk3v5bmPTahnG6Ghc2zknWyyxSx+O9qIfOpHUL8JMJiT82lUQUeibtCn7DCE8wVQ/gYC5i+a+KO/d3NemSzIFlZ8aoUiEPYq18dYlsDXeLXwF0= - secure: AdKSZKA4gMuKXI4X4dQNJqcMv5OmPIHdN8fpy55Y9yoOQPQHZE3Zwc4QDWBh20q298jyEC854tVTPTysdZ7h+2s2FhsprYv1Bt/QNzKIrLpeIMj2quuVGMbdPuk08y55gost94KwVLJv0sIDpRlB/PEQkA7Mg/UDsT9zR8E1Ms5x+ul2C8e1ag0zzNl1wVnT5jY8WCp74uA/XXCcJl/80qT1stUERazCKwbKNo007hi7rdm4HA7YGevORq8e2r67je+WIBZUAwrHT0Zjuo4ibwUii4LdwvjuN3w0Z6e9Wf4x5bBqGgnih0T31uom2yPjNx+U/c2AWI+Nxfy/SEF2U+9bjBEZ3ZhI7F1B9ofXo2mhvvsVDiUrymMBbG2V64C9kAzeUh7xIBTqIrbdtpAEBV9FlLAtF2swVTwtCgZgcVTOt3RKXCi3X3nk3cuH7PAorFa/QGfT4xxVu2011FVAt2Rm7SD0ZWztZTSTz/4Nt/egtGBOJfrCc7oLEygLzDmLqsqCwCROITVQjWLjrtqDyLteaNiSXeNIQMKun3izApbXnHmXB+FV3R3EZocboqk3v5bmPTahnG6Ghc2zknWyyxSx+O9qIfOpHUL8JMJiT82lUQUeibtCn7DCE8wVQ/gYC5i+a+KO/d3NemSzIFlZ8aoUiEPYq18dYlsDXeLXwF0=

View File

@@ -4,7 +4,7 @@ buildscript {
jcenter() jcenter()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.5.3' classpath 'com.android.tools.build:gradle:4.0.1'
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
} }
} }
@@ -14,7 +14,7 @@ allprojects {
version = 'master-SNAPSHOT' version = 'master-SNAPSHOT'
ext.isReleaseVersion = !version.endsWith("SNAPSHOT") ext.isReleaseVersion = !version.endsWith("SNAPSHOT")
ext.androidBuildVersionTools = "29.0.2" ext.androidBuildVersionTools = "29.0.3"
ext.gdxVersion = "1.9.10" ext.gdxVersion = "1.9.10"
ext.gwtVersion = "2.8.2" ext.gwtVersion = "2.8.2"
ext.slf4jVersion = "1.7.28" ext.slf4jVersion = "1.7.28"
@@ -42,7 +42,6 @@ def versionName() { return version }
subprojects { subprojects {
repositories { repositories {
google() google()
maven { url 'https://repo.boundlessgeo.com/main/' }
jcenter() jcenter()
maven { url 'https://jitpack.io' } maven { url 'https://jitpack.io' }
} }

View File

@@ -7,6 +7,7 @@
| [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 | | [GPSLogger II](https://play.google.com/store/apps/details?id=com.emacberry.gpslogger) | Map and navigation, Fitness & Cycling application | Proprietary/Free | Android | Closed |
| [HabanaTrans](https://play.google.com/store/apps/details?id=cu.pabloapk.habanatrans&hl=es_419) | Public transport, map offline, gps, routing | Proprietary/Free | Android | Closed |
| [Hunt Cyprus](https://play.google.com/store/apps/developer?id=Talent+S.A.) | Map and navigation application for hunters | Proprietary/Free and Commercial | Android | Closed | | [Hunt Cyprus](https://play.google.com/store/apps/developer?id=Talent+S.A.) | Map and navigation application for hunters | Proprietary/Free and Commercial | Android | Closed |
| [Kurviger](https://kurviger.de/en) | Route planner specialized on motorcyclists | Proprietary/Free and Commercial | Android | Closed | | [Kurviger](https://kurviger.de/en) | Route planner specialized on motorcyclists | Proprietary/Free and Commercial | Android | Closed |
| [MapTrek](http://maptrek.mobi) | Application for outdoor activities | GPL3/Free and Commercial | Android | Open | | [MapTrek](http://maptrek.mobi) | Application for outdoor activities | GPL3/Free and Commercial | Android | Open |
@@ -18,6 +19,7 @@
| [topoGuide](http://www.topoguide.gr/index-en.php) | Digital guides for the outdoor | Proprietary/Free and Commercial | Android | Closed | | [topoGuide](http://www.topoguide.gr/index-en.php) | Digital guides for the outdoor | Proprietary/Free and Commercial | Android | Closed |
| [Ubitrek](https://play.google.com/store/apps/details?id=ubicarta.ubitrek) | Hiking with IGN maps | Proprietary/Free | Android | Closed | | [Ubitrek](https://play.google.com/store/apps/details?id=ubicarta.ubitrek) | Hiking with IGN maps | Proprietary/Free | Android | Closed |
| [VTM with Eclipse RCP](https://github.com/wolfgang-ch/vtm-with-rcp) | VTM with an Eclipse RCP application | GPL3/Free | Desktop | Open | | [VTM with Eclipse RCP](https://github.com/wolfgang-ch/vtm-with-rcp) | VTM with an Eclipse RCP application | GPL3/Free | Desktop | Open |
| [Walkaholic](https://play.google.com/store/apps/details?id=com.walkaholic.hikeapp) | Hiking app with official routes and online/offline maps | Proprietary/Free (in-app purchases) | Android | Closed |
| [XCTrack](http://xctrack.org/) | Flight computer for paraglider pilots | Proprietary/Free | Android | Closed | | [XCTrack](http://xctrack.org/) | Flight computer for paraglider pilots | Proprietary/Free | Android | Closed |
You know an application that is missing here? Please inform us by sending a message via our public [forum](https://groups.google.com/group/mapsforge-dev). You know an application that is missing here? Please inform us by sending a message via our public [forum](https://groups.google.com/group/mapsforge-dev).

View File

@@ -2,9 +2,7 @@
As an open source project, we welcome new contributors and appreciate your help. As an open source project, we welcome new contributors and appreciate your help.
Before you start working on an unresolved issue or try to implement a new feature, please contact us via our public [forum](https://groups.google.com/group/mapsforge-dev). Before you start working on an unresolved issue or try to implement a new feature, please contact us via our public [forum](https://groups.google.com/group/mapsforge-dev). We will then discuss the best way to realize your proposal and figure out how we can help you to get started quickly.
You may also create a new issue on [Github](https://github.com/mapsforge/vtm/issues) or comment on an existing one to describe your ideas. We will then discuss the best way to realize your proposal and figure out how we can help you to get started quickly.
If you are only requesting a small change in the code, you may attach a patch file to the corresponding issue, but it is best to create a pull request on Github. Make sure that your patch is derived from the latest version in our **master** repository, otherwise we might be unable to apply it. Important is to keep pull requests simple with one feature in each. Please follow our code and style conventions. If you are only requesting a small change in the code, you may attach a patch file to the corresponding issue, but it is best to create a pull request on Github. Make sure that your patch is derived from the latest version in our **master** repository, otherwise we might be unable to apply it. Important is to keep pull requests simple with one feature in each. Please follow our code and style conventions.

View File

@@ -1,5 +1,15 @@
# Changelog # Changelog
## Version 0.14.0 (2020-08-25)
- Render themes: symbol styles [#769](https://github.com/mapsforge/vtm/pull/769)
- More mutable itemized layer [#771](https://github.com/mapsforge/vtm/pull/771)
- Marker renderer sort option
- `Parameters.MARKER_SORT`
- Update vtm-jeo module [#770](https://github.com/mapsforge/vtm/pull/770)
- Many other minor improvements and bug fixes
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.14.0)
## Version 0.13.0 (2020-01-12) ## Version 0.13.0 (2020-01-12)
- Render themes: symbols on lines with billboard / rotation [#743](https://github.com/mapsforge/vtm/pull/743) - Render themes: symbols on lines with billboard / rotation [#743](https://github.com/mapsforge/vtm/pull/743)

View File

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

View File

@@ -129,29 +129,15 @@ implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9'
### jeo (indoor maps) ### jeo (indoor maps)
Add _first_ the Boundless repository:
```groovy ```groovy
repositories { repositories {
maven { url 'https://repo.boundlessgeo.com/main/' } maven { url 'https://jitpack.io' }
jcenter()
...
} }
```
```groovy
implementation 'org.mapsforge:vtm-jeo:[CURRENT-VERSION]' implementation 'org.mapsforge:vtm-jeo:[CURRENT-VERSION]'
implementation('org.jeo:jeo:0-SNAPSHOT') { implementation('com.github.jeo.jeo:jeo-carto:master-SNAPSHOT') {
exclude group: 'org.slf4j', module: 'slf4j-jdk14' exclude group: 'org.slf4j', module: 'slf4j-jdk14'
} }
implementation('org.jeo:jeo-carto:0-SNAPSHOT') {
exclude group: 'org.slf4j', module: 'slf4j-jdk14'
}
implementation('org.jeo:jeo-render:0-SNAPSHOT') {
exclude group: 'org.slf4j', module: 'slf4j-jdk14'
}
implementation 'org.osgeo:proj4j:0.1.0:jeo'
implementation 'com.metaweb:lessen:1.0'
implementation 'com.vividsolutions:jts:1.13'
``` ```
## Snapshots ## Snapshots

View File

@@ -1,11 +1,12 @@
# Mapsforge map providers (in lexical order) # Mapsforge map providers (in lexical order)
- [AndroidMaps](http://www.androidmaps.co.uk/) - [AndroidMaps](https://www.androidmaps.co.uk/)
- [Freizeitkarte](http://www.freizeitkarte-osm.de/android/en/index.html) - [BBBike](https://extract.bbbike.org/?format=mapsforge-osm.zip)
- [Kurviger](https://offline-maps.kurviger.de/) - [Freizeitkarte](https://www.freizeitkarte-osm.de/android/en/index.html)
- [Mapsforge](http://download.mapsforge.org/) - [Kurviger](https://download.kurviger.de/)
- [OpenAndroMaps](http://www.openandromaps.org/en/) - [Mapsforge](https://download.mapsforge.org/)
- [OpenMaps](http://openmaps.eu/) - [OpenAndroMaps](https://www.openandromaps.org/en/)
- [OpenMaps](https://openmaps.eu/)
- [vector.city](https://vector.city/) - [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

@@ -2,7 +2,7 @@
**This article describes how to use XML-based render-themes to style maps.** **This article describes how to use XML-based render-themes to style maps.**
If you have any questions or problems, don't hesitate to ask our public [forum](https://groups.google.com/group/mapsforge-dev) for help. You can also report bugs and improvement requests via our [issue tracker](https://github.com/mapsforge/vtm/issues). If you have any questions or problems, don't hesitate to ask our public [forum](https://groups.google.com/group/mapsforge-dev) for help.
## Introduction ## Introduction
@@ -109,11 +109,12 @@ There are different possibilities to simplify and accelerate map styling or chan
### Style patterns ### Style patterns
If you want to use a specific style multiple times you not have to rewrite it for each text, area, or line rule. If you want to use a specific style multiple times you not have to rewrite it for each text, line, area or symbol rule.
If you define a style set an `id` and use it with `use` in your rendering instructions: If you define a style set an `id` and use it with `use` in your rendering instructions:
- `style-text` - `style-text`
- `style-line` - `style-line`
- `style-area` - `style-area`
- `style-symbol`
This example styles all areas with the_residential_ style, which haven't the `highway` or `building` key. This example styles all areas with the_residential_ style, which haven't the `highway` or `building` key.

View File

@@ -6,7 +6,7 @@
# http://www.gradle.org/docs/current/userguide/build_environment.html # http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process. # Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings. # The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m org.gradle.jvmargs=-Xmx2048m
# When configured, Gradle will run in incubating parallel mode. # When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit # This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects

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-5.4.1-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View File

@@ -233,7 +233,11 @@
<xs:complexType name="symbol"> <xs:complexType name="symbol">
<xs:attribute name="cat" type="xs:string" use="optional" /> <xs:attribute name="cat" type="xs:string" use="optional" />
<xs:attribute name="src" type="tns:src" use="required" />
<xs:attribute name="id" default="0" type="xs:string" use="optional" />
<xs:attribute name="use" default="0" type="xs:string" use="optional" />
<xs:attribute name="src" type="tns:src" use="optional" />
<xs:attribute name="symbol-width" type="xs:positiveInteger" use="optional" /> <xs:attribute name="symbol-width" type="xs:positiveInteger" use="optional" />
<xs:attribute name="symbol-height" type="xs:positiveInteger" use="optional" /> <xs:attribute name="symbol-height" type="xs:positiveInteger" use="optional" />
<xs:attribute name="symbol-percent" type="xs:positiveInteger" use="optional" /> <xs:attribute name="symbol-percent" type="xs:positiveInteger" use="optional" />
@@ -332,6 +336,7 @@
<xs:sequence maxOccurs="256" minOccurs="0"> <xs:sequence maxOccurs="256" minOccurs="0">
<xs:choice maxOccurs="unbounded" minOccurs="0"> <xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element name="style-text" type="tns:text" /> <xs:element name="style-text" type="tns:text" />
<xs:element name="style-symbol" type="tns:symbol" />
<xs:element name="style-area" type="tns:area" /> <xs:element name="style-area" type="tns:area" />
<xs:element name="style-line" type="tns:line" /> <xs:element name="style-line" type="tns:line" />
<!-- <xs:element name="style-outline" type="tns:line" /> --> <!-- <xs:element name="style-outline" type="tns:line" /> -->

View File

@@ -16,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:0.13.0' implementation 'org.mapsforge:mapsforge-poi-android:0.14.0'
implementation 'org.mapsforge:sqlite-android:0.13.0:natives-armeabi-v7a' implementation 'org.mapsforge:sqlite-android:0.14.0:natives-armeabi-v7a'
implementation 'org.mapsforge:sqlite-android:0.13.0:natives-arm64-v8a' implementation 'org.mapsforge:sqlite-android:0.14.0:natives-arm64-v8a'
implementation 'org.mapsforge:sqlite-android:0.13.0:natives-x86' implementation 'org.mapsforge:sqlite-android:0.14.0:natives-x86'
implementation 'org.mapsforge:sqlite-android:0.13.0:natives-x86_64' implementation 'org.mapsforge:sqlite-android:0.14.0:natives-x86_64'
} }
android { android {

View File

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

View File

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

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2016-2019 devemux86 * Copyright 2016-2020 devemux86
* Copyright 2017 nebular * Copyright 2017 nebular
* *
* This program is free software: you can redistribute it and/or modify it under the * This program is free software: you can redistribute it and/or modify it under the
@@ -22,11 +22,12 @@ import org.oscim.backend.canvas.Color;
import org.oscim.core.GeoPoint; import org.oscim.core.GeoPoint;
import org.oscim.layers.marker.*; import org.oscim.layers.marker.*;
import org.oscim.layers.tile.bitmap.BitmapTileLayer; import org.oscim.layers.tile.bitmap.BitmapTileLayer;
import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.OkHttpEngine; import org.oscim.tiling.source.OkHttpEngine;
import org.oscim.tiling.source.UrlTileSource;
import org.oscim.tiling.source.bitmap.DefaultSources; import org.oscim.tiling.source.bitmap.DefaultSources;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
public class ClusterMarkerOverlayActivity extends MarkerOverlayActivity { public class ClusterMarkerOverlayActivity extends MarkerOverlayActivity {
@@ -39,9 +40,10 @@ public class ClusterMarkerOverlayActivity extends MarkerOverlayActivity {
// Map events receiver // Map events receiver
mMap.layers().add(new MapEventsReceiver(mMap)); mMap.layers().add(new MapEventsReceiver(mMap));
TileSource tileSource = DefaultSources.OPENSTREETMAP UrlTileSource tileSource = DefaultSources.OPENSTREETMAP
.httpFactory(new OkHttpEngine.OkHttpFactory()) .httpFactory(new OkHttpEngine.OkHttpFactory())
.build(); .build();
tileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-android-example"));
mMap.layers().add(new BitmapTileLayer(mMap, tileSource)); mMap.layers().add(new BitmapTileLayer(mMap, tileSource));
Bitmap bitmapPoi = new AndroidBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.marker_poi)); Bitmap bitmapPoi = new AndroidBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.marker_poi));
@@ -63,15 +65,15 @@ public class ClusterMarkerOverlayActivity extends MarkerOverlayActivity {
}; };
} }
}; };
mMarkerLayer = new ItemizedLayer<>( mMarkerLayer = new ItemizedLayer(
mMap, mMap,
new ArrayList<MarkerItem>(), new ArrayList<MarkerInterface>(),
markerRendererFactory, markerRendererFactory,
this); this);
mMap.layers().add(mMarkerLayer); mMap.layers().add(mMarkerLayer);
// Create some markers spaced STEP degrees // Create some markers spaced STEP degrees
List<MarkerItem> pts = new ArrayList<>(); List<MarkerInterface> pts = new ArrayList<>();
mMap.setMapPosition(53.08, 8.83, 1 << 15); mMap.setMapPosition(53.08, 8.83, 1 << 15);
GeoPoint center = mMap.getMapPosition().getGeoPoint(); GeoPoint center = mMap.getMapPosition().getGeoPoint();
for (int x = -COUNT; x < COUNT; x++) { for (int x = -COUNT; x < COUNT; x++) {

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016-2018 devemux86 * Copyright 2016-2020 devemux86
* Copyright 2018-2019 Gustl22 * Copyright 2018-2019 Gustl22
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
@@ -71,7 +71,7 @@ public class GdxActivity extends AndroidApplication {
DateTimeAdapter.init(new DateTime()); DateTimeAdapter.init(new DateTime());
DisplayMetrics metrics = getResources().getDisplayMetrics(); DisplayMetrics metrics = getResources().getDisplayMetrics();
CanvasAdapter.dpi = (int) (metrics.scaledDensity * CanvasAdapter.DEFAULT_DPI); CanvasAdapter.dpi = (int) (metrics.density * CanvasAdapter.DEFAULT_DPI);
Tile.SIZE = Tile.calculateTileSize(); Tile.SIZE = Tile.calculateTileSize();
AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration(); AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();

View File

@@ -42,7 +42,6 @@ public class GettingStarted extends Activity {
private static final String MAP_FILE = "berlin.map"; private static final String MAP_FILE = "berlin.map";
private MapView mapView; private MapView mapView;
private MapScaleBar mapScaleBar;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
@@ -69,7 +68,7 @@ public class GettingStarted extends Activity {
mapView.map().setTheme(VtmThemes.DEFAULT); mapView.map().setTheme(VtmThemes.DEFAULT);
// Scale bar // Scale bar
mapScaleBar = new DefaultMapScaleBar(mapView.map()); MapScaleBar mapScaleBar = new DefaultMapScaleBar(mapView.map());
MapScaleBarLayer mapScaleBarLayer = new MapScaleBarLayer(mapView.map(), mapScaleBar); MapScaleBarLayer mapScaleBarLayer = new MapScaleBarLayer(mapView.map(), mapScaleBar);
mapScaleBarLayer.getRenderer().setPosition(GLViewport.Position.BOTTOM_LEFT); mapScaleBarLayer.getRenderer().setPosition(GLViewport.Position.BOTTOM_LEFT);
mapScaleBarLayer.getRenderer().setOffset(5 * CanvasAdapter.getScale(), 0); mapScaleBarLayer.getRenderer().setOffset(5 * CanvasAdapter.getScale(), 0);
@@ -94,8 +93,6 @@ public class GettingStarted extends Activity {
@Override @Override
protected void onDestroy() { protected void onDestroy() {
if (mapScaleBar != null)
mapScaleBar.destroy();
mapView.onDestroy(); mapView.onDestroy();
super.onDestroy(); super.onDestroy();
} }

View File

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

View File

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

View File

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

View File

@@ -1,5 +1,6 @@
/* /*
* Copyright 2019 Gustl22 * Copyright 2019 Gustl22
* Copyright 2020 devemux86
* *
* This program is free software: you can redistribute it and/or modify it under the * This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software * terms of the GNU Lesser General Public License as published by the Free Software
@@ -15,7 +16,6 @@
package org.oscim.android.test; package org.oscim.android.test;
import android.os.Bundle; import android.os.Bundle;
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;
import org.oscim.layers.tile.buildings.S3DBLayer; import org.oscim.layers.tile.buildings.S3DBLayer;
@@ -25,9 +25,12 @@ import org.oscim.map.Viewport;
import org.oscim.theme.VtmThemes; import org.oscim.theme.VtmThemes;
import org.oscim.tiling.TileSource; import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.OkHttpEngine; import org.oscim.tiling.source.OkHttpEngine;
import org.oscim.tiling.source.UrlTileSource;
import org.oscim.tiling.source.bitmap.DefaultSources; import org.oscim.tiling.source.bitmap.DefaultSources;
import org.oscim.tiling.source.overpass.OverpassTileSource; import org.oscim.tiling.source.overpass.OverpassTileSource;
import java.util.Collections;
/** /**
* Use Overpass API data for vector layer. * Use Overpass API data for vector layer.
* Only for developing as can be error-prone. * Only for developing as can be error-prone.
@@ -46,7 +49,7 @@ public class OverpassActivity extends MapActivity {
.build(); .build();
VectorTileLayer l = mMap.setBaseMap(tileSource); VectorTileLayer l = mMap.setBaseMap(tileSource);
TileSource bitmapTileSource = DefaultSources.OPENSTREETMAP UrlTileSource bitmapTileSource = DefaultSources.OPENSTREETMAP
.httpFactory(new OkHttpEngine.OkHttpFactory()) .httpFactory(new OkHttpEngine.OkHttpFactory())
.zoomMax(15) .zoomMax(15)
.fadeSteps(new BitmapTileLayer.FadeStep[]{ .fadeSteps(new BitmapTileLayer.FadeStep[]{
@@ -54,6 +57,7 @@ public class OverpassActivity extends MapActivity {
new BitmapTileLayer.FadeStep(16, Viewport.MAX_ZOOM_LEVEL, 0f, 0f) new BitmapTileLayer.FadeStep(16, Viewport.MAX_ZOOM_LEVEL, 0f, 0f)
}) })
.build(); .build();
bitmapTileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-android-example"));
mMap.layers().add(new BitmapTileLayer(mMap, bitmapTileSource)); mMap.layers().add(new BitmapTileLayer(mMap, bitmapTileSource));
BuildingLayer.RAW_DATA = true; BuildingLayer.RAW_DATA = true;

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2017-2019 devemux86 * Copyright 2017-2020 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
@@ -41,6 +41,7 @@ import org.oscim.event.GestureListener;
import org.oscim.event.MotionEvent; import org.oscim.event.MotionEvent;
import org.oscim.layers.Layer; import org.oscim.layers.Layer;
import org.oscim.layers.marker.ItemizedLayer; import org.oscim.layers.marker.ItemizedLayer;
import org.oscim.layers.marker.MarkerInterface;
import org.oscim.layers.marker.MarkerItem; import org.oscim.layers.marker.MarkerItem;
import org.oscim.layers.marker.MarkerSymbol; import org.oscim.layers.marker.MarkerSymbol;
import org.oscim.map.Map; import org.oscim.map.Map;
@@ -57,14 +58,14 @@ import java.util.List;
* Long press on map to search inside visible bounding box.<br/> * Long press on map to search inside visible bounding box.<br/>
* Tap on POIs to show their name (in default locale). * Tap on POIs to show their name (in default locale).
*/ */
public class PoiSearchActivity extends MapsforgeActivity implements ItemizedLayer.OnItemGestureListener<MarkerItem> { public class PoiSearchActivity extends MapsforgeActivity implements ItemizedLayer.OnItemGestureListener<MarkerInterface> {
private static final Logger log = LoggerFactory.getLogger(PoiSearchActivity.class); private static final Logger log = LoggerFactory.getLogger(PoiSearchActivity.class);
private static final String POI_CATEGORY = "Restaurants"; private static final String POI_CATEGORY = "Restaurants";
private static final int SELECT_POI_FILE = MapsforgeActivity.SELECT_THEME_FILE + 1; private static final int SELECT_POI_FILE = MapsforgeActivity.SELECT_THEME_FILE + 1;
private ItemizedLayer<MarkerItem> mMarkerLayer; private ItemizedLayer mMarkerLayer;
private PoiPersistenceManager mPersistenceManager; private PoiPersistenceManager mPersistenceManager;
public static class PoiFilePicker extends FilePicker { public static class PoiFilePicker extends FilePicker {
@@ -138,7 +139,7 @@ public class PoiSearchActivity extends MapsforgeActivity implements ItemizedLaye
super.onActivityResult(requestCode, resultCode, intent); super.onActivityResult(requestCode, resultCode, intent);
if (requestCode == SELECT_MAP_FILE) { if (requestCode == SELECT_MAP_FILE) {
if (mTileSource != null) if (mTileLayer.getTileSource() != null)
startActivityForResult(new Intent(this, PoiFilePicker.class), startActivityForResult(new Intent(this, PoiFilePicker.class),
SELECT_POI_FILE); SELECT_POI_FILE);
else else
@@ -154,19 +155,20 @@ public class PoiSearchActivity extends MapsforgeActivity implements ItemizedLaye
Bitmap bitmap = new AndroidBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.marker_green)); Bitmap bitmap = new AndroidBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.marker_green));
MarkerSymbol symbol = new MarkerSymbol(bitmap, MarkerSymbol.HotspotPlace.BOTTOM_CENTER); MarkerSymbol symbol = new MarkerSymbol(bitmap, MarkerSymbol.HotspotPlace.BOTTOM_CENTER);
mMarkerLayer = new ItemizedLayer<>(mMap, new ArrayList<MarkerItem>(), symbol, this); mMarkerLayer = new ItemizedLayer(mMap, new ArrayList<MarkerInterface>(), symbol, this);
mMap.layers().add(mMarkerLayer); mMap.layers().add(mMarkerLayer);
} }
} }
@Override @Override
public boolean onItemSingleTapUp(int index, MarkerItem item) { public boolean onItemSingleTapUp(int index, MarkerInterface item) {
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show(); MarkerItem markerItem = (MarkerItem) item;
Toast.makeText(this, markerItem.getTitle(), Toast.LENGTH_SHORT).show();
return true; return true;
} }
@Override @Override
public boolean onItemLongPress(int index, MarkerItem item) { public boolean onItemLongPress(int index, MarkerInterface item) {
return false; return false;
} }
@@ -315,7 +317,7 @@ public class PoiSearchActivity extends MapsforgeActivity implements ItemizedLaye
} }
// Overlay POI // Overlay POI
List<MarkerItem> pts = new ArrayList<>(); List<MarkerInterface> pts = new ArrayList<>();
for (PointOfInterest pointOfInterest : pointOfInterests) for (PointOfInterest pointOfInterest : pointOfInterests)
pts.add(new MarkerItem(pointOfInterest.getName(), "", new GeoPoint(pointOfInterest.getLatitude(), pointOfInterest.getLongitude()))); pts.add(new MarkerItem(pointOfInterest.getName(), "", new GeoPoint(pointOfInterest.getLatitude(), pointOfInterest.getLongitude())));
mMarkerLayer.addItems(pts); mMarkerLayer.addItems(pts);

View File

@@ -97,7 +97,7 @@ public class ReverseGeocodeActivity extends MapsforgeActivity {
int tileYMax = MercatorProjection.pixelYToTileY(pixelY + touchRadius, (byte) mMap.getMapPosition().getZoomLevel()); int tileYMax = MercatorProjection.pixelYToTileY(pixelY + touchRadius, (byte) mMap.getMapPosition().getZoomLevel());
Tile upperLeft = new Tile(tileXMin, tileYMin, (byte) mMap.getMapPosition().getZoomLevel()); Tile upperLeft = new Tile(tileXMin, tileYMin, (byte) mMap.getMapPosition().getZoomLevel());
Tile lowerRight = new Tile(tileXMax, tileYMax, (byte) mMap.getMapPosition().getZoomLevel()); Tile lowerRight = new Tile(tileXMax, tileYMax, (byte) mMap.getMapPosition().getZoomLevel());
MapReadResult mapReadResult = ((MapDatabase) ((OverzoomTileDataSource) mTileSource.getDataSource()).getDataSource()).readLabels(upperLeft, lowerRight); MapReadResult mapReadResult = ((MapDatabase) ((OverzoomTileDataSource) mTileLayer.getTileSource().getDataSource()).getDataSource()).readLabels(upperLeft, lowerRight);
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();

View File

@@ -1,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-2019 devemux86 * Copyright 2016-2020 devemux86
* Copyright 2016 mar-v-in * Copyright 2016 mar-v-in
* Copyright 2016 Mathieu de Brito * Copyright 2016 Mathieu de Brito
* Copyright 2017-2018 Longri * Copyright 2017-2018 Longri
@@ -99,12 +99,6 @@ public class Samples extends Activity {
linearLayout.addView(createButton(GdxActivity.class)); linearLayout.addView(createButton(GdxActivity.class));
linearLayout.addView(createLabel("Features")); linearLayout.addView(createLabel("Features"));
linearLayout.addView(createButton(null, "GraphHopper Routing", new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/graphhopper/graphhopper/tree/master/android")));
}
}));
linearLayout.addView(createButton(LocationActivity.class)); linearLayout.addView(createButton(LocationActivity.class));
linearLayout.addView(createButton(LocationTextureActivity.class)); linearLayout.addView(createButton(LocationTextureActivity.class));
linearLayout.addView(createButton(PoiSearchActivity.class)); linearLayout.addView(createButton(PoiSearchActivity.class));

View File

@@ -38,7 +38,6 @@ import org.oscim.theme.ThemeLoader;
import org.oscim.theme.VtmThemes; import org.oscim.theme.VtmThemes;
public class SimpleMapActivity extends BaseMapActivity { public class SimpleMapActivity extends BaseMapActivity {
private DefaultMapScaleBar mapScaleBar;
BuildingLayer mBuildingLayer; BuildingLayer mBuildingLayer;
private boolean mShadow; private boolean mShadow;
@@ -71,7 +70,7 @@ public class SimpleMapActivity extends BaseMapActivity {
groupLayer.layers.add(new LabelLayer(mMap, mBaseLayer)); groupLayer.layers.add(new LabelLayer(mMap, mBaseLayer));
mMap.layers().add(groupLayer); mMap.layers().add(groupLayer);
mapScaleBar = new DefaultMapScaleBar(mMap); DefaultMapScaleBar mapScaleBar = new DefaultMapScaleBar(mMap);
mapScaleBar.setScaleBarMode(DefaultMapScaleBar.ScaleBarMode.BOTH); mapScaleBar.setScaleBarMode(DefaultMapScaleBar.ScaleBarMode.BOTH);
mapScaleBar.setDistanceUnitAdapter(MetricUnitAdapter.INSTANCE); mapScaleBar.setDistanceUnitAdapter(MetricUnitAdapter.INSTANCE);
mapScaleBar.setSecondaryDistanceUnitAdapter(ImperialUnitAdapter.INSTANCE); mapScaleBar.setSecondaryDistanceUnitAdapter(ImperialUnitAdapter.INSTANCE);
@@ -86,14 +85,6 @@ public class SimpleMapActivity extends BaseMapActivity {
mMap.setTheme(VtmThemes.DEFAULT); mMap.setTheme(VtmThemes.DEFAULT);
} }
@Override
protected void onDestroy() {
if (mapScaleBar != null)
mapScaleBar.destroy();
super.onDestroy();
}
void runTheMonkey() { void runTheMonkey() {
themes[0] = ThemeLoader.load(VtmThemes.DEFAULT); themes[0] = ThemeLoader.load(VtmThemes.DEFAULT);
themes[1] = ThemeLoader.load(VtmThemes.OSMARENDER); themes[1] = ThemeLoader.load(VtmThemes.OSMARENDER);

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright 2012 Hannes Janetzek * Copyright 2012 Hannes Janetzek
* Copyright 2016-2019 devemux86 * Copyright 2016-2020 devemux86
* Copyright 2018-2019 Gustl22 * Copyright 2018-2019 Gustl22
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
@@ -112,7 +112,7 @@ public class MapView extends GLSurfaceView {
DateTimeAdapter.init(new DateTime()); DateTimeAdapter.init(new DateTime());
DisplayMetrics metrics = getResources().getDisplayMetrics(); DisplayMetrics metrics = getResources().getDisplayMetrics();
CanvasAdapter.dpi = (int) (metrics.scaledDensity * CanvasAdapter.DEFAULT_DPI); CanvasAdapter.dpi = (int) (metrics.density * CanvasAdapter.DEFAULT_DPI);
if (!Parameters.CUSTOM_TILE_SIZE) if (!Parameters.CUSTOM_TILE_SIZE)
Tile.SIZE = Tile.calculateTileSize(); Tile.SIZE = Tile.calculateTileSize();

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016-2019 devemux86 * Copyright 2016-2020 devemux86
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@@ -41,6 +41,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.File; import java.io.File;
import java.util.Collections;
public class MapLayers { public class MapLayers {
@@ -183,7 +184,9 @@ public class MapLayers {
switch (id) { switch (id) {
case R.id.menu_layer_openstreetmap: case R.id.menu_layer_openstreetmap:
mBackgroundLayer = new BitmapTileLayer(App.map, DefaultSources.OPENSTREETMAP.build()); UrlTileSource tileSource = DefaultSources.OPENSTREETMAP.build();
tileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-playground"));
mBackgroundLayer = new BitmapTileLayer(App.map, tileSource);
break; break;
case R.id.menu_layer_naturalearth: case R.id.menu_layer_naturalearth:

View File

@@ -23,19 +23,14 @@ import android.view.View;
import android.widget.Button; import android.widget.Button;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.Toast; import android.widget.Toast;
import org.oscim.android.canvas.AndroidGraphics; import org.oscim.android.canvas.AndroidGraphics;
import org.oscim.core.BoundingBox; import org.oscim.core.BoundingBox;
import org.oscim.core.GeoPoint; import org.oscim.core.GeoPoint;
import org.oscim.layers.marker.MarkerInterface;
import org.oscim.layers.marker.MarkerSymbol; import org.oscim.layers.marker.MarkerSymbol;
import org.oscim.layers.marker.MarkerSymbol.HotspotPlace; import org.oscim.layers.marker.MarkerSymbol.HotspotPlace;
import org.oscim.map.Map; import org.oscim.map.Map;
import org.osmdroid.location.FlickrPOIProvider; import org.osmdroid.location.*;
import org.osmdroid.location.FourSquareProvider;
import org.osmdroid.location.GeoNamesPOIProvider;
import org.osmdroid.location.NominatimPOIProvider;
import org.osmdroid.location.POI;
import org.osmdroid.location.PicasaPOIProvider;
import org.osmdroid.overlays.DefaultInfoWindow; import org.osmdroid.overlays.DefaultInfoWindow;
import org.osmdroid.overlays.ExtendedMarkerItem; import org.osmdroid.overlays.ExtendedMarkerItem;
import org.osmdroid.overlays.ItemizedOverlayWithBubble; import org.osmdroid.overlays.ItemizedOverlayWithBubble;
@@ -45,7 +40,7 @@ import java.util.List;
public class POISearch { public class POISearch {
private final ArrayList<POI> mPOIs; private final ArrayList<POI> mPOIs;
ItemizedOverlayWithBubble<ExtendedMarkerItem> poiMarkers; ItemizedOverlayWithBubble poiMarkers;
MarkerSymbol[] mMarkers; MarkerSymbol[] mMarkers;
private static final int MDEFAULT = 0; private static final int MDEFAULT = 0;
@@ -57,9 +52,9 @@ public class POISearch {
POISearch() { POISearch() {
mPOIs = new ArrayList<POI>(); mPOIs = new ArrayList<POI>();
//POI markers: //POI markers:
final ArrayList<ExtendedMarkerItem> poiItems = new ArrayList<ExtendedMarkerItem>(); final ArrayList<MarkerInterface> poiItems = new ArrayList<>();
poiMarkers = new ItemizedOverlayWithBubble<ExtendedMarkerItem>(App.map, poiMarkers = new ItemizedOverlayWithBubble(App.map,
App.activity, App.activity,
null, null,
poiItems, poiItems,

View File

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

View File

@@ -2,7 +2,6 @@ package org.osmdroid.overlays;
import android.content.Context; import android.content.Context;
import android.util.Log; import android.util.Log;
import org.oscim.app.App; import org.oscim.app.App;
import org.oscim.core.GeoPoint; import org.oscim.core.GeoPoint;
import org.oscim.core.MapPosition; import org.oscim.core.MapPosition;
@@ -10,6 +9,7 @@ import org.oscim.core.Point;
import org.oscim.event.Event; import org.oscim.event.Event;
import org.oscim.event.MotionEvent; import org.oscim.event.MotionEvent;
import org.oscim.layers.marker.ItemizedLayer; import org.oscim.layers.marker.ItemizedLayer;
import org.oscim.layers.marker.MarkerInterface;
import org.oscim.layers.marker.MarkerItem; import org.oscim.layers.marker.MarkerItem;
import org.oscim.layers.marker.MarkerSymbol; import org.oscim.layers.marker.MarkerSymbol;
import org.oscim.map.Map; import org.oscim.map.Map;
@@ -22,14 +22,12 @@ import java.util.List;
* taps on an overlay item, and displays item attributes. <br> * taps on an overlay item, and displays item attributes. <br>
* Items must be ExtendedMarkerItem. <br> * Items must be ExtendedMarkerItem. <br>
* *
* @param <Item> ...
* @author M.Kergall * @author M.Kergall
* @see ExtendedMarkerItem * @see ExtendedMarkerItem
* @see InfoWindow * @see InfoWindow
*/ */
public class ItemizedOverlayWithBubble<Item extends MarkerItem> extends public class ItemizedOverlayWithBubble extends ItemizedLayer
ItemizedLayer<Item> implements implements ItemizedLayer.OnItemGestureListener<MarkerInterface>, Map.UpdateListener {
ItemizedLayer.OnItemGestureListener<Item>, Map.UpdateListener {
/* only one for all items of this overlay => one at a time */ /* only one for all items of this overlay => one at a time */
protected InfoWindow mBubble; protected InfoWindow mBubble;
@@ -40,7 +38,7 @@ public class ItemizedOverlayWithBubble<Item extends MarkerItem> extends
static int layoutResId = 0; static int layoutResId = 0;
public ItemizedOverlayWithBubble(Map map, Context context, public ItemizedOverlayWithBubble(Map map, Context context,
MarkerSymbol marker, List<Item> list, InfoWindow bubble) { MarkerSymbol marker, List<MarkerInterface> list, InfoWindow bubble) {
super(map, list, marker, null); super(map, list, marker, null);
if (bubble != null) { if (bubble != null) {
@@ -66,12 +64,12 @@ public class ItemizedOverlayWithBubble<Item extends MarkerItem> extends
} }
public ItemizedOverlayWithBubble(Map map, Context context, public ItemizedOverlayWithBubble(Map map, Context context,
MarkerSymbol marker, List<Item> aList) { MarkerSymbol marker, List<MarkerInterface> aList) {
this(map, context, marker, aList, null); this(map, context, marker, aList, null);
} }
@Override @Override
public boolean onItemLongPress(int index, MarkerItem item) { public boolean onItemLongPress(int index, MarkerInterface item) {
if (mBubble.isOpen()) if (mBubble.isOpen())
hideBubble(); hideBubble();
else else
@@ -80,7 +78,7 @@ public class ItemizedOverlayWithBubble<Item extends MarkerItem> extends
} }
@Override @Override
public boolean onItemSingleTapUp(int index, MarkerItem item) { public boolean onItemSingleTapUp(int index, MarkerInterface item) {
showBubble(index); showBubble(index);
return true; return true;
@@ -121,7 +119,6 @@ public class ItemizedOverlayWithBubble<Item extends MarkerItem> extends
* *
* @param index of the overlay item to show * @param index of the overlay item to show
*/ */
@SuppressWarnings("unchecked")
public void showBubbleOnItem(int index) { public void showBubbleOnItem(int index) {
ExtendedMarkerItem item = (ExtendedMarkerItem) (mItemList.get(index)); ExtendedMarkerItem item = (ExtendedMarkerItem) (mItemList.get(index));
mItemWithBubble = item; mItemWithBubble = item;
@@ -131,7 +128,7 @@ public class ItemizedOverlayWithBubble<Item extends MarkerItem> extends
mMap.animator().animateTo(item.geoPoint); mMap.animator().animateTo(item.geoPoint);
mMap.updateMap(true); mMap.updateMap(true);
setFocus((Item) item); setFocus(item);
} }
} }
@@ -179,7 +176,7 @@ public class ItemizedOverlayWithBubble<Item extends MarkerItem> extends
} }
@Override @Override
public synchronized boolean removeItem(final Item item) { public synchronized boolean removeItem(final MarkerInterface item) {
boolean result = super.removeItem(item); boolean result = super.removeItem(item);
if (mItemWithBubble == item) { if (mItemWithBubble == item) {
hideBubble(); hideBubble();

View File

@@ -3,10 +3,7 @@ apply plugin: 'maven'
dependencies { dependencies {
api project(':vtm') api project(':vtm')
api('org.jeo:jeo:0-SNAPSHOT') { api('com.github.jeo.jeo:jeo-carto:master-SNAPSHOT') {
exclude group: 'org.slf4j', module: 'slf4j-jdk14'
}
api('org.jeo:jeo-carto:0-SNAPSHOT') {
exclude group: 'org.slf4j', module: 'slf4j-jdk14' exclude group: 'org.slf4j', module: 'slf4j-jdk14'
} }
} }

View File

@@ -1,6 +1,6 @@
package org.oscim.jeo; package org.oscim.jeo;
import org.jeo.map.RGB; import io.jeo.map.RGB;
public class JeoUtils { public class JeoUtils {
public static int color(RGB rgb) { public static int color(RGB rgb) {

View File

@@ -16,8 +16,8 @@
*/ */
package org.oscim.layers; package org.oscim.layers;
import org.jeo.tile.Tile; import io.jeo.tile.Tile;
import org.jeo.tile.TileDataset; import io.jeo.tile.TileDataset;
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.layers.tile.MapTile; import org.oscim.layers.tile.MapTile;
@@ -30,9 +30,7 @@ import org.slf4j.LoggerFactory;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import static org.oscim.tiling.QueryResult.FAILED; import static org.oscim.tiling.QueryResult.*;
import static org.oscim.tiling.QueryResult.SUCCESS;
import static org.oscim.tiling.QueryResult.TILE_NOT_FOUND;
public class JeoTileSource extends TileSource { public class JeoTileSource extends TileSource {
static final Logger log = LoggerFactory.getLogger(JeoTileSource.class); static final Logger log = LoggerFactory.getLogger(JeoTileSource.class);

View File

@@ -19,16 +19,11 @@ package org.oscim.layers;
import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.LineString; import com.vividsolutions.jts.geom.LineString;
import io.jeo.geom.Geom;
import org.jeo.geom.Geom; import io.jeo.map.*;
import org.jeo.map.CartoCSS; import io.jeo.vector.Feature;
import org.jeo.map.RGB; import io.jeo.vector.VectorDataset;
import org.jeo.map.Rule; import io.jeo.vector.VectorQuery;
import org.jeo.map.RuleList;
import org.jeo.map.Style;
import org.jeo.vector.Feature;
import org.jeo.vector.VectorDataset;
import org.jeo.vector.VectorQuery;
import org.oscim.jeo.JeoUtils; import org.oscim.jeo.JeoUtils;
import org.oscim.map.Map; import org.oscim.map.Map;
import org.oscim.renderer.bucket.LineBucket; import org.oscim.renderer.bucket.LineBucket;
@@ -77,7 +72,7 @@ public class JeoVectorLayer extends JtsLayer {
VectorQuery q = new VectorQuery().bounds(b); VectorQuery q = new VectorQuery().bounds(b);
if (dbg) if (dbg)
log.debug("query {}", b); log.debug("query {}", b);
for (Feature f : mDataset.cursor(q)) { for (Feature f : mDataset.read(q)) {
if (dbg) if (dbg)
log.debug("feature {}", f); log.debug("feature {}", f);

View File

@@ -21,13 +21,8 @@ package org.oscim.layers;
import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.Geometry;
import io.jeo.geom.CoordinatePath;
import org.jeo.geom.CoordinatePath; import org.oscim.core.*;
import org.oscim.core.Box;
import org.oscim.core.GeometryBuffer;
import org.oscim.core.MapPosition;
import org.oscim.core.MercatorProjection;
import org.oscim.core.Tile;
import org.oscim.layers.vector.AbstractVectorLayer; import org.oscim.layers.vector.AbstractVectorLayer;
import org.oscim.map.Map; import org.oscim.map.Map;
import org.oscim.renderer.bucket.LineBucket; import org.oscim.renderer.bucket.LineBucket;

View File

@@ -21,13 +21,12 @@ package org.oscim.layers;
import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.LineString; import com.vividsolutions.jts.geom.LineString;
import io.jeo.map.CartoCSS;
import org.jeo.map.CartoCSS; import io.jeo.map.RGB;
import org.jeo.map.RGB; import io.jeo.map.Rule;
import org.jeo.map.Rule; import io.jeo.map.Style;
import org.jeo.map.Style; import io.jeo.vector.Feature;
import org.jeo.vector.Feature; import io.jeo.vector.VectorDataset;
import org.jeo.vector.VectorDataset;
import org.oscim.backend.canvas.Color; import org.oscim.backend.canvas.Color;
import org.oscim.jeo.JeoUtils; import org.oscim.jeo.JeoUtils;
import org.oscim.map.Map; import org.oscim.map.Map;

View File

@@ -18,21 +18,15 @@
package org.oscim.test; package org.oscim.test;
import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.Geometry;
import io.jeo.carto.Carto;
import org.jeo.carto.Carto; import io.jeo.data.Dataset;
import org.jeo.data.Dataset; import io.jeo.data.mem.MemVectorDataset;
import org.jeo.data.mem.MemVector; import io.jeo.data.mem.MemWorkspace;
import org.jeo.data.mem.MemWorkspace; import io.jeo.geojson.GeoJSONDataset;
import org.jeo.geojson.GeoJSONDataset; import io.jeo.geojson.GeoJSONReader;
import org.jeo.geojson.GeoJSONReader; import io.jeo.geom.GeomBuilder;
import org.jeo.geom.GeomBuilder; import io.jeo.map.Style;
import org.jeo.map.Style; import io.jeo.vector.*;
import org.jeo.vector.Feature;
import org.jeo.vector.Features;
import org.jeo.vector.Schema;
import org.jeo.vector.SchemaBuilder;
import org.jeo.vector.VectorDataset;
import org.jeo.vector.VectorQuery;
import org.oscim.backend.canvas.Color; import org.oscim.backend.canvas.Color;
import org.oscim.layers.OSMIndoorLayer; import org.oscim.layers.OSMIndoorLayer;
import org.oscim.layers.tile.buildings.BuildingLayer; import org.oscim.layers.tile.buildings.BuildingLayer;
@@ -42,11 +36,7 @@ import org.oscim.renderer.MapRenderer;
import org.oscim.theme.styles.TextStyle; import org.oscim.theme.styles.TextStyle;
import org.oscim.tiling.source.oscimap4.OSciMap4TileSource; import org.oscim.tiling.source.oscimap4.OSciMap4TileSource;
import java.io.File; import java.io.*;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class JeoTest { public class JeoTest {
@@ -101,13 +91,13 @@ public class JeoTest {
GeoJSONReader r = new GeoJSONReader(); GeoJSONReader r = new GeoJSONReader();
@SuppressWarnings("resource") @SuppressWarnings("resource")
MemWorkspace mem = new MemWorkspace(); MemWorkspace mem = new MemWorkspace("");
//mem.put("layer", data); //mem.put("layer", data);
try { try {
Schema s = new SchemaBuilder("way").schema(); Schema s = new SchemaBuilder("way").schema();
MemVector memData = mem.create(s); MemVectorDataset memData = mem.create(s);
for (Feature f : r.features(is)) { for (Feature f : r.features(is)) {
//System.out.println("loaded: " + f); //System.out.println("loaded: " + f);
@@ -133,7 +123,7 @@ public class JeoTest {
if (memory) { if (memory) {
@SuppressWarnings("resource") @SuppressWarnings("resource")
MemWorkspace mem = new MemWorkspace(); MemWorkspace mem = new MemWorkspace("");
//mem.put("layer", data); //mem.put("layer", data);
try { try {
@@ -141,9 +131,9 @@ public class JeoTest {
Schema s = data.schema(); Schema s = data.schema();
VectorQuery q = new VectorQuery(); VectorQuery q = new VectorQuery();
MemVector memData = mem.create(s); MemVectorDataset memData = mem.create(s);
for (Feature f : data.cursor(q)) { for (Feature f : data.read(q)) {
memData.add(f); memData.add(f);
} }
@@ -160,14 +150,14 @@ public class JeoTest {
GeomBuilder gb = new GeomBuilder(4326); GeomBuilder gb = new GeomBuilder(4326);
@SuppressWarnings("resource") @SuppressWarnings("resource")
MemWorkspace mem = new MemWorkspace(); MemWorkspace mem = new MemWorkspace("");
Schema schema = new SchemaBuilder(layer) Schema schema = new SchemaBuilder(layer)
.field("geometry", Geometry.class) .field("geometry", Geometry.class)
.field("id", Integer.class) .field("id", Integer.class)
.field("name", String.class) .field("name", String.class)
.field("cost", Double.class).schema(); .field("cost", Double.class).schema();
MemVector data; MemVectorDataset data;
try { try {
data = mem.create(schema); data = mem.create(schema);
} catch (UnsupportedOperationException e) { } catch (UnsupportedOperationException e) {
@@ -181,15 +171,16 @@ public class JeoTest {
Geometry g = gb.point(0, 0).toPoint(); Geometry g = gb.point(0, 0).toPoint();
//g.setSRID(4326); //g.setSRID(4326);
data.add(Features.create(null, data.schema(),
data.add(new ListFeature(data.schema(),
g, 1, "anvil", g, 1, "anvil",
10.99)); 10.99));
data.add(Features.create(null, data.schema(), data.add(new ListFeature(data.schema(),
gb.points(10, 10, 20, 20).toLineString(), gb.points(10, 10, 20, 20).toLineString(),
2, "bomb", 11.99)); 2, "bomb", 11.99));
data.add(Features.create(null, data.schema(), data.add(new ListFeature(data.schema(),
gb.point(100, 10).toPoint().buffer(10), gb.point(100, 10).toPoint().buffer(10),
3, "dynamite", 12.99)); 3, "dynamite", 12.99));

View File

@@ -0,0 +1,452 @@
/* Copyright 2013 The jeo project. All rights reserved.
*
* 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.theme.carto;
import com.vividsolutions.jts.geom.Geometry;
import io.jeo.util.Util;
import io.jeo.vector.Feature;
import io.jeo.vector.Field;
import io.jeo.vector.Schema;
import io.jeo.vector.SchemaBuilder;
import org.osgeo.proj4j.CoordinateReferenceSystem;
import java.util.*;
/**
* Basic feature implementation.
*
* @author Justin Deoliveira, Boundless
* <p>
* Adapted by Jan Lippert to the changes made in https://github.com/jeo/jeo/commit/e28695ccc8530ae6d1a2dff1fbd1e11449ef949f
*/
public class BasicFeature implements Feature {
/**
* feature identifier
*/
protected String id;
/**
* Underlying feature storage.
*/
protected Storage storage;
/**
* Constructor taking a feature identifier.
*
* @param id The feature id, if <code>null</code> an identifier will be generated.
*/
public BasicFeature(String id) {
this(id, (Schema) null);
}
/**
* Constructor taking a feature identifier and an explicit schema object.
*
* @param id The feature id, if <code>null</code> an identifier will be generated.
* @param schema The feature schema, if <code>null</code> the schema will be always be derived
*/
public BasicFeature(String id, Schema schema) {
this(id, (Storage)
(schema != null ? new ListStorage(null, schema) : new MapStorage(null, schema)));
}
/**
* Constructs a feature from an identifier and a list of values.
*
* @param id The feature id, if <code>null</code> an identifier will be generated.
* @param values The feature values.
*/
public BasicFeature(String id, List<Object> values) {
this(id, values, null);
}
/**
* Constructs a feature from an identifier, a list of values, and a schema.
*
* @param id The feature id, if <code>null</code> an identifier will be generated.
* @param values The feature values.
* @param schema The feature schema, if <code>null</code> the schema will be always be derived
*/
public BasicFeature(String id, List<Object> values, Schema schema) {
this(id, new ListStorage(values, schema));
}
/**
* Constructs a feature from an identifier and a map of values.
*
* @param id The feature id, if <code>null</code> an identifier will be generated.
* @param values The feature values.
*/
public BasicFeature(String id, Map<String, Object> values) {
this(id, values, null);
}
/**
* Constructs a feature from an identifier, a map of values, and a schema.
*
* @param id The feature id, if <code>null</code> an identifier will be generated.
* @param values The feature values.
* @param schema The feature schema, if <code>null</code> the schema will be always be derived
*/
public BasicFeature(String id, Map<String, Object> values, Schema schema) {
this(id, new MapStorage(values, schema));
}
/**
* Constructor taking an identifier and feature storage object directly.
* <p>
* This constructor is typically only used for subclasses that need to implement custom feature
* storage.
* </p>
*/
protected BasicFeature(String id, Storage storage) {
this.id = id != null ? id : Util.uuid();
this.storage = storage;
}
@Override
public String id() {
return id;
}
/*@Override
public CoordinateReferenceSystem getCRS() {
return crs;
}*/
public BasicFeature crs(CoordinateReferenceSystem crs) {
storage.crs(crs);
return this;
}
@Override
public boolean has(String key) {
return storage.has(key);
}
@Override
public Object get(String key) {
return storage.get(key);
}
@Override
public BasicFeature put(String key, Object val) {
storage.put(key, val);
return this;
}
@Override
public BasicFeature put(Geometry g) {
//TODO:optimize before triggering schema creation
Field gf = storage.schema(true).geometry();
if (gf == null) {
throw new IllegalArgumentException("Feature schema has no geometry");
}
return put(gf.name(), g);
}
@Override
public Geometry geometry() {
return storage.geometry();
}
@Override
public Map<String, Object> map() {
return storage.map();
}
@Override
public String toString() {
return new StringBuilder(id).append(map()).toString();
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((storage == null) ? 0 : storage.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
BasicFeature other = (BasicFeature) obj;
if (id == null) {
return other.id == null;
}
return id.equals(other.id);
}
protected static abstract class Storage {
Schema schema;
CoordinateReferenceSystem crs;
protected Storage(Schema schema) {
this.schema = schema;
}
protected Storage crs(CoordinateReferenceSystem crs) {
this.crs = crs;
return this;
}
protected Schema schema() {
return schema(true);
}
protected Schema schema(boolean derive) {
if (schema == null && derive) {
schema = buildSchema();
// hack to apply crs override
if (crs != null && schema.crs() == null) {
schema = SchemaBuilder.crs(schema, crs);
}
}
return schema;
}
protected Geometry geometry() {
if (schema != null) {
Field f = schema.geometry();
if (f != null) {
return (Geometry) get(f.name());
}
}
return findGeometry();
}
protected CoordinateReferenceSystem crs() {
if (crs != null) {
return crs;
}
if (schema != null) {
return schema.crs();
}
return null;
}
/**
* Method for subclasses to implement to build a schema for the feature from its underlying
* attributes.
*/
protected abstract Schema buildSchema();
/**
* Method for subclasses to implement in order to find a geometry object when no schema
* information is available.
*/
protected abstract Geometry findGeometry();
protected abstract Object get(String key);
protected abstract Object get(int index);
protected abstract void put(String key, Object value);
protected abstract void set(int index, Object value);
protected abstract List<Object> list();
protected abstract Map<String, Object> map();
protected abstract boolean has(String key);
}
static class ListStorage extends Storage {
List<Object> list;
ListStorage(List<Object> values, Schema schema) {
super(schema);
this.list = pad(values, schema);
}
List<Object> pad(List<Object> values, Schema schema) {
//copy list passed in
values = values != null ? new ArrayList<Object>(values) : new ArrayList<Object>();
//expand up to size of schema if necessary
if (schema != null) {
while (values.size() < schema.size()) {
values.add(null);
}
}
return values;
}
@Override
protected Geometry findGeometry() {
for (Object o : list) {
if (o instanceof Geometry) {
return (Geometry) o;
}
}
return null;
}
@Override
protected Schema buildSchema() {
List<Field> fields = new ArrayList<Field>();
int i = 0;
boolean g = false;
for (Object o : list) {
if (o instanceof Geometry && !g) {
//first geometry
fields.add(new Field("geometry", o.getClass()));
g = true;
} else {
//regular field
fields.add(new Field(String.format(Locale.ROOT, "field%d", i++), o != null ? o.getClass() : null));
}
}
return new Schema("feature", fields);
}
@Override
protected boolean has(String key) {
return schema().indexOf(key) >= 0;
}
@Override
protected Object get(int i) {
return list.get(i);
}
@Override
protected void set(int i, Object value) {
list.set(i, value);
}
@Override
protected Object get(String key) {
int i = schema().indexOf(key);
return i != -1 ? get(i) : null;
}
@Override
protected void put(String key, Object val) {
int i = schema().indexOf(key);
if (i == -1) {
throw new IllegalArgumentException("No such key " + key);
}
set(i, val);
}
@Override
protected List<Object> list() {
return Collections.unmodifiableList(list);
}
@Override
protected Map<String, Object> map() {
LinkedHashMap<String, Object> map = new LinkedHashMap<String, Object>();
for (Field f : schema()) {
map.put(f.name(), get(f.name()));
}
return map;
}
}
static class MapStorage extends Storage {
Map<String, Object> map;
MapStorage(Map<String, Object> values, Schema schema) {
super(schema);
this.map = values != null ?
new LinkedHashMap<String, Object>(values) : new LinkedHashMap<String, Object>();
}
@Override
protected Schema buildSchema() {
List<Field> fields = new ArrayList<Field>();
for (Map.Entry<String, Object> e : map.entrySet()) {
fields.add(new Field(e.getKey(), e.getValue() != null ? e.getValue().getClass() : null));
}
return new Schema("feature", fields);
}
@Override
protected Geometry findGeometry() {
for (Object obj : map.values()) {
if (obj instanceof Geometry) {
return (Geometry) obj;
}
}
return null;
}
@Override
protected boolean has(String key) {
return map.containsKey(key);
}
@Override
protected Object get(String key) {
return map.get(key);
}
@Override
protected void put(String key, Object val) {
if (!map.containsKey(key)) {
//new field, clear cached schema
schema = null;
}
map.put(key, val);
}
@Override
protected Object get(int index) {
return Util.get(map, index);
}
@Override
protected void set(int index, Object value) {
Util.set(map, index, value);
}
@Override
protected List<Object> list() {
List<Object> list = new ArrayList<Object>();
for (Field f : schema()) {
list.add(get(f.name()));
}
return list;
}
@Override
protected Map<String, Object> map() {
return Collections.unmodifiableMap(map);
}
}
}

View File

@@ -16,11 +16,9 @@
*/ */
package org.oscim.theme.carto; package org.oscim.theme.carto;
import org.jeo.vector.BasicFeature;
import org.oscim.core.Tag; import org.oscim.core.Tag;
import org.oscim.core.TagSet; import org.oscim.core.TagSet;
import java.util.List;
import java.util.Map; import java.util.Map;
import static java.lang.System.out; import static java.lang.System.out;
@@ -64,27 +62,10 @@ class MatcherFeature extends BasicFeature {
return null; return null;
} }
@Override
public List<Object> list() {
out.println("EEEK list()");
return null;
}
@Override @Override
public Map<String, Object> map() { public Map<String, Object> map() {
out.println("EEEK map()"); out.println("EEEK map()");
return null; return null;
} }
@Override
public Object get(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public BasicFeature set(int arg0, Object arg1) {
// TODO Auto-generated method stub
return null;
}
} }

View File

@@ -1,11 +1,7 @@
package org.oscim.theme.carto; package org.oscim.theme.carto;
import org.jeo.carto.Carto; import io.jeo.carto.Carto;
import org.jeo.map.CartoCSS; import io.jeo.map.*;
import org.jeo.map.RGB;
import org.jeo.map.Rule;
import org.jeo.map.RuleList;
import org.jeo.map.Style;
import org.oscim.core.GeometryBuffer.GeometryType; import org.oscim.core.GeometryBuffer.GeometryType;
import org.oscim.core.MapElement; import org.oscim.core.MapElement;
import org.oscim.core.Tag; import org.oscim.core.Tag;
@@ -19,9 +15,9 @@ import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import static io.jeo.map.CartoCSS.BACKGROUND_COLOR;
import static io.jeo.map.CartoCSS.OPACITY;
import static java.lang.System.out; import static java.lang.System.out;
import static org.jeo.map.CartoCSS.BACKGROUND_COLOR;
import static org.jeo.map.CartoCSS.OPACITY;
public class RenderTheme implements IRenderTheme { public class RenderTheme implements IRenderTheme {

View File

@@ -1,6 +1,7 @@
/* /*
* Copyright 2014 Hannes Janetzek * Copyright 2014 Hannes Janetzek
* Copyright 2016-2019 devemux86 * Copyright 2016-2019 devemux86
* Copyright 2020 marq24
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@@ -201,11 +202,11 @@ public class VectorLayer extends AbstractVectorLayer<Drawable> implements Gestur
for (Drawable d : tmpDrawables) { for (Drawable d : tmpDrawables) {
Style style = d.getStyle(); Style style = d.getStyle();
draw(t, level, d, style);
if (style != lastStyle) if (lastStyle != null && lastStyle != style)
level += 2; level += 2;
draw(t, level, d, style);
lastStyle = style; lastStyle = style;
} }
} }

View File

@@ -26,7 +26,7 @@ public class PointDrawable extends JtsDrawable {
} }
public PointDrawable(GeoPoint point, Style style) { public PointDrawable(GeoPoint point, Style style) {
this(point.getLongitude(), point.getLatitude(), style); this(point.getLatitude(), point.getLongitude(), style);
} }
public PointDrawable(double lat, double lon, Style style) { public PointDrawable(double lat, double lon, Style style) {

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright 2014 Hannes Janetzek * Copyright 2014 Hannes Janetzek
* Copyright 2017-2019 devemux86 * Copyright 2017-2020 devemux86
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@@ -22,19 +22,22 @@ 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;
import org.oscim.renderer.MapRenderer; import org.oscim.renderer.MapRenderer;
import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.OkHttpEngine; import org.oscim.tiling.source.OkHttpEngine;
import org.oscim.tiling.source.UrlTileSource;
import org.oscim.tiling.source.bitmap.DefaultSources; import org.oscim.tiling.source.bitmap.DefaultSources;
import java.util.Collections;
public class AnimatorTest extends GdxMapApp { public class AnimatorTest extends GdxMapApp {
@Override @Override
public void createLayers() { public void createLayers() {
MapRenderer.setBackgroundColor(0xff000000); MapRenderer.setBackgroundColor(0xff000000);
TileSource tileSource = DefaultSources.OPENSTREETMAP UrlTileSource tileSource = DefaultSources.OPENSTREETMAP
.httpFactory(new OkHttpEngine.OkHttpFactory()) .httpFactory(new OkHttpEngine.OkHttpFactory())
.build(); .build();
tileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-playground"));
mMap.layers().add(new BitmapTileLayer(mMap, tileSource)); mMap.layers().add(new BitmapTileLayer(mMap, tileSource));
mMap.setMapPosition(0, 0, 1 << 4); mMap.setMapPosition(0, 0, 1 << 4);

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2016-2018 devemux86 * Copyright 2016-2020 devemux86
* Copyright 2017 Longri * Copyright 2017 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
@@ -23,17 +23,19 @@ import org.oscim.backend.canvas.Paint;
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.ItemizedLayer; import org.oscim.layers.marker.ItemizedLayer;
import org.oscim.layers.marker.MarkerInterface;
import org.oscim.layers.marker.MarkerItem; import org.oscim.layers.marker.MarkerItem;
import org.oscim.layers.marker.MarkerSymbol; import org.oscim.layers.marker.MarkerSymbol;
import org.oscim.layers.tile.bitmap.BitmapTileLayer; import org.oscim.layers.tile.bitmap.BitmapTileLayer;
import org.oscim.renderer.atlas.TextureAtlas; import org.oscim.renderer.atlas.TextureAtlas;
import org.oscim.renderer.atlas.TextureRegion; import org.oscim.renderer.atlas.TextureRegion;
import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.OkHttpEngine; import org.oscim.tiling.source.OkHttpEngine;
import org.oscim.tiling.source.UrlTileSource;
import org.oscim.tiling.source.bitmap.DefaultSources; import org.oscim.tiling.source.bitmap.DefaultSources;
import org.oscim.utils.TextureAtlasUtils; import org.oscim.utils.TextureAtlasUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
@@ -46,9 +48,10 @@ public class AtlasMultiTextureTest extends MarkerLayerTest {
// Map events receiver // Map events receiver
mMap.layers().add(new MapEventsReceiver(mMap)); mMap.layers().add(new MapEventsReceiver(mMap));
TileSource tileSource = DefaultSources.OPENSTREETMAP UrlTileSource tileSource = DefaultSources.OPENSTREETMAP
.httpFactory(new OkHttpEngine.OkHttpFactory()) .httpFactory(new OkHttpEngine.OkHttpFactory())
.build(); .build();
tileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-playground"));
mMap.layers().add(new BitmapTileLayer(mMap, tileSource)); mMap.layers().add(new BitmapTileLayer(mMap, tileSource));
mMap.setMapPosition(0, 0, 1 << 2); mMap.setMapPosition(0, 0, 1 << 2);
@@ -64,7 +67,7 @@ public class AtlasMultiTextureTest extends MarkerLayerTest {
paint.setTextSize(12); paint.setTextSize(12);
paint.setStrokeWidth(2); paint.setStrokeWidth(2);
paint.setColor(Color.BLACK); paint.setColor(Color.BLACK);
List<MarkerItem> pts = new ArrayList<>(); List<MarkerInterface> pts = new ArrayList<>();
for (double lat = -90; lat <= 90; lat += 5) { for (double lat = -90; lat <= 90; lat += 5) {
for (double lon = -180; lon <= 180; lon += 5) { for (double lon = -180; lon <= 180; lon += 5) {
String title = lat + "/" + lon; String title = lat + "/" + lon;
@@ -84,29 +87,32 @@ public class AtlasMultiTextureTest extends MarkerLayerTest {
// With iOS we must flip the Y-Axis // With iOS we must flip the Y-Axis
TextureAtlasUtils.createTextureRegions(inputMap, regionsMap, atlasList, true, false); TextureAtlasUtils.createTextureRegions(inputMap, regionsMap, atlasList, true, false);
mMarkerLayer = new ItemizedLayer<>(mMap, new ArrayList<MarkerItem>(), (MarkerSymbol) null, this); mMarkerLayer = new ItemizedLayer(mMap, new ArrayList<MarkerInterface>(), (MarkerSymbol) null, this);
mMap.layers().add(mMarkerLayer); mMap.layers().add(mMarkerLayer);
mMarkerLayer.addItems(pts); mMarkerLayer.addItems(pts);
// set all markers // set all markers
for (MarkerItem item : pts) { for (MarkerInterface item : pts) {
MarkerSymbol markerSymbol = new MarkerSymbol(regionsMap.get(item.getTitle()), HotspotPlace.BOTTOM_CENTER); MarkerItem markerItem = (MarkerItem) item;
item.setMarker(markerSymbol); MarkerSymbol markerSymbol = new MarkerSymbol(regionsMap.get(markerItem.getTitle()), HotspotPlace.BOTTOM_CENTER);
markerItem.setMarker(markerSymbol);
} }
System.out.println("Atlas count: " + atlasList.size()); System.out.println("Atlas count: " + atlasList.size());
} }
@Override @Override
public boolean onItemSingleTapUp(int index, MarkerItem item) { public boolean onItemSingleTapUp(int index, MarkerInterface item) {
System.out.println("Marker tap " + item.getTitle()); MarkerItem markerItem = (MarkerItem) item;
System.out.println("Marker tap " + markerItem.getTitle());
return true; return true;
} }
@Override @Override
public boolean onItemLongPress(int index, MarkerItem item) { public boolean onItemLongPress(int index, MarkerInterface item) {
System.out.println("Marker long press " + item.getTitle()); MarkerItem markerItem = (MarkerItem) item;
System.out.println("Marker long press " + markerItem.getTitle());
return true; return true;
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2016 devemux86 * Copyright 2016-2020 devemux86
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@@ -20,8 +20,11 @@ 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;
import org.oscim.tiling.source.UrlTileSource;
import org.oscim.tiling.source.bitmap.DefaultSources; import org.oscim.tiling.source.bitmap.DefaultSources;
import java.util.Collections;
public class BitmapTileTest extends GdxMapApp { public class BitmapTileTest extends GdxMapApp {
private BitmapTileLayer mLayer = null; private BitmapTileLayer mLayer = null;
@@ -33,7 +36,9 @@ public class BitmapTileTest extends GdxMapApp {
mMap.layers().remove(mShaded); mMap.layers().remove(mShaded);
mShaded = null; mShaded = null;
mMap.layers().remove(mLayer); mMap.layers().remove(mLayer);
mLayer = new BitmapTileLayer(mMap, DefaultSources.OPENSTREETMAP.build()); UrlTileSource tileSource = DefaultSources.OPENSTREETMAP.build();
tileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-playground"));
mLayer = new BitmapTileLayer(mMap, tileSource);
mMap.layers().add(mLayer); mMap.layers().add(mLayer);
mMap.clearMap(); mMap.clearMap();
return true; return true;
@@ -64,7 +69,9 @@ public class BitmapTileTest extends GdxMapApp {
public void createLayers() { public void createLayers() {
MapRenderer.setBackgroundColor(0xff888888); MapRenderer.setBackgroundColor(0xff888888);
mLayer = new BitmapTileLayer(mMap, DefaultSources.OPENSTREETMAP.build()); UrlTileSource tileSource = DefaultSources.OPENSTREETMAP.build();
tileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-playground"));
mLayer = new BitmapTileLayer(mMap, tileSource);
mMap.layers().add(mLayer); mMap.layers().add(mLayer);
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2016-2018 devemux86 * Copyright 2016-2020 devemux86
* Copyright 2017 nebular * Copyright 2017 nebular
* *
* This program is free software: you can redistribute it and/or modify it under the * This program is free software: you can redistribute it and/or modify it under the
@@ -22,12 +22,13 @@ import org.oscim.core.GeoPoint;
import org.oscim.gdx.GdxMapApp; import org.oscim.gdx.GdxMapApp;
import org.oscim.layers.marker.*; import org.oscim.layers.marker.*;
import org.oscim.layers.tile.bitmap.BitmapTileLayer; import org.oscim.layers.tile.bitmap.BitmapTileLayer;
import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.OkHttpEngine; import org.oscim.tiling.source.OkHttpEngine;
import org.oscim.tiling.source.UrlTileSource;
import org.oscim.tiling.source.bitmap.DefaultSources; import org.oscim.tiling.source.bitmap.DefaultSources;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
public class ClusterMarkerLayerTest extends MarkerLayerTest { public class ClusterMarkerLayerTest extends MarkerLayerTest {
@@ -41,9 +42,10 @@ public class ClusterMarkerLayerTest extends MarkerLayerTest {
// Map events receiver // Map events receiver
mMap.layers().add(new MapEventsReceiver(mMap)); mMap.layers().add(new MapEventsReceiver(mMap));
TileSource tileSource = DefaultSources.OPENSTREETMAP UrlTileSource tileSource = DefaultSources.OPENSTREETMAP
.httpFactory(new OkHttpEngine.OkHttpFactory()) .httpFactory(new OkHttpEngine.OkHttpFactory())
.build(); .build();
tileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-playground"));
mMap.layers().add(new BitmapTileLayer(mMap, tileSource)); mMap.layers().add(new BitmapTileLayer(mMap, tileSource));
mMap.setMapPosition(53.08, 8.83, 1 << 15); mMap.setMapPosition(53.08, 8.83, 1 << 15);
@@ -67,15 +69,15 @@ public class ClusterMarkerLayerTest extends MarkerLayerTest {
}; };
} }
}; };
mMarkerLayer = new ItemizedLayer<>( mMarkerLayer = new ItemizedLayer(
mMap, mMap,
new ArrayList<MarkerItem>(), new ArrayList<MarkerInterface>(),
markerRendererFactory, markerRendererFactory,
this); this);
mMap.layers().add(mMarkerLayer); mMap.layers().add(mMarkerLayer);
// Create some markers spaced STEP degrees // Create some markers spaced STEP degrees
List<MarkerItem> pts = new ArrayList<>(); List<MarkerInterface> pts = new ArrayList<>();
GeoPoint center = mMap.getMapPosition().getGeoPoint(); GeoPoint center = mMap.getMapPosition().getGeoPoint();
for (int x = -COUNT; x < COUNT; x++) { for (int x = -COUNT; x < COUNT; x++) {
for (int y = -COUNT; y < COUNT; y++) { for (int y = -COUNT; y < COUNT; y++) {

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright 2014 Hannes Janetzek * Copyright 2014 Hannes Janetzek
* Copyright 2016-2019 devemux86 * Copyright 2016-2020 devemux86
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@@ -28,12 +28,13 @@ import org.oscim.layers.vector.PathLayer;
import org.oscim.layers.vector.geometries.Style; import org.oscim.layers.vector.geometries.Style;
import org.oscim.map.Map; import org.oscim.map.Map;
import org.oscim.renderer.bucket.TextureItem; import org.oscim.renderer.bucket.TextureItem;
import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.OkHttpEngine; import org.oscim.tiling.source.OkHttpEngine;
import org.oscim.tiling.source.UrlTileSource;
import org.oscim.tiling.source.bitmap.DefaultSources; import org.oscim.tiling.source.bitmap.DefaultSources;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
public class LineTexTest extends GdxMapApp { public class LineTexTest extends GdxMapApp {
@@ -45,9 +46,10 @@ public class LineTexTest extends GdxMapApp {
@Override @Override
public void createLayers() { public void createLayers() {
TileSource tileSource = DefaultSources.OPENSTREETMAP UrlTileSource tileSource = DefaultSources.OPENSTREETMAP
.httpFactory(new OkHttpEngine.OkHttpFactory()) .httpFactory(new OkHttpEngine.OkHttpFactory())
.build(); .build();
tileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-playground"));
mMap.layers().add(new BitmapTileLayer(mMap, tileSource)); mMap.layers().add(new BitmapTileLayer(mMap, tileSource));
mMap.setMapPosition(0, 0, 1 << 2); mMap.setMapPosition(0, 0, 1 << 2);

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2016-2018 devemux86 * Copyright 2016-2020 devemux86
* Copyright 2019 telemaxx * Copyright 2019 telemaxx
* *
* 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
@@ -25,6 +25,7 @@ import org.oscim.event.MotionEvent;
import org.oscim.gdx.GdxMapApp; import org.oscim.gdx.GdxMapApp;
import org.oscim.layers.Layer; import org.oscim.layers.Layer;
import org.oscim.layers.marker.ItemizedLayer; import org.oscim.layers.marker.ItemizedLayer;
import org.oscim.layers.marker.MarkerInterface;
import org.oscim.layers.marker.MarkerItem; import org.oscim.layers.marker.MarkerItem;
import org.oscim.layers.marker.MarkerSymbol; import org.oscim.layers.marker.MarkerSymbol;
import org.oscim.layers.tile.vector.VectorTileLayer; import org.oscim.layers.tile.vector.VectorTileLayer;
@@ -41,7 +42,7 @@ import java.util.List;
import static org.oscim.layers.marker.MarkerSymbol.HotspotPlace; import static org.oscim.layers.marker.MarkerSymbol.HotspotPlace;
public class MarkerLayerLabelsTest extends GdxMapApp implements ItemizedLayer.OnItemGestureListener<MarkerItem> { public class MarkerLayerLabelsTest extends GdxMapApp implements ItemizedLayer.OnItemGestureListener<MarkerInterface> {
private static final int FG_COLOR = 0xFF000000; // 100 percent black. AARRGGBB private static final int FG_COLOR = 0xFF000000; // 100 percent black. AARRGGBB
private static final int BG_COLOR = 0x80FF69B4; // 50 percent pink. AARRGGBB private static final int BG_COLOR = 0x80FF69B4; // 50 percent pink. AARRGGBB
@@ -87,11 +88,11 @@ public class MarkerLayerLabelsTest extends GdxMapApp implements ItemizedLayer.On
//Bitmap bitmapPoi = CanvasAdapter.decodeBitmap(getClass().getResourceAsStream("/res/marker_poi2.png")); //Bitmap bitmapPoi = CanvasAdapter.decodeBitmap(getClass().getResourceAsStream("/res/marker_poi2.png"));
MarkerSymbol symbol = new MarkerSymbol(bitmapPoi, HotspotPlace.CENTER, false); MarkerSymbol symbol = new MarkerSymbol(bitmapPoi, HotspotPlace.CENTER, false);
ItemizedLayer<MarkerItem> markerLayer = new ItemizedLayer<>(mMap, new ArrayList<MarkerItem>(), symbol, this); ItemizedLayer markerLayer = new ItemizedLayer(mMap, new ArrayList<MarkerInterface>(), symbol, this);
mMap.layers().add(markerLayer); mMap.layers().add(markerLayer);
// creating some poi's // creating some poi's
List<MarkerItem> pts = new ArrayList<>(); List<MarkerInterface> pts = new ArrayList<>();
pts.add(new MarkerItem("Brandenburger Tor", "#1789-1793", new GeoPoint(52.516275, 13.377704))); pts.add(new MarkerItem("Brandenburger Tor", "#1789-1793", new GeoPoint(52.516275, 13.377704)));
pts.add(new MarkerItem("Siegessaeule, hidden description", "this is a hidden Description without a #", new GeoPoint(52.514543, 13.350119))); pts.add(new MarkerItem("Siegessaeule, hidden description", "this is a hidden Description without a #", new GeoPoint(52.514543, 13.350119)));
pts.add(new MarkerItem("Gleisdreieck, without description", "", new GeoPoint(52.499562, 13.374063))); pts.add(new MarkerItem("Gleisdreieck, without description", "", new GeoPoint(52.499562, 13.374063)));
@@ -101,9 +102,10 @@ public class MarkerLayerLabelsTest extends GdxMapApp implements ItemizedLayer.On
+ "is drawn on the map\n" + "is drawn on the map\n"
+ "the rest is surpressed", new GeoPoint(52.509352, 13.375739))); + "the rest is surpressed", new GeoPoint(52.509352, 13.375739)));
for (MarkerItem mi : pts) { for (MarkerInterface mi : pts) {
System.out.println("title: " + mi.title); MarkerItem markerItem = (MarkerItem) mi;
mi.setMarker(createAdvancedSymbol(mi, bitmapPoi)); System.out.println("title: " + markerItem.title);
markerItem.setMarker(createAdvancedSymbol(markerItem, bitmapPoi));
} }
markerLayer.addItems(pts); markerLayer.addItems(pts);
@@ -198,14 +200,16 @@ public class MarkerLayerLabelsTest extends GdxMapApp implements ItemizedLayer.On
} }
@Override @Override
public boolean onItemSingleTapUp(int index, MarkerItem item) { public boolean onItemSingleTapUp(int index, MarkerInterface item) {
System.out.println("Marker tap " + item.getTitle()); MarkerItem markerItem = (MarkerItem) item;
System.out.println("Marker tap " + markerItem.getTitle());
return true; return true;
} }
@Override @Override
public boolean onItemLongPress(int index, MarkerItem item) { public boolean onItemLongPress(int index, MarkerInterface item) {
System.out.println("Marker long press " + item.getTitle()); MarkerItem markerItem = (MarkerItem) item;
System.out.println("Marker long press " + markerItem.getTitle());
return true; return true;
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2016-2018 devemux86 * Copyright 2016-2020 devemux86
* *
* This program is free software: you can redistribute it and/or modify it under the * This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software * terms of the GNU Lesser General Public License as published by the Free Software
@@ -23,25 +23,27 @@ import org.oscim.event.MotionEvent;
import org.oscim.gdx.GdxMapApp; import org.oscim.gdx.GdxMapApp;
import org.oscim.layers.Layer; import org.oscim.layers.Layer;
import org.oscim.layers.marker.ItemizedLayer; import org.oscim.layers.marker.ItemizedLayer;
import org.oscim.layers.marker.MarkerInterface;
import org.oscim.layers.marker.MarkerItem; import org.oscim.layers.marker.MarkerItem;
import org.oscim.layers.marker.MarkerSymbol; import org.oscim.layers.marker.MarkerSymbol;
import org.oscim.layers.tile.bitmap.BitmapTileLayer; import org.oscim.layers.tile.bitmap.BitmapTileLayer;
import org.oscim.map.Map; import org.oscim.map.Map;
import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.OkHttpEngine; import org.oscim.tiling.source.OkHttpEngine;
import org.oscim.tiling.source.UrlTileSource;
import org.oscim.tiling.source.bitmap.DefaultSources; import org.oscim.tiling.source.bitmap.DefaultSources;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import static org.oscim.layers.marker.MarkerSymbol.HotspotPlace; import static org.oscim.layers.marker.MarkerSymbol.HotspotPlace;
public class MarkerLayerTest extends GdxMapApp implements ItemizedLayer.OnItemGestureListener<MarkerItem> { public class MarkerLayerTest extends GdxMapApp implements ItemizedLayer.OnItemGestureListener<MarkerInterface> {
static final boolean BILLBOARDS = true; static final boolean BILLBOARDS = true;
MarkerSymbol mFocusMarker; MarkerSymbol mFocusMarker;
ItemizedLayer<MarkerItem> mMarkerLayer; ItemizedLayer mMarkerLayer;
@Override @Override
public void createLayers() { public void createLayers() {
@@ -49,9 +51,10 @@ public class MarkerLayerTest extends GdxMapApp implements ItemizedLayer.OnItemGe
// Map events receiver // Map events receiver
mMap.layers().add(new MapEventsReceiver(mMap)); mMap.layers().add(new MapEventsReceiver(mMap));
TileSource tileSource = DefaultSources.OPENSTREETMAP UrlTileSource tileSource = DefaultSources.OPENSTREETMAP
.httpFactory(new OkHttpEngine.OkHttpFactory()) .httpFactory(new OkHttpEngine.OkHttpFactory())
.build(); .build();
tileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-playground"));
mMap.layers().add(new BitmapTileLayer(mMap, tileSource)); mMap.layers().add(new BitmapTileLayer(mMap, tileSource));
mMap.setMapPosition(0, 0, 1 << 2); mMap.setMapPosition(0, 0, 1 << 2);
@@ -69,10 +72,10 @@ public class MarkerLayerTest extends GdxMapApp implements ItemizedLayer.OnItemGe
else else
mFocusMarker = new MarkerSymbol(bitmapFocus, HotspotPlace.CENTER, false); mFocusMarker = new MarkerSymbol(bitmapFocus, HotspotPlace.CENTER, false);
mMarkerLayer = new ItemizedLayer<>(mMap, new ArrayList<MarkerItem>(), symbol, this); mMarkerLayer = new ItemizedLayer(mMap, new ArrayList<MarkerInterface>(), symbol, this);
mMap.layers().add(mMarkerLayer); mMap.layers().add(mMarkerLayer);
List<MarkerItem> pts = new ArrayList<>(); List<MarkerInterface> pts = new ArrayList<>();
for (double lat = -90; lat <= 90; lat += 5) { for (double lat = -90; lat <= 90; lat += 5) {
for (double lon = -180; lon <= 180; lon += 5) for (double lon = -180; lon <= 180; lon += 5)
pts.add(new MarkerItem(lat + "/" + lon, "", new GeoPoint(lat, lon))); pts.add(new MarkerItem(lat + "/" + lon, "", new GeoPoint(lat, lon)));
@@ -84,24 +87,26 @@ public class MarkerLayerTest extends GdxMapApp implements ItemizedLayer.OnItemGe
} }
@Override @Override
public boolean onItemSingleTapUp(int index, MarkerItem item) { public boolean onItemSingleTapUp(int index, MarkerInterface item) {
if (item.getMarker() == null) MarkerItem markerItem = (MarkerItem) item;
item.setMarker(mFocusMarker); if (markerItem.getMarker() == null)
markerItem.setMarker(mFocusMarker);
else else
item.setMarker(null); markerItem.setMarker(null);
System.out.println("Marker tap " + item.getTitle()); System.out.println("Marker tap " + markerItem.getTitle());
return true; return true;
} }
@Override @Override
public boolean onItemLongPress(int index, MarkerItem item) { public boolean onItemLongPress(int index, MarkerInterface item) {
if (item.getMarker() == null) MarkerItem markerItem = (MarkerItem) item;
item.setMarker(mFocusMarker); if (markerItem.getMarker() == null)
markerItem.setMarker(mFocusMarker);
else else
item.setMarker(null); markerItem.setMarker(null);
System.out.println("Marker long press " + item.getTitle()); System.out.println("Marker long press " + markerItem.getTitle());
return true; return true;
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2016-2018 devemux86 * Copyright 2016-2020 devemux86
* Copyright 2019 Gustl22 * Copyright 2019 Gustl22
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
@@ -30,9 +30,12 @@ import org.oscim.map.Viewport;
import org.oscim.theme.VtmThemes; import org.oscim.theme.VtmThemes;
import org.oscim.tiling.TileSource; import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.OkHttpEngine; import org.oscim.tiling.source.OkHttpEngine;
import org.oscim.tiling.source.UrlTileSource;
import org.oscim.tiling.source.bitmap.DefaultSources; import org.oscim.tiling.source.bitmap.DefaultSources;
import org.oscim.tiling.source.overpass.OverpassTileSource; import org.oscim.tiling.source.overpass.OverpassTileSource;
import java.util.Collections;
/** /**
* Use Overpass API data for vector layer. * Use Overpass API data for vector layer.
* Only for developing as can be error-prone. * Only for developing as can be error-prone.
@@ -51,7 +54,7 @@ public class OverpassTest extends GdxMapApp {
.build(); .build();
VectorTileLayer l = map.setBaseMap(tileSource); VectorTileLayer l = map.setBaseMap(tileSource);
TileSource bitmapTileSource = DefaultSources.OPENSTREETMAP UrlTileSource bitmapTileSource = DefaultSources.OPENSTREETMAP
.httpFactory(new OkHttpEngine.OkHttpFactory()) .httpFactory(new OkHttpEngine.OkHttpFactory())
.zoomMax(15) .zoomMax(15)
.fadeSteps(new BitmapTileLayer.FadeStep[]{ .fadeSteps(new BitmapTileLayer.FadeStep[]{
@@ -59,6 +62,7 @@ public class OverpassTest extends GdxMapApp {
new BitmapTileLayer.FadeStep(16, Viewport.MAX_ZOOM_LEVEL, 0f, 0f) new BitmapTileLayer.FadeStep(16, Viewport.MAX_ZOOM_LEVEL, 0f, 0f)
}) })
.build(); .build();
bitmapTileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-playground"));
mMap.layers().add(new BitmapTileLayer(mMap, bitmapTileSource)); mMap.layers().add(new BitmapTileLayer(mMap, bitmapTileSource));
BuildingLayer.RAW_DATA = true; BuildingLayer.RAW_DATA = true;

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2016-2018 devemux86 * Copyright 2016-2020 devemux86
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@@ -26,11 +26,12 @@ import org.oscim.gdx.GdxMapApp;
import org.oscim.layers.tile.bitmap.BitmapTileLayer; import org.oscim.layers.tile.bitmap.BitmapTileLayer;
import org.oscim.layers.vector.PathLayer; import org.oscim.layers.vector.PathLayer;
import org.oscim.map.Map.UpdateListener; import org.oscim.map.Map.UpdateListener;
import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.OkHttpEngine; import org.oscim.tiling.source.OkHttpEngine;
import org.oscim.tiling.source.UrlTileSource;
import org.oscim.tiling.source.bitmap.DefaultSources; import org.oscim.tiling.source.bitmap.DefaultSources;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
public class PathLayerTest extends GdxMapApp { public class PathLayerTest extends GdxMapApp {
@@ -41,9 +42,10 @@ public class PathLayerTest extends GdxMapApp {
@Override @Override
public void createLayers() { public void createLayers() {
TileSource tileSource = DefaultSources.OPENSTREETMAP UrlTileSource tileSource = DefaultSources.OPENSTREETMAP
.httpFactory(new OkHttpEngine.OkHttpFactory()) .httpFactory(new OkHttpEngine.OkHttpFactory())
.build(); .build();
tileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-playground"));
mMap.layers().add(new BitmapTileLayer(mMap, tileSource)); mMap.layers().add(new BitmapTileLayer(mMap, tileSource));
mMap.setMapPosition(0, 0, 1 << 2); mMap.setMapPosition(0, 0, 1 << 2);

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2016-2018 devemux86 * Copyright 2016-2020 devemux86
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@@ -22,18 +22,21 @@ import org.oscim.layers.tile.bitmap.BitmapTileLayer;
import org.oscim.layers.vector.VectorLayer; import org.oscim.layers.vector.VectorLayer;
import org.oscim.layers.vector.geometries.PointDrawable; import org.oscim.layers.vector.geometries.PointDrawable;
import org.oscim.layers.vector.geometries.Style; import org.oscim.layers.vector.geometries.Style;
import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.OkHttpEngine; import org.oscim.tiling.source.OkHttpEngine;
import org.oscim.tiling.source.UrlTileSource;
import org.oscim.tiling.source.bitmap.DefaultSources; import org.oscim.tiling.source.bitmap.DefaultSources;
import org.oscim.utils.ColorUtil; import org.oscim.utils.ColorUtil;
import java.util.Collections;
public class VectorLayerTest extends GdxMapApp { public class VectorLayerTest extends GdxMapApp {
@Override @Override
public void createLayers() { public void createLayers() {
TileSource tileSource = DefaultSources.OPENSTREETMAP UrlTileSource tileSource = DefaultSources.OPENSTREETMAP
.httpFactory(new OkHttpEngine.OkHttpFactory()) .httpFactory(new OkHttpEngine.OkHttpFactory())
.build(); .build();
tileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-playground"));
mMap.layers().add(new BitmapTileLayer(mMap, tileSource)); mMap.layers().add(new BitmapTileLayer(mMap, tileSource));
mMap.setMapPosition(0, 0, 1 << 2); mMap.setMapPosition(0, 0, 1 << 2);

View File

@@ -17,8 +17,8 @@
*/ */
package org.oscim.test.jeo; package org.oscim.test.jeo;
import org.jeo.map.Style; import io.jeo.map.Style;
import org.jeo.vector.VectorDataset; import io.jeo.vector.VectorDataset;
import org.oscim.backend.canvas.Color; import org.oscim.backend.canvas.Color;
import org.oscim.gdx.GdxMapApp; import org.oscim.gdx.GdxMapApp;
import org.oscim.layers.JeoVectorLayer; import org.oscim.layers.JeoVectorLayer;

View File

@@ -10,11 +10,11 @@ dependencies {
implementation 'com.fifesoft:rsyntaxtextarea:2.6.1' implementation 'com.fifesoft:rsyntaxtextarea:2.6.1'
implementation 'com.jtattoo:JTattoo:1.6.11' implementation 'com.jtattoo:JTattoo:1.6.11'
implementation 'org.mapsforge:mapsforge-core:0.13.0' implementation 'org.mapsforge:mapsforge-core:0.14.0'
implementation 'org.mapsforge:mapsforge-map:0.13.0' implementation 'org.mapsforge:mapsforge-map:0.14.0'
implementation 'org.mapsforge:mapsforge-map-awt:0.13.0' implementation 'org.mapsforge:mapsforge-map-awt:0.14.0'
implementation 'org.mapsforge:mapsforge-map-reader:0.13.0' implementation 'org.mapsforge:mapsforge-map-reader:0.14.0'
implementation 'org.mapsforge:mapsforge-themes:0.13.0' implementation 'org.mapsforge:mapsforge-themes:0.14.0'
implementation 'net.sf.kxml:kxml2:2.3.0' implementation 'net.sf.kxml:kxml2:2.3.0'
} }

View File

@@ -165,6 +165,11 @@
<style-line cap="butt" fix="true" id="water" stroke="#a4bbcc" width="1.0" /> <style-line cap="butt" fix="true" id="water" stroke="#a4bbcc" width="1.0" />
<style-line fix="false" id="river" stroke="#a4bbcc" use="water" /> <style-line fix="false" id="river" stroke="#a4bbcc" use="water" />
<!--###### SYMBOL styles ######-->
<!-- oneway -->
<style-symbol id="oneway" repeat="true" src="assets:symbols/oneway.svg" />
<!--###### ASSIGNMENT ######--> <!--###### ASSIGNMENT ######-->
@@ -1079,7 +1084,7 @@
<m k="area" v="~|false|no"> <m k="area" v="~|false|no">
<m k="highway"> <m k="highway">
<m k="oneway" v="yes|true" zoom-min="16"> <m k="oneway" v="yes|true" zoom-min="16">
<symbol repeat="true" src="assets:symbols/oneway.svg" /> <symbol use="oneway" />
</m> </m>
</m> </m>
</m> </m>

View File

@@ -129,6 +129,9 @@
<style-line fade="15" id="building" stroke="#eeb7b6b3" use="fix" /> <style-line fade="15" id="building" stroke="#eeb7b6b3" use="fix" />
<style-area fade="15" fill="#f2f0eb" id="building" /> <style-area fade="15" fill="#f2f0eb" id="building" />
<!-- oneway -->
<style-symbol id="oneway" repeat="true" src="assets:symbols/oneway.svg" />
<m closed="yes" e="way" k="layer" v="water"> <m closed="yes" e="way" k="layer" v="water">
<area mesh="true" use="water" /> <area mesh="true" use="water" />
</m> </m>
@@ -1038,7 +1041,7 @@
<m k="area" v="~|false|no"> <m k="area" v="~|false|no">
<m k="kind_detail"> <m k="kind_detail">
<m k="oneway" v="yes|true" zoom-min="16"> <m k="oneway" v="yes|true" zoom-min="16">
<symbol repeat="true" src="assets:symbols/oneway.svg" /> <symbol use="oneway" />
</m> </m>
</m> </m>
</m> </m>

View File

@@ -118,6 +118,11 @@
<style-line cap="butt" id="water:outline" stroke="#647b8c" width="1.0" /> <style-line cap="butt" id="water:outline" stroke="#647b8c" width="1.0" />
<style-line cap="butt" id="water" stroke="#cca4bbcc" width="0.6" /> <style-line cap="butt" id="water" stroke="#cca4bbcc" width="0.6" />
<!--###### SYMBOL styles ######-->
<!-- oneway -->
<style-symbol id="oneway" repeat="true" src="assets:symbols/oneway.svg" />
<!--###### ASSIGNMENT ######--> <!--###### ASSIGNMENT ######-->
@@ -1080,7 +1085,7 @@
<m k="area" v="~|false|no"> <m k="area" v="~|false|no">
<m k="highway"> <m k="highway">
<m k="oneway" v="yes|true" zoom-min="16"> <m k="oneway" v="yes|true" zoom-min="16">
<symbol repeat="true" src="assets:symbols/oneway.svg" /> <symbol use="oneway" />
</m> </m>
</m> </m>
</m> </m>

View File

@@ -162,6 +162,11 @@
<!-- <style-line id="building" stroke="#d0cec8" width="1.0" fix="true" cap="butt" fade="15"/> --> <!-- <style-line id="building" stroke="#d0cec8" width="1.0" fix="true" cap="butt" fade="15"/> -->
<style-line fade="15" id="building" stroke="#eeb7b6b3" use="fix" /> <style-line fade="15" id="building" stroke="#eeb7b6b3" use="fix" />
<!--###### SYMBOL styles ######-->
<!-- oneway -->
<style-symbol id="oneway" repeat="true" src="assets:symbols/oneway.svg" />
<!--###### ASSIGNMENT ######--> <!--###### ASSIGNMENT ######-->
@@ -332,7 +337,7 @@
<m k="oneway" v="1" zoom-min="16"> <m k="oneway" v="1" zoom-min="16">
<m k="class" v="motorway|trunk|primary|secondary|tertiary|minor"> <m k="class" v="motorway|trunk|primary|secondary|tertiary|minor">
<symbol repeat="true" src="assets:symbols/oneway.svg" /> <symbol use="oneway" />
</m> </m>
</m> </m>
</m> </m>

View File

@@ -52,6 +52,11 @@
<style-line id="secondary" stroke="#c6c6c6" width="1.4" /> <style-line id="secondary" stroke="#c6c6c6" width="1.4" />
<style-line id="tertiary" stroke="#f7f7f7" width="1.15" /> <style-line id="tertiary" stroke="#f7f7f7" width="1.15" />
<!--###### SYMBOL styles ######-->
<!-- oneway -->
<style-symbol id="oneway" repeat="true" src="assets:symbols/oneway.svg" />
<!--###### ASSIGNMENT ######--> <!--###### ASSIGNMENT ######-->
@@ -959,7 +964,7 @@
<m k="area" v="~|false|no"> <m k="area" v="~|false|no">
<m k="highway"> <m k="highway">
<m k="oneway" v="yes|true" zoom-min="16"> <m k="oneway" v="yes|true" zoom-min="16">
<symbol repeat="true" src="assets:symbols/oneway.svg" /> <symbol use="oneway" />
</m> </m>
</m> </m>
</m> </m>

View File

@@ -52,6 +52,11 @@
<style-line id="secondary" stroke="#fdbf6f" width="1.4" /> <style-line id="secondary" stroke="#fdbf6f" width="1.4" />
<style-line id="tertiary" stroke="#ffff90" width="1.15" /> <style-line id="tertiary" stroke="#ffff90" width="1.15" />
<!--###### SYMBOL styles ######-->
<!-- oneway -->
<style-symbol id="oneway" repeat="true" src="assets:symbols/oneway.svg" />
<!--###### ASSIGNMENT ######--> <!--###### ASSIGNMENT ######-->
@@ -959,7 +964,7 @@
<m k="area" v="~|false|no"> <m k="area" v="~|false|no">
<m k="highway"> <m k="highway">
<m k="oneway" v="yes|true" zoom-min="16"> <m k="oneway" v="yes|true" zoom-min="16">
<symbol repeat="true" src="assets:symbols/oneway.svg" /> <symbol use="oneway" />
</m> </m>
</m> </m>
</m> </m>

View File

@@ -119,6 +119,11 @@
<style-line cap="butt" id="water:outline" stroke="#a4bbcc" width="1.0" /> <style-line cap="butt" id="water:outline" stroke="#a4bbcc" width="1.0" />
<style-line cap="butt" id="water" stroke="#cca4bbcc" width="0.6" /> <style-line cap="butt" id="water" stroke="#cca4bbcc" width="0.6" />
<!--###### SYMBOL styles ######-->
<!-- oneway -->
<style-symbol id="oneway" repeat="true" src="assets:symbols/oneway.svg" />
<!--###### ASSIGNMENT ######--> <!--###### ASSIGNMENT ######-->
<m e="way" k="natural" v="issea|sea"> <m e="way" k="natural" v="issea|sea">
@@ -1073,7 +1078,7 @@
<m k="area" v="~|false|no"> <m k="area" v="~|false|no">
<m k="highway"> <m k="highway">
<m k="oneway" v="yes|true" zoom-min="16"> <m k="oneway" v="yes|true" zoom-min="16">
<symbol repeat="true" src="assets:symbols/oneway.svg" /> <symbol use="oneway" />
</m> </m>
</m> </m>
</m> </m>

View File

@@ -1,7 +1,7 @@
/* /*
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016-2018 Izumi Kawashima * Copyright 2016-2018 Izumi Kawashima
* Copyright 2017-2018 devemux86 * Copyright 2017-2020 devemux86
* Copyright 2019 Gustl22 * Copyright 2019 Gustl22
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
@@ -23,13 +23,7 @@ import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.backends.gwt.GwtApplication; import com.badlogic.gdx.backends.gwt.GwtApplication;
import com.badlogic.gdx.backends.gwt.GwtGraphics; import com.badlogic.gdx.backends.gwt.GwtGraphics;
import com.badlogic.gdx.graphics.glutils.GLVersion; import com.badlogic.gdx.graphics.glutils.GLVersion;
import org.oscim.backend.*;
import org.oscim.backend.AssetAdapter;
import org.oscim.backend.CanvasAdapter;
import org.oscim.backend.DateTimeAdapter;
import org.oscim.backend.GL;
import org.oscim.backend.GL30;
import org.oscim.backend.GLAdapter;
import org.oscim.core.MapPosition; import org.oscim.core.MapPosition;
import org.oscim.core.Tile; import org.oscim.core.Tile;
import org.oscim.gdx.GdxAssets; import org.oscim.gdx.GdxAssets;
@@ -54,6 +48,8 @@ import org.oscim.tiling.source.oscimap4.OSciMap4TileSource;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.Collections;
class GwtMap extends GdxMap { class GwtMap extends GdxMap {
static final Logger log = LoggerFactory.getLogger(GwtMap.class); static final Logger log = LoggerFactory.getLogger(GwtMap.class);
@@ -107,9 +103,10 @@ class GwtMap extends GdxMap {
if ("toner".equals(mapName)) if ("toner".equals(mapName))
ts = DefaultSources.STAMEN_TONER.build(); ts = DefaultSources.STAMEN_TONER.build();
else if ("osm".equals(mapName)) else if ("osm".equals(mapName)) {
ts = DefaultSources.OPENSTREETMAP.build(); ts = DefaultSources.OPENSTREETMAP.build();
else if ("watercolor".equals(mapName)) ts.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-web-app"));
} else if ("watercolor".equals(mapName))
ts = DefaultSources.STAMEN_WATERCOLOR.build(); ts = DefaultSources.STAMEN_WATERCOLOR.build();
else if ("ne-landcover".equals(mapName)) else if ("ne-landcover".equals(mapName))
ts = DefaultSources.NE_LANDCOVER.build(); ts = DefaultSources.NE_LANDCOVER.build();

View File

@@ -66,4 +66,11 @@ public abstract class EventDispatcher<E extends EventListener, T> {
tell(l.data, event, data); tell(l.data, event, data);
} }
} }
/**
* Remove all listeners.
*/
public void clear() {
mListeners = null;
}
} }

View File

@@ -98,7 +98,7 @@ public class ClusterMarkerRenderer extends MarkerRenderer {
* @param defaultSymbol The default symbol * @param defaultSymbol The default symbol
* @param style The desired style, or NULL to disable clustering * @param style The desired style, or NULL to disable clustering
*/ */
public ClusterMarkerRenderer(MarkerLayer<MarkerInterface> markerLayer, MarkerSymbol defaultSymbol, ClusterMarkerRenderer.ClusterStyle style) { public ClusterMarkerRenderer(MarkerLayer markerLayer, MarkerSymbol defaultSymbol, ClusterMarkerRenderer.ClusterStyle style) {
super(markerLayer, defaultSymbol); super(markerLayer, defaultSymbol);
mClusteringEnabled = style != null; mClusteringEnabled = style != null;

View File

@@ -2,7 +2,7 @@
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016 Izumi Kawashima * Copyright 2016 Izumi Kawashima
* Copyright 2017 Longri * Copyright 2017 Longri
* Copyright 2017 devemux86 * Copyright 2017-2020 devemux86
* Copyright 2017 nebular * Copyright 2017 nebular
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
@@ -23,14 +23,14 @@ package org.oscim.layers.marker;
/** /**
* The internal representation of a marker. * The internal representation of a marker.
*/ */
class InternalItem { public class InternalItem {
MarkerInterface item; public MarkerInterface item;
boolean visible; public boolean visible;
boolean changes; public boolean changes;
float x, y; public float x, y;
double px, py; public double px, py;
float dy; public float dy;
@Override @Override
public String toString() { public String toString() {
@@ -43,15 +43,15 @@ class InternalItem {
* It only adds a couple properties to InternalItem, and the semantics "InternalItem.Clustered" * It only adds a couple properties to InternalItem, and the semantics "InternalItem.Clustered"
* are not bad. * are not bad.
*/ */
static class Clustered extends InternalItem { public static class Clustered extends InternalItem {
/** /**
* If this is >0, this item will be displayed as a cluster circle, with size clusterSize+1. * If this is >0, this item will be displayed as a cluster circle, with size clusterSize+1.
*/ */
int clusterSize; public int clusterSize;
/** /**
* If this is true, this item is hidden (because it's represented by another InternalItem acting as cluster. * If this is true, this item is hidden (because it's represented by another InternalItem acting as cluster.
*/ */
boolean clusteredOut; public boolean clusteredOut;
} }
} }

View File

@@ -2,7 +2,7 @@
* Copyright 2012 osmdroid authors: Nicolas Gramlich, Theodore Hong, Fred Eisele * Copyright 2012 osmdroid authors: Nicolas Gramlich, Theodore Hong, Fred Eisele
* *
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016-2019 devemux86 * Copyright 2016-2020 devemux86
* Copyright 2016 Stephan Leuschner * Copyright 2016 Stephan Leuschner
* Copyright 2016 Pedinel * Copyright 2016 Pedinel
* Copyright 2019 Carlos Alberto Martínez Gadea * Copyright 2019 Carlos Alberto Martínez Gadea
@@ -31,30 +31,25 @@ import org.oscim.event.GestureListener;
import org.oscim.event.MotionEvent; import org.oscim.event.MotionEvent;
import org.oscim.map.Map; import org.oscim.map.Map;
import org.oscim.map.Viewport; import org.oscim.map.Viewport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
public class ItemizedLayer<Item extends MarkerInterface> extends MarkerLayer<Item> public class ItemizedLayer extends MarkerLayer implements GestureListener {
implements GestureListener {
static final Logger log = LoggerFactory.getLogger(ItemizedLayer.class); protected final List<MarkerInterface> mItemList;
protected final List<Item> mItemList;
protected final Point mTmpPoint = new Point(); protected final Point mTmpPoint = new Point();
protected OnItemGestureListener<Item> mOnItemGestureListener; protected OnItemGestureListener<MarkerInterface> mOnItemGestureListener;
protected int mDrawnItemsLimit = Integer.MAX_VALUE; protected int mDrawnItemsLimit = Integer.MAX_VALUE;
public ItemizedLayer(Map map, MarkerSymbol defaultMarker) { public ItemizedLayer(Map map, MarkerSymbol defaultMarker) {
this(map, new ArrayList<Item>(), defaultMarker, null); this(map, new ArrayList<MarkerInterface>(), defaultMarker, null);
} }
public ItemizedLayer(Map map, List<Item> list, public ItemizedLayer(Map map, List<MarkerInterface> list,
MarkerSymbol defaultMarker, MarkerSymbol defaultMarker,
OnItemGestureListener<Item> listener) { OnItemGestureListener<MarkerInterface> listener) {
super(map, defaultMarker); super(map, defaultMarker);
@@ -64,12 +59,12 @@ public class ItemizedLayer<Item extends MarkerInterface> extends MarkerLayer<Ite
} }
public ItemizedLayer(Map map, MarkerRendererFactory markerRendererFactory) { public ItemizedLayer(Map map, MarkerRendererFactory markerRendererFactory) {
this(map, new ArrayList<Item>(), markerRendererFactory, null); this(map, new ArrayList<MarkerInterface>(), markerRendererFactory, null);
} }
public ItemizedLayer(Map map, List<Item> list, public ItemizedLayer(Map map, List<MarkerInterface> list,
MarkerRendererFactory markerRendererFactory, MarkerRendererFactory markerRendererFactory,
OnItemGestureListener<Item> listener) { OnItemGestureListener<MarkerInterface> listener) {
super(map, markerRendererFactory); super(map, markerRendererFactory);
@@ -78,12 +73,12 @@ public class ItemizedLayer<Item extends MarkerInterface> extends MarkerLayer<Ite
populate(); populate();
} }
public void setOnItemGestureListener(OnItemGestureListener<Item> listener) { public void setOnItemGestureListener(OnItemGestureListener<MarkerInterface> listener) {
mOnItemGestureListener = listener; mOnItemGestureListener = listener;
} }
@Override @Override
protected synchronized Item createItem(int index) { protected synchronized MarkerInterface createItem(int index) {
return mItemList.get(index); return mItemList.get(index);
} }
@@ -92,23 +87,24 @@ public class ItemizedLayer<Item extends MarkerInterface> extends MarkerLayer<Ite
return Math.min(mItemList.size(), mDrawnItemsLimit); return Math.min(mItemList.size(), mDrawnItemsLimit);
} }
public synchronized boolean addItem(Item item) { public synchronized boolean addItem(MarkerInterface item) {
final boolean result = mItemList.add(item); final boolean result = mItemList.add(item);
populate(); populate();
return result; return result;
} }
public synchronized void addItem(int location, Item item) { public synchronized void addItem(int location, MarkerInterface item) {
mItemList.add(location, item); mItemList.add(location, item);
populate();
} }
public synchronized boolean addItems(Collection<Item> items) { public synchronized boolean addItems(Collection<MarkerInterface> items) {
final boolean result = mItemList.addAll(items); final boolean result = mItemList.addAll(items);
populate(); populate();
return result; return result;
} }
public synchronized List<Item> getItemList() { public synchronized List<MarkerInterface> getItemList() {
return mItemList; return mItemList;
} }
@@ -123,14 +119,14 @@ public class ItemizedLayer<Item extends MarkerInterface> extends MarkerLayer<Ite
} }
} }
public synchronized boolean removeItem(Item item) { public synchronized boolean removeItem(MarkerInterface item) {
final boolean result = mItemList.remove(item); final boolean result = mItemList.remove(item);
populate(); populate();
return result; return result;
} }
public synchronized Item removeItem(int position) { public synchronized MarkerInterface removeItem(int position) {
final Item result = mItemList.remove(position); final MarkerInterface result = mItemList.remove(position);
populate(); populate();
return result; return result;
} }
@@ -146,33 +142,31 @@ public class ItemizedLayer<Item extends MarkerInterface> extends MarkerLayer<Ite
// public boolean onTap(MotionEvent event, MapPosition pos) { // public boolean onTap(MotionEvent event, MapPosition pos) {
// return activateSelectedItems(event, mActiveItemSingleTap); // return activateSelectedItems(event, mActiveItemSingleTap);
// } // }
protected boolean onSingleTapUpHelper(int index, Item item) { protected boolean onSingleTapUpHelper(int index, MarkerInterface item) {
return mOnItemGestureListener.onItemSingleTapUp(index, item); return mOnItemGestureListener.onItemSingleTapUp(index, item);
} }
private final ActiveItem mActiveItemSingleTap = new ActiveItem() { private final ActiveItem mActiveItemSingleTap = new ActiveItem() {
@Override @Override
public boolean run(int index) { public boolean run(int index) {
final ItemizedLayer<Item> that = ItemizedLayer.this;
if (mOnItemGestureListener == null) { if (mOnItemGestureListener == null) {
return false; return false;
} }
return onSingleTapUpHelper(index, that.mItemList.get(index)); return onSingleTapUpHelper(index, mItemList.get(index));
} }
}; };
protected boolean onLongPressHelper(int index, Item item) { protected boolean onLongPressHelper(int index, MarkerInterface item) {
return this.mOnItemGestureListener.onItemLongPress(index, item); return this.mOnItemGestureListener.onItemLongPress(index, item);
} }
private final ActiveItem mActiveItemLongPress = new ActiveItem() { private final ActiveItem mActiveItemLongPress = new ActiveItem() {
@Override @Override
public boolean run(final int index) { public boolean run(final int index) {
final ItemizedLayer<Item> that = ItemizedLayer.this; if (mOnItemGestureListener == null) {
if (that.mOnItemGestureListener == null) {
return false; return false;
} }
return onLongPressHelper(index, that.mItemList.get(index)); return onLongPressHelper(index, mItemList.get(index));
} }
}; };
@@ -205,7 +199,7 @@ public class ItemizedLayer<Item extends MarkerInterface> extends MarkerLayer<Ite
double dist = (20 * CanvasAdapter.getScale()) * (20 * CanvasAdapter.getScale()); double dist = (20 * CanvasAdapter.getScale()) * (20 * CanvasAdapter.getScale());
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
Item item = mItemList.get(i); MarkerInterface item = mItemList.get(i);
if (!box.contains(item.getPoint().longitudeE6, if (!box.contains(item.getPoint().longitudeE6,
item.getPoint().latitudeE6)) item.getPoint().latitudeE6))

View File

@@ -6,7 +6,7 @@
* *
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016 Stephan Leuschner * Copyright 2016 Stephan Leuschner
* Copyright 2016-2018 devemux86 * Copyright 2016-2020 devemux86
* Copyright 2017 Longri * Copyright 2017 Longri
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
@@ -34,27 +34,26 @@ import org.oscim.map.Map;
* gets checked for onTap first. This class is generic, because you then you get * gets checked for onTap first. This class is generic, because you then you get
* your custom item-class passed back in onTap(). << TODO * your custom item-class passed back in onTap(). << TODO
*/ */
public abstract class MarkerLayer<Item extends MarkerInterface> extends Layer { public abstract class MarkerLayer extends Layer {
protected final MarkerRenderer mMarkerRenderer; protected final MarkerRenderer mMarkerRenderer;
protected Item mFocusedItem; protected MarkerInterface mFocusedItem;
/** /**
* Method by which subclasses create the actual Items. This will only be * Method by which subclasses create the actual Items. This will only be
* called from populate() we'll cache them for later use. * called from populate() we'll cache them for later use.
*/ */
protected abstract Item createItem(int i); protected abstract MarkerInterface createItem(int i);
/** /**
* The number of items in this overlay. * The number of items in this overlay.
*/ */
public abstract int size(); public abstract int size();
@SuppressWarnings("unchecked")
public MarkerLayer(Map map, MarkerSymbol defaultSymbol) { public MarkerLayer(Map map, MarkerSymbol defaultSymbol) {
super(map); super(map);
mMarkerRenderer = new MarkerRenderer((MarkerLayer<MarkerInterface>) this, defaultSymbol); mMarkerRenderer = new MarkerRenderer(this, defaultSymbol);
mRenderer = mMarkerRenderer; mRenderer = mMarkerRenderer;
} }
@@ -85,7 +84,7 @@ public abstract class MarkerLayer<Item extends MarkerInterface> extends Layer {
* *
* @param item * @param item
*/ */
public synchronized void setFocus(Item item) { public synchronized void setFocus(MarkerInterface item) {
mFocusedItem = item; mFocusedItem = item;
} }
@@ -93,7 +92,7 @@ public abstract class MarkerLayer<Item extends MarkerInterface> extends Layer {
* @return the currently-focused item, or null if no item is currently * @return the currently-focused item, or null if no item is currently
* focused. * focused.
*/ */
public synchronized Item getFocus() { public synchronized MarkerInterface getFocus() {
return mFocusedItem; return mFocusedItem;
} }

View File

@@ -2,7 +2,7 @@
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016 Izumi Kawashima * Copyright 2016 Izumi Kawashima
* Copyright 2017 Longri * Copyright 2017 Longri
* Copyright 2017-2018 devemux86 * Copyright 2017-2020 devemux86
* Copyright 2017 nebular * Copyright 2017 nebular
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
@@ -27,6 +27,7 @@ import org.oscim.renderer.BucketRenderer;
import org.oscim.renderer.GLViewport; import org.oscim.renderer.GLViewport;
import org.oscim.renderer.bucket.SymbolBucket; import org.oscim.renderer.bucket.SymbolBucket;
import org.oscim.renderer.bucket.SymbolItem; import org.oscim.renderer.bucket.SymbolItem;
import org.oscim.utils.Parameters;
import org.oscim.utils.TimSort; import org.oscim.utils.TimSort;
import org.oscim.utils.geom.GeometryUtils; import org.oscim.utils.geom.GeometryUtils;
@@ -38,7 +39,7 @@ public class MarkerRenderer extends BucketRenderer {
protected final SymbolBucket mSymbolLayer; protected final SymbolBucket mSymbolLayer;
protected final float[] mBox = new float[8]; protected final float[] mBox = new float[8];
protected final MarkerLayer<MarkerInterface> mMarkerLayer; protected final MarkerLayer mMarkerLayer;
protected final Point mMapPoint = new Point(); protected final Point mMapPoint = new Point();
/** /**
@@ -48,7 +49,7 @@ public class MarkerRenderer extends BucketRenderer {
protected InternalItem[] mItems; protected InternalItem[] mItems;
public MarkerRenderer(MarkerLayer<MarkerInterface> markerLayer, MarkerSymbol defaultSymbol) { public MarkerRenderer(MarkerLayer markerLayer, MarkerSymbol defaultSymbol) {
mSymbolLayer = new SymbolBucket(); mSymbolLayer = new SymbolBucket();
mMarkerLayer = markerLayer; mMarkerLayer = markerLayer;
mDefaultMarker = defaultSymbol; mDefaultMarker = defaultSymbol;
@@ -187,12 +188,13 @@ public class MarkerRenderer extends BucketRenderer {
static TimSort<InternalItem> ZSORT = new TimSort<InternalItem>(); static TimSort<InternalItem> ZSORT = new TimSort<InternalItem>();
public static void sort(InternalItem[] a, int lo, int hi) { protected void sort(InternalItem[] a, int lo, int hi) {
int nRemaining = hi - lo; int nRemaining = hi - lo;
if (nRemaining < 2) { if (nRemaining < 2) {
return; return;
} }
if (Parameters.MARKER_SORT)
ZSORT.doSort(a, zComparator, lo, hi); ZSORT.doSort(a, zComparator, lo, hi);
} }

View File

@@ -104,6 +104,10 @@ public class VectorTileLayer extends TileLayer {
return true; return true;
} }
public TileSource getTileSource() {
return mTileSource;
}
/** /**
* Set {@link IRenderTheme} used by {@link TileLoader} * Set {@link IRenderTheme} used by {@link TileLoader}
*/ */

View File

@@ -1,9 +1,10 @@
/* /*
* Copyright 2014 Hannes Janetzek * Copyright 2014 Hannes Janetzek
* Copyright 2016-2019 devemux86 * Copyright 2016-2020 devemux86
* Copyright 2017 Luca Osten * Copyright 2017 Luca Osten
* Copyright 2018 Izumi Kawashima * Copyright 2018 Izumi Kawashima
* Copyright 2018 Mathieu De Brito * Copyright 2018 Mathieu De Brito
* Copyright 2020 Stephan Brandt
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@@ -225,6 +226,9 @@ public class ViewController extends Viewport {
public void rotateMap(double radians, float pivotX, float pivotY) { public void rotateMap(double radians, float pivotX, float pivotY) {
ThreadUtils.assertMainThread(); ThreadUtils.assertMainThread();
setRotation(mPos.bearing + Math.toDegrees(radians));
if (pivotX != 0 && pivotY != 0) {
double rsin = Math.sin(radians); double rsin = Math.sin(radians);
double rcos = Math.cos(radians); double rcos = Math.cos(radians);
@@ -235,8 +239,7 @@ public class ViewController extends Viewport {
float y = (float) (pivotY - pivotX * rsin - pivotY * rcos); float y = (float) (pivotY - pivotX * rsin - pivotY * rcos);
moveMap(x, y); moveMap(x, y);
}
setRotation(mPos.bearing + Math.toDegrees(radians));
} }
public void setRotation(double degree) { public void setRotation(double degree) {

View File

@@ -62,4 +62,10 @@ public class MapScaleBarLayer extends Layer implements Map.UpdateListener {
mapScaleBar.redrawNeeded = false; mapScaleBar.redrawNeeded = false;
} }
@Override
public void onDetach() {
super.onDetach();
mapScaleBar.destroy();
}
} }

View File

@@ -3,7 +3,7 @@
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016-2019 devemux86 * Copyright 2016-2019 devemux86
* Copyright 2016-2017 Longri * Copyright 2016-2017 Longri
* Copyright 2016 Andrey Novikov * Copyright 2016-2020 Andrey Novikov
* Copyright 2018-2019 Gustl22 * Copyright 2018-2019 Gustl22
* Copyright 2018 Izumi Kawashima * Copyright 2018 Izumi Kawashima
* Copyright 2019 Murray Hughes * Copyright 2019 Murray Hughes
@@ -140,6 +140,7 @@ public class XmlThemeBuilder extends DefaultHandler {
private final HashMap<String, RenderStyle> mStyles = new HashMap<>(10); private final HashMap<String, RenderStyle> mStyles = new HashMap<>(10);
private final HashMap<String, TextStyle.TextBuilder<?>> mTextStyles = new HashMap<>(10); private final HashMap<String, TextStyle.TextBuilder<?>> mTextStyles = new HashMap<>(10);
private final HashMap<String, SymbolStyle.SymbolBuilder<?>> mSymbolStyles = new HashMap<>(10);
private final AreaBuilder<?> mAreaBuilder = AreaStyle.builder(); private final AreaBuilder<?> mAreaBuilder = AreaStyle.builder();
private final CircleBuilder<?> mCircleBuilder = CircleStyle.builder(); private final CircleBuilder<?> mCircleBuilder = CircleStyle.builder();
@@ -196,6 +197,8 @@ public class XmlThemeBuilder extends DefaultHandler {
mRulesList.clear(); mRulesList.clear();
mStyles.clear(); mStyles.clear();
mTextStyles.clear();
mSymbolStyles.clear();
mRuleStack.clear(); mRuleStack.clear();
mElementStack.clear(); mElementStack.clear();
@@ -261,6 +264,10 @@ public class XmlThemeBuilder extends DefaultHandler {
checkState(localName, Element.STYLE); checkState(localName, Element.STYLE);
handleTextElement(localName, attributes, true, false); handleTextElement(localName, attributes, true, false);
} else if ("style-symbol".equals(localName)) {
checkState(localName, Element.STYLE);
handleSymbolElement(localName, attributes, true);
} else if ("style-area".equals(localName)) { } else if ("style-area".equals(localName)) {
checkState(localName, Element.STYLE); checkState(localName, Element.STYLE);
handleAreaElement(localName, attributes, true); handleAreaElement(localName, attributes, true);
@@ -298,9 +305,7 @@ public class XmlThemeBuilder extends DefaultHandler {
} else if ("symbol".equals(localName)) { } else if ("symbol".equals(localName)) {
checkState(localName, Element.RENDERING_INSTRUCTION); checkState(localName, Element.RENDERING_INSTRUCTION);
SymbolStyle symbol = createSymbol(localName, attributes); handleSymbolElement(localName, attributes, false);
if (symbol != null && isVisible(symbol))
mCurrentRule.addStyle(symbol);
} else if ("outline".equals(localName)) { } else if ("outline".equals(localName)) {
checkState(localName, Element.RENDERING_INSTRUCTION); checkState(localName, Element.RENDERING_INSTRUCTION);
@@ -1134,23 +1139,59 @@ public class XmlThemeBuilder extends DefaultHandler {
return b.build(); return b.build();
} }
private void handleSymbolElement(String localName, Attributes attributes, boolean isStyle)
throws SAXException {
String style = attributes.getValue("use");
SymbolBuilder<?> ps = null;
if (style != null) {
ps = mSymbolStyles.get(style);
if (ps == null) {
log.debug("missing symbol style: " + style);
return;
}
}
SymbolBuilder<?> b = createSymbol(localName, attributes, ps);
if (isStyle) {
log.debug("put style {}", b.style);
mSymbolStyles.put(b.style, SymbolStyle.builder().from(b));
} else {
SymbolStyle symbol = buildSymbol(b);
if (symbol != null && isVisible(symbol))
mCurrentRule.addStyle(symbol);
}
}
/** /**
* @return a new Symbol with the given rendering attributes. * @return a new Symbol with the given rendering attributes.
*/ */
private SymbolStyle createSymbol(String elementName, Attributes attributes) { private SymbolBuilder<?> createSymbol(String elementName, Attributes attributes,
SymbolBuilder<?> b = mSymbolBuilder.reset(); SymbolBuilder<?> style) {
String src = null; SymbolBuilder<?> b;
if (style == null)
b = mSymbolBuilder.reset();
else
b = mSymbolBuilder.from(style);
b.themeCallback(mThemeCallback);
for (int i = 0; i < attributes.getLength(); i++) { for (int i = 0; i < attributes.getLength(); i++) {
String name = attributes.getLocalName(i); String name = attributes.getLocalName(i);
String value = attributes.getValue(i); String value = attributes.getValue(i);
if ("src".equals(name)) if ("id".equals(name))
src = value; b.style = value;
else if ("src".equals(name))
b.src(value);
else if ("cat".equals(name)) else if ("cat".equals(name))
b.cat(value); b.cat(value);
else if ("use".equals(name))
;// ignore
else if ("symbol-width".equals(name)) else if ("symbol-width".equals(name))
b.symbolWidth = (int) (Integer.parseInt(value) * mScale); b.symbolWidth = (int) (Integer.parseInt(value) * mScale);
@@ -1182,20 +1223,24 @@ public class XmlThemeBuilder extends DefaultHandler {
logUnknownAttribute(elementName, name, value, i); logUnknownAttribute(elementName, name, value, i);
} }
validateExists("src", src, elementName); validateExists("src", b.src, elementName);
String lowSrc = src.toLowerCase(Locale.ENGLISH); return b;
}
private SymbolStyle buildSymbol(SymbolBuilder<?> b) {
String lowSrc = b.src.toLowerCase(Locale.ENGLISH);
if (lowSrc.endsWith(".png") || lowSrc.endsWith(".svg")) { if (lowSrc.endsWith(".png") || lowSrc.endsWith(".svg")) {
try { try {
Bitmap bitmap = CanvasAdapter.getBitmapAsset(mTheme.getRelativePathPrefix(), src, b.symbolWidth, b.symbolHeight, b.symbolPercent); Bitmap bitmap = CanvasAdapter.getBitmapAsset(mTheme.getRelativePathPrefix(), b.src, b.symbolWidth, b.symbolHeight, b.symbolPercent);
if (bitmap != null) if (bitmap != null)
return buildSymbol(b, src, bitmap); return buildSymbol(b, b.src, bitmap);
} catch (Exception e) { } catch (Exception e) {
log.error("{}: {}", src, e.getMessage()); log.error("{}: {}", b.src, e.getMessage());
} }
return null; return null;
} }
return b.texture(getAtlasRegion(src)).build(); return b.texture(getAtlasRegion(b.src)).build();
} }
SymbolStyle buildSymbol(SymbolBuilder<?> b, String src, Bitmap bitmap) { SymbolStyle buildSymbol(SymbolBuilder<?> b, String src, Bitmap bitmap) {

View File

@@ -58,16 +58,16 @@ public final class LineStyle extends RenderStyle<LineStyle> {
public final float repeatStart; public final float repeatStart;
public final float repeatGap; public final float repeatGap;
public LineStyle(int stroke, float width) { public LineStyle(int color, float width) {
this(0, "", stroke, width, Cap.BUTT, true, 1, 0, 0, 0, -1, 0, false, null, true, null, REPEAT_START_DEFAULT * CanvasAdapter.getScale(), REPEAT_GAP_DEFAULT * CanvasAdapter.getScale()); this(0, "", color, width, Cap.BUTT, true, 1, 0, 0, 0, -1, 0, false, null, true, null, REPEAT_START_DEFAULT * CanvasAdapter.getScale(), REPEAT_GAP_DEFAULT * CanvasAdapter.getScale());
} }
public LineStyle(int level, int stroke, float width) { public LineStyle(int level, int color, float width) {
this(level, "", stroke, width, Cap.BUTT, true, 1, 0, 0, 0, -1, 0, false, null, true, null, REPEAT_START_DEFAULT * CanvasAdapter.getScale(), REPEAT_GAP_DEFAULT * CanvasAdapter.getScale()); this(level, "", color, width, Cap.BUTT, true, 1, 0, 0, 0, -1, 0, false, null, true, null, REPEAT_START_DEFAULT * CanvasAdapter.getScale(), REPEAT_GAP_DEFAULT * CanvasAdapter.getScale());
} }
public LineStyle(int stroke, float width, Cap cap) { public LineStyle(int color, float width, Cap cap) {
this(0, "", stroke, width, cap, true, 1, 0, 0, 0, -1, 0, false, null, true, null, REPEAT_START_DEFAULT * CanvasAdapter.getScale(), REPEAT_GAP_DEFAULT * CanvasAdapter.getScale()); this(0, "", color, width, cap, true, 1, 0, 0, 0, -1, 0, false, null, true, null, REPEAT_START_DEFAULT * CanvasAdapter.getScale(), REPEAT_GAP_DEFAULT * CanvasAdapter.getScale());
} }
public LineStyle(int level, String style, int color, float width, public LineStyle(int level, String style, int color, float width,

View File

@@ -3,6 +3,7 @@
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016-2019 devemux86 * Copyright 2016-2019 devemux86
* Copyright 2017 Longri * Copyright 2017 Longri
* Copyright 2020 Andrey Novikov
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@@ -118,6 +119,7 @@ public final class SymbolStyle extends RenderStyle<SymbolStyle> {
public Bitmap bitmap; public Bitmap bitmap;
public TextureRegion texture; public TextureRegion texture;
public int hash; public int hash;
public String src;
public int symbolWidth; public int symbolWidth;
public int symbolHeight; public int symbolHeight;
@@ -133,6 +135,27 @@ public final class SymbolStyle extends RenderStyle<SymbolStyle> {
public SymbolBuilder() { public SymbolBuilder() {
} }
public T from(SymbolBuilder<?> other) {
this.cat = other.cat;
this.bitmap = other.bitmap;
this.texture = other.texture;
this.hash = other.hash;
this.src = other.src;
this.symbolWidth = other.symbolWidth;
this.symbolHeight = other.symbolHeight;
this.symbolPercent = other.symbolPercent;
this.billboard = other.billboard;
this.repeat = other.repeat;
this.repeatStart = other.repeatStart;
this.repeatGap = other.repeatGap;
this.rotate = other.rotate;
return self();
}
public T set(SymbolStyle symbol) { public T set(SymbolStyle symbol) {
if (symbol == null) if (symbol == null)
return reset(); return reset();
@@ -171,6 +194,11 @@ public final class SymbolStyle extends RenderStyle<SymbolStyle> {
return self(); return self();
} }
public T src(String src) {
this.src = src;
return self();
}
public T symbolWidth(int symbolWidth) { public T symbolWidth(int symbolWidth) {
this.symbolWidth = symbolWidth; this.symbolWidth = symbolWidth;
return self(); return self();
@@ -217,6 +245,7 @@ public final class SymbolStyle extends RenderStyle<SymbolStyle> {
bitmap = null; bitmap = null;
texture = null; texture = null;
hash = 0; hash = 0;
src = null;
symbolWidth = 0; symbolWidth = 0;
symbolHeight = 0; symbolHeight = 0;

View File

@@ -1,7 +1,7 @@
/* /*
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016 Andrey Novikov * Copyright 2016 Andrey Novikov
* Copyright 2016-2019 devemux86 * Copyright 2016-2020 devemux86
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@@ -35,6 +35,8 @@ public class DefaultSources {
new FadeStep(8 - 1, 8 + 1, 0.7f, 0) new FadeStep(8 - 1, 8 + 1, 0.7f, 0)
}; };
// Requires a valid HTTP User-Agent identifying application
// https://operations.osmfoundation.org/policies/tiles/
public static Builder<?> OPENSTREETMAP = BitmapTileSource.builder() public static Builder<?> OPENSTREETMAP = BitmapTileSource.builder()
.url("https://tile.openstreetmap.org") .url("https://tile.openstreetmap.org")
.zoomMax(18); .zoomMax(18);

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright 2010, 2011, 2012 mapsforge.org * Copyright 2010, 2011, 2012 mapsforge.org
* Copyright 2017-2018 devemux86 * Copyright 2017-2020 devemux86
* Copyright 2017 Gustl22 * Copyright 2017 Gustl22
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
@@ -27,6 +27,7 @@ import java.io.RandomAccessFile;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
/** /**
@@ -84,7 +85,12 @@ public class ReadBuffer {
LOG.warning("invalid read length: " + length); LOG.warning("invalid read length: " + length);
return false; return false;
} }
try {
mBufferData = new byte[length]; mBufferData = new byte[length];
} catch (Throwable t) {
LOG.log(Level.SEVERE, t.getMessage(), t);
return false;
}
} }
mBufferPosition = 0; mBufferPosition = 0;

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2017-2019 devemux86 * Copyright 2017-2020 devemux86
* *
* This program is free software: you can redistribute it and/or modify it under the * This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software * terms of the GNU Lesser General Public License as published by the Free Software
@@ -36,6 +36,11 @@ public final class Parameters {
*/ */
public static boolean MAP_EVENT_LAYER2 = false; public static boolean MAP_EVENT_LAYER2 = false;
/**
* If true the markers are sorted in y-axis.
*/
public static boolean MARKER_SORT = true;
/** /**
* Maximum buffer size for map files. * Maximum buffer size for map files.
*/ */