refactor(vtk): GeoLocalFrame 就地 reanchor + 帘面重锚改就地(共享 frame 一致,供底图等同源对齐)
This commit is contained in:
parent
8684e52939
commit
c06f9ea0f8
|
|
@ -88,7 +88,8 @@ void VtkSceneView::addCurtain(const geopro::core::Grid& grid, const geopro::core
|
||||||
la0 = std::min(la0, grid.lat[i]); la1 = std::max(la1, grid.lat[i]);
|
la0 = std::min(la0, grid.lat[i]); la1 = std::max(la1, grid.lat[i]);
|
||||||
lo0 = std::min(lo0, grid.lon[i]); lo1 = std::max(lo1, grid.lon[i]);
|
lo0 = std::min(lo0, grid.lon[i]); lo1 = std::max(lo1, grid.lon[i]);
|
||||||
}
|
}
|
||||||
frame_ = std::make_shared<geopro::core::GeoLocalFrame>((la0 + la1) / 2.0, (lo0 + lo1) / 2.0);
|
// 就地重锚共享 frame(不换对象)→ 同持此 frame 的底图层等随即一致对齐。
|
||||||
|
frame_->reanchor((la0 + la1) / 2.0, (lo0 + lo1) / 2.0);
|
||||||
frameAnchoredToData_ = true;
|
frameAnchoredToData_ = true;
|
||||||
}
|
}
|
||||||
auto curtain = geopro::render::buildCurtain(grid, cs, *frame_);
|
auto curtain = geopro::render::buildCurtain(grid, cs, *frame_);
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,13 @@ GeoLocalFrame::GeoLocalFrame(double lat0, double lon0)
|
||||||
mPerDegLon_(kMetersPerDegLonEquator * std::cos(lat0 * kPi / 180.0)),
|
mPerDegLon_(kMetersPerDegLonEquator * std::cos(lat0 * kPi / 180.0)),
|
||||||
mPerDegLat_(kMetersPerDegLat) {}
|
mPerDegLat_(kMetersPerDegLat) {}
|
||||||
|
|
||||||
|
void GeoLocalFrame::reanchor(double lat0, double lon0) {
|
||||||
|
lat0_ = lat0;
|
||||||
|
lon0_ = lon0;
|
||||||
|
mPerDegLon_ = kMetersPerDegLonEquator * std::cos(lat0 * kPi / 180.0);
|
||||||
|
// mPerDegLat_ 为常数,无需更新。
|
||||||
|
}
|
||||||
|
|
||||||
LocalXY GeoLocalFrame::toLocal(double lat, double lon) const {
|
LocalXY GeoLocalFrame::toLocal(double lat, double lon) const {
|
||||||
return LocalXY{(lon - lon0_) * mPerDegLon_, (lat - lat0_) * mPerDegLat_};
|
return LocalXY{(lon - lon0_) * mPerDegLon_, (lat - lat0_) * mPerDegLat_};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,8 @@ struct LatLon { double lat, lon; };
|
||||||
class GeoLocalFrame {
|
class GeoLocalFrame {
|
||||||
public:
|
public:
|
||||||
GeoLocalFrame(double lat0, double lon0);
|
GeoLocalFrame(double lat0, double lon0);
|
||||||
|
// 就地改原点(不换对象):所有持有此共享 frame 的渲染层(帘面/底图/坐标轴)随即一致重定位。
|
||||||
|
void reanchor(double lat0, double lon0);
|
||||||
LocalXY toLocal(double lat, double lon) const; // -> (x East m, y North m)
|
LocalXY toLocal(double lat, double lon) const; // -> (x East m, y North m)
|
||||||
// toLocal 的反算:局部米 (x East, y North) -> 经纬度。
|
// toLocal 的反算:局部米 (x East, y North) -> 经纬度。
|
||||||
// lon = lon0 + x/mPerDegLon,lat = lat0 + y/mPerDegLat(坐标轴经纬度刻度用)。
|
// lon = lon0 + x/mPerDegLon,lat = lat0 + y/mPerDegLat(坐标轴经纬度刻度用)。
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue