Slide 19
Slide 19 text
3. ࠲ඪܥͷ͓
ͬ͟ͱ֓ཁ
class LatLng extends Point {
const LatLng(this.lat, this.lon)
: super(lat, lon);
final double lat;
final double lon;
}
class GlobalPoint extends Point {
const GlobalPoint(super.x, super.y);
factory GlobalPoint.fromLatlng(
LatLng latLng,
Projection proj
)
=
>
proj.project(latLng);
LatLng toLatLng(Projection proj)
=
>
proj.unproject(this);
}
ը໘࠲ඪ
-PDBM
GlobalPoint(35,135)
Ңܦ
LatLng(35,135)
Ө࠲ඪ
GlobalPoint(224.0, 101.4010)
class WebMercatorProjection implements Projection {
static const int tileSize = 256;
static const pixelsPerLonDegree = tileSize / 360;
static const pixelsPerLonRadian = tileSize / (2 * math.pi);
static const origin = Offset(128, 128);
@override
GlobalPoint project(LatLng latLng) {
final siny = math.min(
math.max(
math.sin(latLng.lat * (math.pi / 180)),
-0.9999,
),
0.9999,
);
return GlobalPoint(
origin.dx + latLng.lon * pixelsPerLonDegree,
origin.dy + 0.5 * math.log((1 + siny) / (1 - siny)) * -pixelsPerLonRadian,
);
}
@override
LatLng unproject(GlobalPoint point) {
final lng = point.x - origin.dx / pixelsPerLonDegree;
final latRadians = (point.y - origin.dy) / -pixelsPerLonRadian;
final lat =
180 / math.pi * (2 * math.atan(math.exp(latRadians)) - math.pi / 2);
return LatLng(lat, lng);
}
}
WebϝϧΧτϧਤ๏Λ༻͍ͯӨ