0.3.0 #23

Open
altavir wants to merge 40 commits from dev into main
51 changed files with 92 additions and 88 deletions
Showing only changes of commit 7c7a788d2e - Show all commits

View File

@ -5,6 +5,7 @@
### Added
### Changed
- Package changed to `space.kscience`
### Deprecated

View File

@ -5,10 +5,10 @@ plugins {
id("space.kscience.gradle.project")
}
val kmathVersion: String by extra("0.4.0-RC2")
val kmathVersion: String by extra("0.4.0")
allprojects {
group = "center.sciprog"
group = "space.kscience"
version = "0.3.0-dev-2"
repositories {

View File

@ -14,9 +14,6 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.application
import center.sciprog.maps.compose.*
import center.sciprog.maps.coordinates.GeodeticMapCoordinates
import center.sciprog.maps.coordinates.Gmc
import center.sciprog.maps.coordinates.kilometers
import center.sciprog.maps.features.*
import center.sciprog.maps.geojson.geoJson
import io.ktor.client.HttpClient
@ -32,6 +29,9 @@ import space.kscience.attributes.Attributes
import space.kscience.kmath.geometry.Angle
import space.kscience.kmath.geometry.degrees
import space.kscience.kmath.geometry.radians
import space.kscience.maps.coordinates.GeodeticMapCoordinates
import space.kscience.maps.coordinates.Gmc
import space.kscience.maps.coordinates.kilometers
import java.nio.file.Path
import kotlin.math.PI
import kotlin.random.Random

View File

@ -1,10 +1,10 @@
package center.sciprog.maps.compose
package space.kscience.maps.compose
import center.sciprog.maps.coordinates.GeodeticMapCoordinates
import center.sciprog.maps.coordinates.Gmc
import center.sciprog.maps.features.Rectangle
import space.kscience.kmath.geometry.Angle
import space.kscience.kmath.geometry.abs
import space.kscience.maps.coordinates.GeodeticMapCoordinates
import space.kscience.maps.coordinates.Gmc
internal fun Angle.isBetween(a: Angle, b: Angle) = this in a..b || this in b..a

View File

@ -1,6 +1,6 @@
@file:Suppress("DEPRECATION")
package center.sciprog.maps.compose
package space.kscience.maps.compose
import kotlin.jvm.Synchronized

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.compose
package space.kscience.maps.compose
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
@ -6,12 +6,12 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.DpOffset
import androidx.compose.ui.unit.DpRect
import androidx.compose.ui.unit.dp
import center.sciprog.maps.coordinates.Gmc
import center.sciprog.maps.coordinates.MercatorProjection
import center.sciprog.maps.coordinates.WebMercatorCoordinates
import center.sciprog.maps.coordinates.WebMercatorProjection
import center.sciprog.maps.features.*
import space.kscience.kmath.geometry.radians
import space.kscience.maps.coordinates.Gmc
import space.kscience.maps.coordinates.MercatorProjection
import space.kscience.maps.coordinates.WebMercatorCoordinates
import space.kscience.maps.coordinates.WebMercatorProjection
import kotlin.math.*

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.compose
package space.kscience.maps.compose
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Deferred

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.compose
package space.kscience.maps.compose
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
@ -11,13 +11,13 @@ import androidx.compose.ui.graphics.toComposeImageBitmap
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.dp
import center.sciprog.maps.coordinates.Gmc
import center.sciprog.maps.features.*
import io.github.oshai.kotlinlogging.KotlinLogging
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.launch
import kotlinx.coroutines.supervisorScope
import org.jetbrains.skia.Image
import space.kscience.maps.coordinates.Gmc
import kotlin.math.ceil
import kotlin.math.pow

View File

@ -1,9 +1,9 @@
package center.sciprog.maps.compose
package space.kscience.maps.compose
import center.sciprog.maps.coordinates.GeodeticMapCoordinates
import center.sciprog.maps.coordinates.Gmc
import center.sciprog.maps.coordinates.WebMercatorProjection
import center.sciprog.maps.features.ViewPoint
import space.kscience.maps.coordinates.GeodeticMapCoordinates
import space.kscience.maps.coordinates.Gmc
import space.kscience.maps.coordinates.WebMercatorProjection
/**
* Observable position on the map. Includes observation coordinate and [zoom] factor

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.compose
package space.kscience.maps.compose
import androidx.compose.ui.unit.DpOffset
import androidx.compose.ui.unit.DpSize
@ -9,6 +9,7 @@ import center.sciprog.maps.features.Rectangle
import center.sciprog.maps.features.ViewPoint
import space.kscience.kmath.geometry.Angle
import space.kscience.kmath.geometry.radians
import space.kscience.maps.coordinates.*
import kotlin.math.abs
import kotlin.math.floor
import kotlin.math.pow
@ -19,7 +20,8 @@ public object WebMercatorSpace : CoordinateSpace<Gmc> {
private fun tileScale(zoom: Float): Float = 2f.pow(zoom - floor(zoom))
override fun Rectangle(first: Gmc, second: Gmc): Rectangle<Gmc> = GmcRectangle(first, second)
override fun Rectangle(first: Gmc, second: Gmc): Rectangle<Gmc> =
space.kscience.maps.compose.GmcRectangle(first, second)
override fun Rectangle(center: Gmc, zoom: Float, size: DpSize): Rectangle<Gmc> {
val scale = WebMercatorProjection.scaleFactor(zoom)
@ -62,7 +64,10 @@ public object WebMercatorSpace : CoordinateSpace<Gmc> {
val maxLat = maxOf { it.top }
val minLong = minOf { it.left }
val maxLong = maxOf { it.right }
return GmcRectangle(Gmc.normalized(minLat, minLong), Gmc.normalized(maxLat, maxLong))
return space.kscience.maps.compose.GmcRectangle(
Gmc.normalized(minLat, minLong),
Gmc.normalized(maxLat, maxLong)
)
}
override fun Collection<Gmc>.wrapPoints(): Rectangle<Gmc>? {
@ -72,7 +77,10 @@ public object WebMercatorSpace : CoordinateSpace<Gmc> {
val maxLat = maxOf { it.latitude }
val minLong = minOf { it.longitude }
val maxLong = maxOf { it.longitude }
return GmcRectangle(Gmc.normalized(minLat, minLong), Gmc.normalized(maxLat, maxLong))
return space.kscience.maps.compose.GmcRectangle(
Gmc.normalized(minLat, minLong),
Gmc.normalized(maxLat, maxLong)
)
}
override fun Gmc.offsetTo(b: Gmc, zoom: Float): DpOffset {
@ -132,5 +140,5 @@ public fun CoordinateSpace<Gmc>.Rectangle(
center.latitude + (height / 2),
center.longitude + (width / 2)
)
return GmcRectangle(a, b)
return space.kscience.maps.compose.GmcRectangle(a, b)
}

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.compose
package space.kscience.maps.compose
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.drawscope.DrawScope
@ -10,6 +10,7 @@ import center.sciprog.maps.coordinates.*
import center.sciprog.maps.features.*
import org.jetbrains.skia.Font
import space.kscience.kmath.geometry.Angle
import space.kscience.maps.coordinates.*
import kotlin.math.ceil

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.compose
package space.kscience.maps.compose
import io.github.oshai.kotlinlogging.KotlinLogging
import io.ktor.client.HttpClient

View File

@ -1,8 +1,7 @@
package center.sciprog.maps.compose
package space.kscience.maps.compose
import io.ktor.client.HttpClient
import io.ktor.client.engine.cio.CIO
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.supervisorScope
import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.Test

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.coordinates
package space.kscience.maps.coordinates
import kotlinx.serialization.Serializable
import kotlin.jvm.JvmInline

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.coordinates
package space.kscience.maps.coordinates
import kotlinx.serialization.Serializable
import space.kscience.kmath.geometry.*

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.coordinates
package space.kscience.maps.coordinates
import kotlinx.serialization.Serializable
import space.kscience.kmath.geometry.*

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.coordinates
package space.kscience.maps.coordinates
import space.kscience.kmath.geometry.*
import kotlin.math.*
@ -64,8 +64,8 @@ public fun GeoEllipsoid.meridianCurve(
}
return GmcCurve(
forward = GmcPose(Gmc.normalized(fromLatitude, longitude), if (up) Angle.zero else Angle.pi),
backward = GmcPose(Gmc.normalized(toLatitude, longitude), if (up) Angle.pi else Angle.zero),
forward = GmcPose(GeodeticMapCoordinates.normalized(fromLatitude, longitude), if (up) Angle.zero else Angle.pi),
backward = GmcPose(GeodeticMapCoordinates.normalized(toLatitude, longitude), if (up) Angle.pi else Angle.zero),
distance = s
)
}
@ -77,8 +77,8 @@ public fun GeoEllipsoid.parallelCurve(latitude: Angle, fromLongitude: Angle, toL
require(latitude in (-Angle.piDiv2)..(Angle.piDiv2)) { "Latitude must be in (-90, 90) degrees range" }
val right = toLongitude > fromLongitude
return GmcCurve(
forward = GmcPose(Gmc.normalized(latitude, fromLongitude), if (right) Angle.piDiv2 else -Angle.piDiv2),
backward = GmcPose(Gmc.normalized(latitude, toLongitude), if (right) -Angle.piDiv2 else Angle.piDiv2),
forward = GmcPose(GeodeticMapCoordinates.normalized(latitude, fromLongitude), if (right) Angle.piDiv2 else -Angle.piDiv2),
backward = GmcPose(GeodeticMapCoordinates.normalized(latitude, toLongitude), if (right) -Angle.piDiv2 else Angle.piDiv2),
distance = reducedRadius(latitude) * abs((fromLongitude - toLongitude).toRadians().value)
)
}
@ -193,7 +193,7 @@ public fun GeoEllipsoid.curveInDirection(
val L = lambda - (1 - C) * f * sinAlpha *
(sigma.value + C * sinSigma * (cosSigmaM2 + C * cosSigma * (-1 + 2 * cos2SigmaM2)))
val endPoint = Gmc.normalized(phi2, start.longitude + L.radians)
val endPoint = GeodeticMapCoordinates.normalized(phi2, start.longitude + L.radians)
// eq. 12

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.coordinates
package space.kscience.maps.coordinates
import kotlinx.serialization.Serializable
import space.kscience.kmath.geometry.Angle

View File

@ -3,7 +3,7 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package center.sciprog.maps.coordinates
package space.kscience.maps.coordinates
import kotlinx.serialization.Serializable
import space.kscience.kmath.geometry.*

View File

@ -3,7 +3,7 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package center.sciprog.maps.coordinates
package space.kscience.maps.coordinates
import space.kscience.kmath.geometry.abs
import kotlin.math.*

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.coordinates
package space.kscience.maps.coordinates
import space.kscience.kmath.geometry.radians
import kotlin.test.Test
@ -6,8 +6,8 @@ import kotlin.test.assertEquals
internal class DistanceTest {
companion object {
val moscow = Gmc.ofDegrees(55.76058287719673, 37.60358622841869)
val spb = Gmc.ofDegrees(59.926686023580444, 30.36038109122013)
val moscow = GeodeticMapCoordinates.ofDegrees(55.76058287719673, 37.60358622841869)
val spb = GeodeticMapCoordinates.ofDegrees(59.926686023580444, 30.36038109122013)
}
@Test

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.coordinates
package space.kscience.maps.coordinates
import kotlin.test.Test
import kotlin.test.assertEquals
@ -6,7 +6,7 @@ import kotlin.test.assertEquals
class MercatorTest {
@Test
fun sphereForwardBackward(){
val moscow = Gmc.ofDegrees(55.76058287719673, 37.60358622841869)
val moscow = GeodeticMapCoordinates.ofDegrees(55.76058287719673, 37.60358622841869)
val mercator = MapProjection.epsg3857.toProjection(moscow)
//https://epsg.io/transform#s_srs=4326&t_srs=3857&x=37.6035862&y=55.7605829
assertEquals(4186.0120709, mercator.x.kilometers, 1e-4)
@ -18,7 +18,7 @@ class MercatorTest {
@Test
fun ellipseForwardBackward(){
val moscow = Gmc.ofDegrees(55.76058287719673, 37.60358622841869)
val moscow = GeodeticMapCoordinates.ofDegrees(55.76058287719673, 37.60358622841869)
val projection = MercatorProjection(ellipsoid = GeoEllipsoid.WGS84)
val mercator = projection.toProjection(moscow)
val backwards = projection.toGeodetic(mercator)

View File

@ -1,6 +1,5 @@
package center.sciprog.maps.compose
package space.kscience.maps.compose
import androidx.compose.foundation.gestures.detectTapGestures
import androidx.compose.foundation.gestures.drag
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
@ -20,7 +19,7 @@ import kotlin.math.min
public fun <T : Any> Modifier.canvasControls(
state: CanvasState<T>,
features: FeatureGroup<T>,
): Modifier = with(state){
): Modifier = with(state) {
// //selecting all tapabales ahead of time
// val allTapable = buildMap {

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.compose
package space.kscience.maps.compose
import androidx.compose.foundation.gestures.GestureCancellationException
import androidx.compose.foundation.gestures.PressGestureScope

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.features
package space.kscience.maps.features
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.getValue

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.features
package space.kscience.maps.features
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.DpOffset

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.features
package space.kscience.maps.features
import androidx.compose.ui.input.pointer.PointerEvent
import androidx.compose.ui.input.pointer.isPrimaryPressed

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.features
package space.kscience.maps.features
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.features
package space.kscience.maps.features
import androidx.compose.foundation.Canvas
import androidx.compose.runtime.Composable

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.features
package space.kscience.maps.features
import androidx.compose.runtime.*
import androidx.compose.runtime.snapshots.SnapshotStateMap

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.features
package space.kscience.maps.features
import androidx.compose.ui.input.pointer.PointerEvent
import androidx.compose.ui.input.pointer.isPrimaryPressed

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.features
package space.kscience.maps.features
import androidx.compose.ui.unit.DpSize

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.features
package space.kscience.maps.features
/**
* @param T type of coordinates used for the view point

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.features
package space.kscience.maps.features
import space.kscience.attributes.Attributes
import kotlin.jvm.JvmName

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.features
package space.kscience.maps.features
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Size

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.features
package space.kscience.maps.features
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.PointerMatcher

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.geojson
package space.kscience.maps.geojson
import center.sciprog.maps.geojson.GeoJson.Companion.PROPERTIES_KEY
import center.sciprog.maps.geojson.GeoJson.Companion.TYPE_KEY

View File

@ -1,9 +1,9 @@
package center.sciprog.maps.geojson
package space.kscience.maps.geojson
import center.sciprog.maps.coordinates.Gmc
import center.sciprog.maps.coordinates.meters
import center.sciprog.maps.geojson.GeoJsonGeometry.Companion.COORDINATES_KEY
import kotlinx.serialization.json.*
import space.kscience.maps.coordinates.Gmc
import space.kscience.maps.coordinates.meters
import kotlin.jvm.JvmInline
public sealed interface GeoJsonGeometry : GeoJson {

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.geojson
package space.kscience.maps.geojson
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.serializer

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.geojson
package space.kscience.maps.geojson
import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.SerialDescriptor

View File

@ -1,12 +1,12 @@
package center.sciprog.maps.geojson
package space.kscience.maps.geojson
import androidx.compose.ui.graphics.Color
import center.sciprog.maps.coordinates.Gmc
import center.sciprog.maps.features.*
import kotlinx.serialization.json.contentOrNull
import kotlinx.serialization.json.intOrNull
import kotlinx.serialization.json.jsonPrimitive
import space.kscience.NameAttribute
import space.kscience.maps.coordinates.Gmc
/**

View File

@ -1,11 +1,11 @@
package center.sciprog.maps.geojson
package space.kscience.maps.geojson
import center.sciprog.maps.coordinates.Gmc
import center.sciprog.maps.features.Feature
import center.sciprog.maps.features.FeatureGroup
import center.sciprog.maps.features.FeatureRef
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.jsonObject
import space.kscience.maps.coordinates.Gmc
import java.net.URL
/**

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.scheme
package space.kscience.maps.scheme
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.scheme
package space.kscience.maps.scheme
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp

View File

@ -1,7 +1,6 @@
package center.sciprog.maps.scheme
package space.kscience.maps.scheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.DpOffset
import androidx.compose.ui.unit.DpRect

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.scheme
package space.kscience.maps.scheme
import androidx.compose.ui.unit.DpOffset
import androidx.compose.ui.unit.DpSize

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.scheme
package space.kscience.maps.scheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.svg
package space.kscience.maps.svg
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Rect

View File

@ -1,4 +1,4 @@
package center.sciprog.maps.svg
package space.kscience.maps.svg
import androidx.compose.ui.geometry.CornerRadius
import androidx.compose.ui.geometry.Offset

View File

@ -1,7 +1,6 @@
package center.sciprog.maps.svg
package space.kscience.maps.svg
import androidx.compose.runtime.Composable
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp

View File

@ -36,6 +36,7 @@ public class AttributesSerializer(
override val content: Map<out Attribute<*>, Any?> = attributeMap
override fun toString(): String = "Attributes(value=${content.entries})"
override fun equals(other: Any?): Boolean = other is Attributes && Attributes.equals(this, other)
override fun hashCode(): Int = content.hashCode()
}
}
@ -69,6 +70,3 @@ public abstract class SerializableAttribute<T>(
}
public object NameAttribute : SerializableAttribute<String>("name", String.serializer())
public fun Attributes.Companion.equals(a1: Attributes, a2: Attributes): Boolean =
a1.keys == a2.keys && a1.keys.all { a1[it] == a2[it] }