यह C # कोड है जो मैं शंकुधारी में उपयोग करता हूं :
public void ZoomToArea (Bounds2 mapArea, float paddingFactor)
{
double ry1 = Math.Log((Math.Sin(GeometryUtils.Deg2Rad(mapArea.MinY)) + 1)
/ Math.Cos(GeometryUtils.Deg2Rad(mapArea.MinY)));
double ry2 = Math.Log((Math.Sin(GeometryUtils.Deg2Rad(mapArea.MaxY)) + 1)
/ Math.Cos(GeometryUtils.Deg2Rad(mapArea.MaxY)));
double ryc = (ry1 + ry2) / 2;
double centerY = GeometryUtils.Rad2Deg(Math.Atan(Math.Sinh(ryc)));
double resolutionHorizontal = mapArea.DeltaX / Viewport.Width;
double vy0 = Math.Log(Math.Tan(Math.PI*(0.25 + centerY/360)));
double vy1 = Math.Log(Math.Tan(Math.PI*(0.25 + mapArea.MaxY/360)));
double viewHeightHalf = Viewport.Height/2.0f;
double zoomFactorPowered = viewHeightHalf
/ (40.7436654315252*(vy1 - vy0));
double resolutionVertical = 360.0 / (zoomFactorPowered * 256);
double resolution = Math.Max(resolutionHorizontal, resolutionVertical)
* paddingFactor;
double zoom = Math.Log(360 / (resolution * 256), 2);
double lon = mapArea.Center.X;
double lat = centerY;
CenterMapOnPoint(new PointD2(lon, lat), zoom);
}
mapArea
: बाउंडिंग बॉक्स लंबे / लम्बे कोर्ड्स में (x = लंबा, y = lat)
paddingFactor
: इसका उपयोग "120%" प्रभाव प्राप्त करने के लिए किया जा सकता है, जिसका अर्थ है थॉम्स। 1.2 का मान आपको 120% मिलेगा।
ध्यान दें कि मेरे मामले में zoom
एक वास्तविक संख्या हो सकती है। वेब मैप्स के मामले में, आपको एक पूर्णांक ज़ूम मान की आवश्यकता होती है, इसलिए आपको (int)Math.Floor(zoom)
इसे प्राप्त करने के लिए कुछ का उपयोग करना चाहिए ।
बेशक, यह कोड केवल वेब मर्केटर प्रोजेक्शन पर लागू होता है।