Exemple #1
0
    private void UpdateMapBounds()
    {
        // Convert view bounds (in Unity units) to tile ids
        int northId = anchor.Y - Mathf.CeilToInt((viewBounds.yMax - anchorOffsetInUnits.y) * unitsToTiles + verticalBuffer);
        int southId = anchor.Y - Mathf.FloorToInt((viewBounds.yMin - anchorOffsetInUnits.y) * unitsToTiles - verticalBuffer);
        int westId  = anchor.X + Mathf.FloorToInt((viewBounds.xMin - anchorOffsetInUnits.x) * unitsToTiles - horizontalBuffer);
        int eastId  = anchor.X + Mathf.CeilToInt((viewBounds.xMax - anchorOffsetInUnits.x) * unitsToTiles + horizontalBuffer);

        mapTileBounds.Set(northId, southId, westId, eastId);

        // Update coordinate bounds (in degrees)
        var offsetMeters = GeoCalculator.RelativePixelsToMeters(viewBounds.xMax * unitsToPixels, viewBounds.yMax * unitsToPixels, zoomLevel);
        var LonLat       = GeoCalculator.MetersToLonLat(currentMeters + offsetMeters);

        mapCoordBounds.east  = LonLat.Longitude;
        mapCoordBounds.north = LonLat.Latitude;
        offsetMeters         = GeoCalculator.RelativePixelsToMeters(viewBounds.xMin * unitsToPixels, viewBounds.yMin * unitsToPixels, zoomLevel);
        LonLat = GeoCalculator.MetersToLonLat(currentMeters + offsetMeters);
        mapCoordBounds.west  = LonLat.Longitude;
        mapCoordBounds.south = LonLat.Latitude;

        if (OnBoundsChange != null)
        {
            OnBoundsChange();
        }
    }
    private static Coordinate CalcActiveSiteCenter()
    {
        var bounds = GetActiveSiteAreaBounds();
        var max    = GeoCalculator.LonLatToMeters(bounds.east, bounds.north);
        var min    = GeoCalculator.LonLatToMeters(bounds.west, bounds.south);
        var center = GeoCalculator.MetersToLonLat((min.x + max.x) * 0.5, (min.y + max.y) * 0.5);

        return(center);
    }
    void OnGUI()
    {
        GUILayout.Label("Absolute longitude/latitude to meters", EditorStyles.boldLabel);
        ShowLonLatFields(ref all2mX, ref all2mY);
        ShowResultMeters(GeoCalculator.LonLatToMeters(all2mX, all2mY));

        EditorGUILayout.Space();

        GUILayout.Label("Absolute meters to longitude/latitude", EditorStyles.boldLabel);
        m2llX = EditorGUILayout.FloatField("Meters X", m2llX);
        m2llY = EditorGUILayout.FloatField("Meters Y", m2llY);
        ShowResultLonLat(GeoCalculator.MetersToLonLat(m2llX, m2llX));

        EditorGUILayout.Space();

        GUILayout.Label("Absolute pixels to meters", EditorStyles.boldLabel);
        ShowPixelFields(ref ap2mX, ref ap2mY, ref ap2mZ);
        ShowResultMeters(GeoCalculator.AbsolutePixelsToMeters(ap2mX, ap2mY, ap2mZ));

        EditorGUILayout.Space();

        GUILayout.Label("Relative pixels to meters", EditorStyles.boldLabel);
        ShowPixelFields(ref rp2mX, ref rp2mY, ref rp2mZ);
        ShowResultMeters(GeoCalculator.RelativePixelsToMeters(rp2mX, rp2mY, rp2mZ));

        EditorGUILayout.Space();

        GUILayout.Label("Absolute meters to pixels", EditorStyles.boldLabel);
        ShowMeterFields(ref am2pX, ref am2pY, ref am2pZ);
        ShowResultPixels(GeoCalculator.AbsoluteMetersToPixels(am2pX, am2pY, am2pZ));

        EditorGUILayout.Space();

        GUILayout.Label("Relative meters to pixels", EditorStyles.boldLabel);
        ShowMeterFields(ref rm2pX, ref rm2pY, ref rm2pZ);
        ShowResultPixels(GeoCalculator.RelativeMetersToPixels(rm2pX, rm2pY, rm2pZ));

        EditorGUILayout.Space();

        GUILayout.Label("Absolute longitude/latitude to tile", EditorStyles.boldLabel);
        ShowLonLatFields(ref all2tX, ref all2tY, ref all2tZ);
        ShowResultTile(GeoCalculator.AbsoluteCoordinateToTile(all2tX, all2tY, all2tZ));

        EditorGUILayout.Space();

        GUILayout.Label("Absolute tile to longitude/latitude", EditorStyles.boldLabel);
        ShowTileFields(ref at2llX, ref at2llY, ref at2llZ);
        ShowResultLonLat(GeoCalculator.AbsoluteTileToCoordinate(at2llX, at2llY, at2llZ));
    }
Exemple #4
0
    private void GoToSite(Site site)
    {
        var bounds = site.bounds;

        if (bounds.east > bounds.west && bounds.north > bounds.south)
        {
            var max    = GeoCalculator.LonLatToMeters(bounds.east, bounds.north);
            var min    = GeoCalculator.LonLatToMeters(bounds.west, bounds.south);
            var center = GeoCalculator.MetersToLonLat((min.x + max.x) * 0.5, (min.y + max.y) * 0.5);

            map.SetCenter(center.Longitude, center.Latitude);
            map.ZoomToBounds(bounds, site != defaultSite);
        }
        else
        {
            map.SetCenter(0, 0);
            map.SetZoom(map.minZoomLevel);
        }
    }
Exemple #5
0
 public Coordinate GetCoordinatesFromUnits(float x, float y)
 {
     return(GeoCalculator.MetersToLonLat(currentMeters.x + x * unitsToMeters, currentMeters.y + y * unitsToMeters));
 }