Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions lib/api/model/report/earthquake_report.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import 'package:collection/collection.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:maplibre_gl/maplibre_gl.dart';
import 'package:timezone/timezone.dart';

import 'package:dpip/api/model/report/area_intensity.dart';
import 'package:dpip/utils/extensions/latlng.dart';
import 'package:dpip/utils/geojson.dart';
import 'package:dpip/utils/map_utils.dart';
import 'package:dpip/utils/parser.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:maplibre_gl/maplibre_gl.dart';
import 'package:timezone/timezone.dart';

part 'earthquake_report.g.dart';

Expand Down Expand Up @@ -203,7 +205,7 @@ class EarthquakeReport {
.toList();
final cross =
GeoJsonFeatureBuilder(GeoJsonFeatureType.Point)
..setGeometry(latlng.toGeoJsonCoordinates())
..setGeometry(latlng.asGeoJsonCooridnate)
..setProperty('icon', 'cross-7')
..setProperty('magnitude', magnitude);

Expand Down
9 changes: 6 additions & 3 deletions lib/api/model/report/partial_earthquake_report.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
import 'package:dpip/utils/geojson.dart';
import 'package:dpip/utils/parser.dart';
import 'package:flutter/material.dart';

import 'package:json_annotation/json_annotation.dart';
import 'package:maplibre_gl/maplibre_gl.dart';
import 'package:timezone/timezone.dart';

import 'package:dpip/utils/extensions/latlng.dart';
import 'package:dpip/utils/geojson.dart';
import 'package:dpip/utils/parser.dart';

part 'partial_earthquake_report.g.dart';

@JsonSerializable()
Expand Down Expand Up @@ -163,7 +166,7 @@ class PartialEarthquakeReport {
GeoJsonFeatureBuilder toGeoJsonFeature() {
return GeoJsonFeatureBuilder(GeoJsonFeatureType.Point)
.setId(time.millisecondsSinceEpoch)
.setGeometry(latlng.toGeoJsonCoordinates())
.setGeometry(latlng.asGeoJsonCooridnate)
.setProperty('icon', 'cross-$intensity')
.setProperty('magnitude', magnitude)
.setProperty('intensity', intensity)
Expand Down
6 changes: 4 additions & 2 deletions lib/api/model/rts/rts.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import 'package:json_annotation/json_annotation.dart';

import 'package:dpip/api/model/rts/rts_intensity.dart';
import 'package:dpip/api/model/rts/rts_station.dart';
import 'package:dpip/core/providers.dart';
import 'package:dpip/utils/extensions/latlng.dart';
import 'package:dpip/utils/geojson.dart';
import 'package:json_annotation/json_annotation.dart';

part 'rts.g.dart';

Expand Down Expand Up @@ -38,7 +40,7 @@ class Rts {
}

return GeoJsonFeatureBuilder(GeoJsonFeatureType.Point)
..setGeometry(latlng.toGeoJsonCoordinates())
..setGeometry(latlng.asGeoJsonCooridnate)
..setProperty('id', id)
..setProperty('I', s.I)
..setProperty('i', s.i)
Expand Down
10 changes: 6 additions & 4 deletions lib/api/model/station_intensity.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import 'package:dpip/utils/geojson.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:maplibre_gl/maplibre_gl.dart';

import 'package:dpip/utils/extensions/latlng.dart';
import 'package:dpip/utils/geojson.dart';

part 'station_intensity.g.dart';

@JsonSerializable()
Expand All @@ -25,8 +27,8 @@ class StationIntensity {
Map<String, dynamic> toJson() => _$StationIntensityToJson(this);

GeoJsonFeatureBuilder toGeoJsonFeature() {
return GeoJsonFeatureBuilder(
GeoJsonFeatureType.Point,
).setGeometry(latlng.toGeoJsonCoordinates()).setProperty('icon', 'intensity-$intensity');
return GeoJsonFeatureBuilder(GeoJsonFeatureType.Point)
..setGeometry(latlng.asGeoJsonCooridnate)
..setProperty('icon', 'intensity-$intensity');
}
}
8 changes: 5 additions & 3 deletions lib/api/model/weather/rain.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import 'package:dpip/utils/geojson.dart';
import 'package:dpip/widgets/map/latlng_altitude.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:maplibre_gl/maplibre_gl.dart';

import 'package:dpip/utils/extensions/latlng.dart';
import 'package:dpip/utils/geojson.dart';
import 'package:dpip/widgets/map/latlng_altitude.dart';

part 'rain.g.dart';

@JsonSerializable()
Expand All @@ -21,7 +23,7 @@ class RainStation {

GeoJsonFeatureBuilder toFeatureBuilder() =>
GeoJsonFeatureBuilder(GeoJsonFeatureType.Point)
..setGeometry(station.latlng.toGeoJsonCoordinates())
..setGeometry(station.latlng.asGeoJsonCooridnate)
..setProperty('id', id)
..setProperty('name', station.name)
..setProperty('county', station.county)
Expand Down
6 changes: 4 additions & 2 deletions lib/api/model/weather/weather.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import 'package:dpip/utils/geojson.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:maplibre_gl/maplibre_gl.dart';

import 'package:dpip/utils/extensions/latlng.dart';
import 'package:dpip/utils/geojson.dart';

part 'weather.g.dart';

@JsonSerializable()
Expand All @@ -25,7 +27,7 @@ class WeatherStation {
GeoJsonFeatureBuilder toFeatureBuilder() {
final direction = (data.wind.direction + 180) % 360;
return GeoJsonFeatureBuilder(GeoJsonFeatureType.Point)
.setGeometry(station.latlng.toGeoJsonCoordinates())
.setGeometry(station.latlng.asGeoJsonCooridnate)
.setProperty('id', id)
.setProperty('name', station.name)
.setProperty('county', station.county)
Expand Down
13 changes: 12 additions & 1 deletion lib/app/map/_lib/managers/monitor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -289,8 +289,19 @@ class MonitorMapLayerManager extends MapLayerManager {
textHaloColor: colors.outlineVariant.toHexStringRGB(),
textHaloWidth: 1,
textFont: ['Noto Sans TC Regular'],
textOffset: [0, 1],
textRadialOffset: 1.5,
textAnchor: 'top',
textJustify: 'auto',
textVariableAnchor: [
'top',
'bottom',
'left',
'right',
'top-left',
'bottom-left',
'top-right',
'bottom-right',
],
visibility: visible ? 'visible' : 'none',
);

Expand Down
28 changes: 2 additions & 26 deletions lib/core/rts.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import 'package:dpip/api/model/eew.dart';
import 'package:dpip/api/model/station_info.dart';
import 'package:dpip/utils/extensions/latlng.dart';
import 'package:intl/intl.dart';
import 'package:maplibre_gl/maplibre_gl.dart';

import 'package:dpip/api/model/station_info.dart';

StationInfo findAppropriateItem(List<StationInfo> infos, int date) {
final DateTime targetDate = (date == 0) ? DateTime.now() : DateTime.fromMillisecondsSinceEpoch(date);
Expand All @@ -16,25 +14,3 @@ StationInfo findAppropriateItem(List<StationInfo> infos, int date) {

return sortedItems.last;
}

bool checkBoxSkip(Map<String, Eew> eewLastInfo, Map<String, double> eewDist, List box) {
bool passed = false;

for (final eew in eewLastInfo.keys) {
int skip = 0;
for (int i = 0; i < 4; i++) {
final dist = LatLng(
eewLastInfo[eew]!.info.latitude,
eewLastInfo[eew]!.info.longitude,
).to(LatLng(box[i][1], box[i][0]));

if (eewDist[eew]! > dist) skip++;
}
if (skip >= 4) {
passed = true;
break;
}
}

return passed;
}
17 changes: 14 additions & 3 deletions lib/models/data.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'dart:async';
import 'dart:collection';
import 'dart:math';

import 'package:flutter/material.dart';

Expand All @@ -16,6 +17,7 @@ import 'package:dpip/api/model/weather/rain.dart';
import 'package:dpip/api/model/weather/weather.dart';
import 'package:dpip/core/eew.dart';
import 'package:dpip/global.dart';
import 'package:dpip/utils/extensions/latlng.dart';
import 'package:dpip/utils/geojson.dart';
import 'package:dpip/utils/log.dart';
import 'package:dpip/utils/map_utils.dart';
Expand Down Expand Up @@ -286,9 +288,18 @@ class DpipDataModel extends _DpipDataModel {

for (final MapEntry(key: id, value: s) in station.entries) {
if (s.work == false) continue;

final coordinates = s.info.last.latlng.asGeoJsonCooridnate;

// Create displaced coordinates with ~5 meter random offset
final random = Random();
final offsetLng = (random.nextDouble() - 0.5) * 0.00009; // ~5m longitude offset
final offsetLat = (random.nextDouble() - 0.5) * 0.00009; // ~5m latitude offset
final displacedCoordinates = [coordinates[0] + offsetLng, coordinates[1] + offsetLat];

final feature =
GeoJsonFeatureBuilder(GeoJsonFeatureType.Point)
..setGeometry(s.info.last.latlng.toGeoJsonCoordinates() as List<dynamic>)
..setGeometry(displacedCoordinates)
..setId(int.parse(id))
..setProperty('id', id)
..setProperty('net', s.net)
Expand Down Expand Up @@ -338,7 +349,7 @@ class DpipDataModel extends _DpipDataModel {

final epicenter =
GeoJsonFeatureBuilder(GeoJsonFeatureType.Point)
..setGeometry(e.info.latlng.toGeoJsonCoordinates() as List<dynamic>)
..setGeometry(e.info.latlng.asGeoJsonCooridnate)
..setProperty('type', 'x');

builder.addFeature(epicenter);
Expand All @@ -355,7 +366,7 @@ class DpipDataModel extends _DpipDataModel {
if (s.work == false) continue;
final feature =
GeoJsonFeatureBuilder(GeoJsonFeatureType.Point)
..setGeometry(s.info.last.latlng.toGeoJsonCoordinates() as List<dynamic>)
..setGeometry(s.info.last.latlng.asGeoJsonCooridnate)
..setId(int.parse(id))
..setProperty('net', s.net)
..setProperty('code', s.info.last.code);
Expand Down
3 changes: 2 additions & 1 deletion lib/route/report/report.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import 'package:dpip/core/eew.dart';
import 'package:dpip/route/report/report_sheet_content.dart';
import 'package:dpip/utils/extensions/build_context.dart';
import 'package:dpip/utils/extensions/color_scheme.dart';
import 'package:dpip/utils/extensions/latlng.dart';
import 'package:dpip/utils/geojson.dart';
import 'package:dpip/utils/intensity_color.dart';
import 'package:dpip/utils/log.dart';
Expand Down Expand Up @@ -96,7 +97,7 @@ class _ReportRouteState extends State<ReportRoute> with TickerProviderStateMixin
'properties': {
'intensity': 10, // 10 is for classifying epicenter cross
},
'geometry': {'coordinates': data.latlng.toGeoJsonCoordinates(), 'type': 'Point'},
'geometry': {'coordinates': data.latlng.asGeoJsonCooridnate, 'type': 'Point'},
});

expandBounds(bounds, data.latlng);
Expand Down
4 changes: 3 additions & 1 deletion lib/utils/extensions/latlng.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@ import 'package:dpip/utils/geojson.dart';
extension GeoJsonLatLng on LatLng {
bool get isValid => latitude != 0 && longitude != 0;

List<double> get asGeoJsonCooridnate => [longitude, latitude];

GeoJsonFeatureBuilder toFeatureBuilder() {
return GeoJsonFeatureBuilder(GeoJsonFeatureType.Point)..setGeometry(toGeoJsonCoordinates() as List<dynamic>);
return GeoJsonFeatureBuilder(GeoJsonFeatureType.Point)..setGeometry(asGeoJsonCooridnate);
}

/// Calculates the distance between the supplied coordinates in meters. The distance between the coordinates is
Expand Down
8 changes: 4 additions & 4 deletions lib/utils/map_utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ Map<String, dynamic> circle(LatLng center, double radius, {int steps = 64, Units

for (var i = 0; i < steps; i++) {
final point = destination(center, radius, (i * -360) / steps, units: units);
coordinates.add(point.toGeoJsonCoordinates());
coordinates.add(point.asGeoJsonCooridnate);
}

coordinates.add(coordinates[0]);
Expand All @@ -154,19 +154,19 @@ GeoJsonFeatureBuilder circleFeature({
}) {
// main
final polygon = GeoJsonFeatureBuilder(GeoJsonFeatureType.Polygon);
final List coordinates = [];
final List<List<double>> coordinates = [];

for (var i = 0; i < steps; i++) {
final point = destination(center, radius, (i * -360) / steps, units: units);
coordinates.add(point.toGeoJsonCoordinates());
coordinates.add(point.asGeoJsonCooridnate);
}

coordinates.add(coordinates[0]);

return polygon.setGeometry(coordinates);
}

bool checkBoxSkip(Map<String, Eew> eewLastInfo, Map<String, double> eewDist, List box) {
bool checkBoxSkip(Map<String, Eew> eewLastInfo, Map<String, double> eewDist, List<List<double>> box) {
bool passed = false;

for (final eew in eewLastInfo.keys) {
Expand Down
2 changes: 1 addition & 1 deletion lib/widgets/map/map.dart
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,7 @@ class DpipMapState extends State<DpipMap> {
final double adjustedZoomValue = adjustedZoom(widget.initialCameraPosition.zoom);

return MapLibreMap(
minMaxZoomPreference: widget.minMaxZoomPreference ?? const MinMaxZoomPreference(4, 15),
minMaxZoomPreference: widget.minMaxZoomPreference ?? const MinMaxZoomPreference(4, 12.5),
trackCameraPosition: true,
initialCameraPosition: CameraPosition(target: widget.initialCameraPosition.target, zoom: adjustedZoomValue),
styleString: styleAbsoluteFilePath!,
Expand Down
Loading