Exemple #1
0
    protected OnlineMapsGooglePlacesAutocomplete(string input, string key, string types, int offset, Vector2 lnglat, int radius, string language, string components)
    {
        _status = OnlineMapsQueryStatus.downloading;

        StringBuilder url = new StringBuilder("https://maps.googleapis.com/maps/api/place/autocomplete/xml?sensor=false");

        url.Append("&input=").Append(OnlineMapsWWW.EscapeURL(input));
        url.Append("&key=").Append(key);

        if (lnglat != default(Vector2))
        {
            url.AppendFormat("&location={0},{1}", lnglat.y, lnglat.x);
        }
        if (radius != -1)
        {
            url.Append("&radius=").Append(radius);
        }
        if (offset != -1)
        {
            url.Append("&offset=").Append(offset);
        }
        if (!string.IsNullOrEmpty(types))
        {
            url.Append("&types=").Append(types);
        }
        if (!string.IsNullOrEmpty(components))
        {
            url.Append("&components=").Append(components);
        }
        if (!string.IsNullOrEmpty(language))
        {
            url.Append("&language=").Append(language);
        }

        www             = OnlineMapsUtils.GetWWW(url);
        www.OnComplete += OnRequestComplete;
    }
    protected OnlineMapsGoogleDirections(string origin, string destination, bool alternatives = false)
    {
        _status = OnlineMapsQueryStatus.downloading;
        StringBuilder url = new StringBuilder();

        url.AppendFormat("https://maps.googleapis.com/maps/api/directions/xml?origin={0}&destination={1}&sensor=false", OnlineMapsWWW.EscapeURL(origin), OnlineMapsWWW.EscapeURL(destination));
        if (alternatives)
        {
            url.Append("&alternatives=true");
        }
        www             = OnlineMapsUtils.GetWWW(url);
        www.OnComplete += OnRequestComplete;
    }
Exemple #3
0
    private void OnElevationRequestComplete(OnlineMapsWWW www)
    {
        elevationRequest = null;
        if (www.hasError)
        {
            Debug.Log(www.error);
            return;
        }

        string response = www.text;

        try
        {
            bool isFirstResponse = false;

            SavePrevValues();

            if (elevationData == null)
            {
                elevationData   = new short[elevationDataResolution, elevationDataResolution];
                isFirstResponse = true;
            }

            int dataIndex = response.IndexOf("\"data\":[");
            if (dataIndex == -1)
            {
                if (isFirstResponse)
                {
                    elevationX1 = elevationRequestX1;
                    elevationY1 = elevationRequestY1;
                    elevationW  = elevationRequestW;
                    elevationH  = elevationRequestH;
                    SavePrevValues();
                    elevationDataWidth  = elevationDataResolution;
                    elevationDataHeight = elevationDataResolution;
                }
                Debug.LogWarning(response);
                if (OnElevationFails != null)
                {
                    OnElevationFails(response);
                }

                return;
            }
            dataIndex += 8;

            int  index      = 0;
            int  v          = 0;
            bool isNegative = false;

            for (int i = dataIndex; i < response.Length; i++)
            {
                char c = response[i];
                if (c == ',')
                {
                    int x = index % elevationDataResolution;
                    int y = elevationDataResolution - index / elevationDataResolution - 1;
                    if (isNegative)
                    {
                        v = -v;
                    }
                    elevationData[x, y] = (short)v;
                    v          = 0;
                    isNegative = false;
                    index++;
                }
                else if (c == '-')
                {
                    isNegative = true;
                }
                else if (c > 47 && c < 58)
                {
                    v = v * 10 + (c - 48);
                }
                else
                {
                    break;
                }
            }

            if (isNegative)
            {
                v = -v;
            }
            elevationData[elevationDataResolution - 1, 0] = (short)v;

            elevationX1         = elevationRequestX1;
            elevationY1         = elevationRequestY1;
            elevationW          = elevationRequestW;
            elevationH          = elevationRequestH;
            elevationDataWidth  = elevationDataResolution;
            elevationDataHeight = elevationDataResolution;

            UpdateMinMax();
            if (OnElevationUpdated != null)
            {
                OnElevationUpdated();
            }

            control.UpdateControl();
        }
        catch (Exception exception)
        {
            Debug.Log(exception.Message + exception.StackTrace);
            if (OnElevationFails != null)
            {
                OnElevationFails(exception.Message);
            }
        }
        map.Redraw();
    }
Exemple #4
0
 public override void CancelCurrentElevationRequest()
 {
     waitSetElevationData = false;
     elevationRequest     = null;
 }
Exemple #5
0
    private OnlineMapsFindDirection(string origin, string destination, bool alternatives = false)
    {
        _status = OnlineMapsQueryStatus.downloading;
        StringBuilder url = new StringBuilder();

        url.AppendFormat("https://maps.googleapis.com/maps/api/directions/xml?origin={0}&destination={1}&sensor=false", OnlineMapsWWW.EscapeURL(origin), OnlineMapsWWW.EscapeURL(destination));
        if (alternatives)
        {
            url.Append("&alternatives=true");
        }
        www = OnlineMapsUtils.GetWWW(url);
        OnlineMaps.instance.AddGoogleAPIQuery(this);
    }
Exemple #6
0
    private OnlineMapsBingMapsLocation(string query, string key, int maxResults, bool includeNeighborhood)
    {
        _status = OnlineMapsQueryStatus.downloading;
        StringBuilder url = new StringBuilder();

        url.AppendFormat("https://dev.virtualearth.net/REST/v1/Locations/{0}?key={1}&o=xml", OnlineMapsWWW.EscapeURL(query), key);
        if (includeNeighborhood)
        {
            url.Append("&inclnb=1");
        }
        if (maxResults > 0 && maxResults != 5)
        {
            url.Append("&maxRes=").Append(maxResults);
        }
        www             = OnlineMapsUtils.GetWWW(url);
        www.OnComplete += OnRequestComplete;
    }
    private OnlineMapsGoogleRoads(string key, IEnumerable path, Units units = Units.KPH)
    {
        StringBuilder builder = new StringBuilder("https://roads.googleapis.com/v1/speedLimits?key=").Append(key);

        if (units != Units.KPH)
        {
            builder.Append("&units=MPH");
        }

        int    type      = -1;
        int    i         = -1;
        double latitude  = 0;
        double longitude = 0;
        bool   isFirst   = true;

        foreach (object p in path)
        {
            i++;
            if (type == -1)
            {
                if (p is double)
                {
                    type = 0;
                }
                else if (p is float)
                {
                    type = 1;
                }
                else if (p is Vector2)
                {
                    type = 2;
                }
                else if (p is string)
                {
                    type = 3;
                }
                else
                {
                    throw new Exception("Unknown type of points. Must be IEnumerable<double>, IEnumerable<float>, IEnumerable<Vector2> or IEnumerable<string>.");
                }
            }

            if (type == 0 || type == 1)
            {
                if (i % 2 == 1)
                {
                    if (type == 0)
                    {
                        latitude = (double)p;
                    }
                    else
                    {
                        latitude = (float)p;
                    }
                }
                else
                {
                    if (type == 0)
                    {
                        longitude = (double)p;
                    }
                    else
                    {
                        longitude = (float)p;
                    }
                    continue;
                }
            }
            else if (type == 2)
            {
                Vector2 v = (Vector2)p;
                longitude = v.x;
                latitude  = v.y;
            }

            if (type < 3)
            {
                if (isFirst)
                {
                    builder.Append("&path=");
                    isFirst = false;
                }
                else
                {
                    builder.Append("|");
                }

                builder.Append(latitude).Append(",").Append(longitude);
            }
            else
            {
                builder.Append("&placeId=").Append((string)p);
            }
        }

        www             = new OnlineMapsWWW(builder);
        www.OnComplete += OnRequestComplete;
    }
Exemple #8
0
    private OnlineMapsQQSearch(string key, string keyword, Params p)
    {
        if (string.IsNullOrEmpty(key))
        {
            key = OnlineMapsKeyManager.QQ();
        }

        StringBuilder builder = new StringBuilder("http://apis.map.qq.com/ws/place/v1/search?key=").Append(key).Append("&keyword=").Append(OnlineMapsWWW.EscapeURL(keyword));

        p.AppendParams(builder);
        www             = new OnlineMapsWWW(builder);
        www.OnComplete += OnRequestComplete;
    }
    private void Update()
    {
        if (api == null)
        {
            api = OnlineMaps.instance;
            if (api == null)
            {
                return;
            }
        }

        try
        {
            if (!started)
            {
#if !UNITY_EDITOR
                if (!Input.location.isEnabledByUser)
                {
                    return;
                }

                Input.compass.enabled = true;
                Input.location.Start(desiredAccuracy, updateDistance);
#endif
                started = true;
            }

#if !UNITY_EDITOR
            useGPSEmulator = false;
#endif
            bool positionChanged = false;

            if (findByIPRequest != null && findByIPRequest.isDone)
            {
                if (string.IsNullOrEmpty(findByIPRequest.error))
                {
                    string response = findByIPRequest.text;
                    Match  latMath  = Regex.Match(response, "geoplugin_latitude\";.*?\"(\\d*\\.\\d*)\"");
                    Match  lngMath  = Regex.Match(response, "geoplugin_longitude\";.*?\"(\\d*\\.\\d*)\"");

                    if (latMath.Success && lngMath.Success)
                    {
                        float lng = float.Parse(lngMath.Groups[1].Value);
                        float lat = float.Parse(latMath.Groups[1].Value);

                        if (useGPSEmulator)
                        {
                            emulatorPosition = new Vector2(lng, lat);
                        }
                        else if (position == Vector2.zero)
                        {
                            position        = new Vector2(lng, lat);
                            positionChanged = true;
                        }
                    }
                }
                findByIPRequest = null;
            }

            if (createMarkerInUserPosition && _marker == null && (useGPSEmulator || position != Vector2.zero))
            {
                UpdateMarker();
            }

            if (!useGPSEmulator && Input.location.status != LocationServiceStatus.Running)
            {
                return;
            }

            bool compassChanged = false;

#if !UNITY_EDITOR
            UpdateCompassFromInput(ref compassChanged);
#else
            if (useGPSEmulator)
            {
                UpdateCompassFromEmulator(ref compassChanged);
            }
            else
            {
                UpdateCompassFromInput(ref compassChanged);
            }
#endif

#if !UNITY_EDITOR
            UpdateSpeed();
            UpdatePositionFromInput(ref positionChanged);
#else
            if (useGPSEmulator)
            {
                UpdatePositionFromEmulator(ref positionChanged);
            }
            else
            {
                UpdatePositionFromInput(ref positionChanged);
            }
#endif

            if (positionChanged)
            {
                if (!isPositionInited)
                {
                    isPositionInited = true;
                    if (OnLocationInited != null)
                    {
                        OnLocationInited();
                    }
                }
                if (OnLocationChanged != null)
                {
                    OnLocationChanged(position);
                }
            }

            if (createMarkerInUserPosition && (positionChanged || compassChanged))
            {
                UpdateMarker();
            }

            if (updatePosition)
            {
                if (_allowUpdatePosition)
                {
                    UpdatePosition();
                }
                else if (restoreAfter > 0 && DateTime.Now.Ticks > lastPositionChangedTime + OnlineMapsUtils.second * restoreAfter)
                {
                    _allowUpdatePosition = true;
                    UpdatePosition();
                }
            }
        }
        catch /*(Exception exception)*/
        {
            //errorMessage = exception.Message + "\n" + exception.StackTrace;
        }
    }
Exemple #10
0
 private void OnInputLocationName(string locationName)
 {
     new OnlineMapsWWW(
         "http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/findAddressCandidates?f=pjson&address=" + OnlineMapsWWW.EscapeURL(locationName)
         ).OnComplete += OnGeocodeComplete;
 }
 public override void StartDownloadElevationTile(Tile tile)
 {
     string url = "https://api.mapbox.com/v4/mapbox.terrain-rgb/" + tile.zoom + "/" + tile.x + "/" + tile.y + ".pngraw?access_token=" + accessToken;
     OnlineMapsWWW www = new OnlineMapsWWW(url);
     www.OnComplete += delegate { OnTileDownloaded(tile, www); };
 }
    private OnlineMapsGoogleRoads(string key, IEnumerable path, bool interpolate)
    {
        if (string.IsNullOrEmpty(key))
        {
            key = OnlineMapsKeyManager.GoogleMaps();
        }

        StringBuilder builder = new StringBuilder("https://roads.googleapis.com/v1/snapToRoads?key=").Append(key);

        if (interpolate)
        {
            builder.Append("&intepolate=true");
        }
        builder.Append("&path=");

        int    type      = -1;
        int    i         = -1;
        double longitude = 0;
        bool   isFirst   = true;

        foreach (object p in path)
        {
            i++;
            if (type == -1)
            {
                if (p is double)
                {
                    type = 0;
                }
                else if (p is float)
                {
                    type = 1;
                }
                else if (p is Vector2)
                {
                    type = 2;
                }
                else
                {
                    throw new Exception("Unknown type of points. Must be IEnumerable<double>, IEnumerable<float> or IEnumerable<Vector2>.");
                }
            }

            double latitude;
            if (type == 0 || type == 1)
            {
                if (i % 2 == 1)
                {
                    if (type == 0)
                    {
                        latitude = (double)p;
                    }
                    else
                    {
                        latitude = (float)p;
                    }
                }
                else
                {
                    if (type == 0)
                    {
                        longitude = (double)p;
                    }
                    else
                    {
                        longitude = (float)p;
                    }
                    continue;
                }
            }
            else
            {
                Vector2 v = (Vector2)p;
                longitude = v.x;
                latitude  = v.y;
            }

            if (!isFirst)
            {
                builder.Append("|");
            }
            isFirst = false;
            builder.Append(latitude.ToString(OnlineMapsUtils.numberFormat)).Append(",")
            .Append(longitude.ToString(OnlineMapsUtils.numberFormat));
        }
        www             = new OnlineMapsWWW(builder);
        www.OnComplete += OnRequestComplete;
    }
 protected abstract void LoadTileFromWWW(OnlineMapsWWW www);
Exemple #14
0
    public static void CheckNewVersionAvailable()
    {
        if (EditorPrefs.HasKey(lastVersionKey))
        {
            lastVersionID = EditorPrefs.GetString(lastVersionKey);

            if (CompareVersions())
            {
                hasNewVersion = true;
                return;
            }
        }

        const long ticksInHour = 36000000000;

        if (EditorPrefs.HasKey(lastVersionCheckKey))
        {
            long lastVersionCheck = EditorPrefs.GetInt(lastVersionCheckKey) * ticksInHour;
            if (DateTime.Now.Ticks - lastVersionCheck < 24 * ticksInHour)
            {
                return;
            }
        }

        EditorPrefs.SetInt(lastVersionCheckKey, (int)(DateTime.Now.Ticks / ticksInHour));

        if (EditorPrefs.HasKey(channelKey))
        {
            channel = (OnlineMapsUpdateChannel)EditorPrefs.GetInt(channelKey);
        }
        else
        {
            channel = OnlineMapsUpdateChannel.stable;
        }

        if (channel == OnlineMapsUpdateChannel.stablePrevious)
        {
            channel = OnlineMapsUpdateChannel.stable;
        }

        WebClient client = new WebClient();

        client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
        client.UploadDataCompleted += delegate(object sender, UploadDataCompletedEventArgs response)
        {
            if (response.Error != null)
            {
                Debug.Log(response.Error.Message);
                return;
            }

            string version = Encoding.UTF8.GetString(response.Result);

            try
            {
                string[] vars  = version.Split(new[] { '.' });
                string[] vars2 = new string[4];
                while (vars[1].Length < 8)
                {
                    vars[1] += "0";
                }
                vars2[0] = vars[0];
                vars2[1] = int.Parse(vars[1].Substring(0, 2)).ToString();
                vars2[2] = int.Parse(vars[1].Substring(2, 2)).ToString();
                vars2[3] = int.Parse(vars[1].Substring(4)).ToString();

                version = string.Join(".", vars2);
            }
            catch (Exception)
            {
                Debug.Log("Automatic check for Online Maps updates: Bad response.");
                return;
            }

            lastVersionID = version;

            hasNewVersion             = CompareVersions();
            EditorApplication.update += SetLastVersion;
        };
        client.UploadDataAsync(new Uri("http://infinity-code.com/products_update/getlastversion.php"), "POST", Encoding.UTF8.GetBytes("c=" + (int)channel + "&package=" + OnlineMapsWWW.EscapeURL(packageID)));
    }
Exemple #15
0
    private string GetUpdateKey()
    {
        WebClient client = new WebClient();

        client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
        string updateKey = client.UploadString("http://infinity-code.com/products_update/getupdatekey.php",
                                               "key=" + invoiceNumber + "&package=" + OnlineMapsWWW.EscapeURL(packageID));

        return(updateKey);
    }
    private OnlineMapsGoogleDirections(Params p)
    {
        _status = OnlineMapsQueryStatus.downloading;

        StringBuilder url = new StringBuilder();

        url.Append("https://maps.googleapis.com/maps/api/directions/xml?sensor=false");
        url.Append("&origin=");

        if (p.origin is string)
        {
            url.Append(OnlineMapsWWW.EscapeURL(p.origin as string));
        }
        else if (p.origin is Vector2)
        {
            Vector2 o = (Vector2)p.origin;
            url.Append(o.y).Append(",").Append(o.x);
        }
        else
        {
            throw new Exception("Origin must be string or Vector2.");
        }

        url.Append("&destination=");

        if (p.destination is string)
        {
            url.Append(OnlineMapsWWW.EscapeURL(p.destination as string));
        }
        else if (p.destination is Vector2)
        {
            Vector2 d = (Vector2)p.destination;
            url.Append(d.y).Append(",").Append(d.x);
        }
        else
        {
            throw new Exception("Destination must be string or Vector2.");
        }

        if (p.mode.HasValue && p.mode.Value != Mode.driving)
        {
            url.Append("&mode=").Append(Enum.GetName(typeof(Mode), p.mode.Value));
        }
        if (p.waypoints != null)
        {
            StringBuilder waypointStr    = new StringBuilder();
            bool          isFirst        = true;
            int           countWaypoints = 0;
            foreach (object w in p.waypoints)
            {
                if (countWaypoints >= 8)
                {
                    Debug.LogWarning("The maximum number of waypoints is 8.");
                    break;
                }

                if (!isFirst)
                {
                    waypointStr = waypointStr.Append("|");
                }

                if (w is string)
                {
                    waypointStr.Append(OnlineMapsWWW.EscapeURL(w as string));
                }
                else if (w is Vector2)
                {
                    Vector2 v = (Vector2)w;
                    waypointStr.Append(v.y).Append(",").Append(v.x);
                }
                else
                {
                    throw new Exception("Waypoints must be string or Vector2.");
                }

                countWaypoints++;

                isFirst = false;
            }

            if (countWaypoints > 0)
            {
                url.Append("&waypoints=optimize:true|").Append(waypointStr);
            }
        }
        if (p.alternatives)
        {
            url.Append("&alternatives=true");
        }
        if (p.avoid.HasValue && p.avoid.Value != Avoid.none)
        {
            url.Append("&avoid=").Append(Enum.GetName(typeof(Avoid), p.avoid.Value));
        }
        if (p.units.HasValue && p.units.Value != Units.metric)
        {
            url.Append("&units=").Append(Enum.GetName(typeof(Units), p.units.Value));
        }
        if (!string.IsNullOrEmpty(p.region))
        {
            url.Append("&region=").Append(p.region);
        }
        if (p.departure_time != null)
        {
            url.Append("&departure_time=").Append(p.departure_time);
        }
        if (p.arrival_time.HasValue && p.arrival_time.Value > 0)
        {
            url.Append("&arrival_time=").Append(p.arrival_time.Value);
        }
        if (!string.IsNullOrEmpty(p.language))
        {
            url.Append("&language=").Append(p.language);
        }
        if (!string.IsNullOrEmpty(p.key))
        {
            url.Append("&key=").Append(p.key);
        }
        if (p.traffic_model.HasValue && p.traffic_model.Value != TrafficModel.bestGuess)
        {
            url.Append("&traffic_model=").Append(Enum.GetName(typeof(TrafficModel), p.traffic_model.Value));
        }
        if (p.transit_mode.HasValue)
        {
            OnlineMapsUtils.GetValuesFromEnum(url, "transit_mode", typeof(TransitMode), (int)p.transit_mode.Value);
        }
        if (p.transit_routing_preference.HasValue)
        {
            url.Append("&transit_routing_preference=").Append(Enum.GetName(typeof(TransitRoutingPreference), p.transit_routing_preference.Value));
        }

        www             = OnlineMapsUtils.GetWWW(url);
        www.OnComplete += OnRequestComplete;
    }
Exemple #17
0
    private OnlineMapsOSMNominatim(string query, string acceptlanguage, int limit, bool addressdetails)
    {
        _status = OnlineMapsQueryStatus.downloading;
        StringBuilder url = new StringBuilder("https://nominatim.openstreetmap.org/search?format=xml&q=").Append(OnlineMapsWWW.EscapeURL(query));

        if (addressdetails)
        {
            url.Append("&addressdetails=1");
        }
        if (limit > 0)
        {
            url.Append("&limit=").Append(limit);
        }
        if (!string.IsNullOrEmpty(acceptlanguage))
        {
            url.Append("&accept-language=").Append(acceptlanguage);
        }

        www             = OnlineMapsUtils.GetWWW(url);
        www.OnComplete += OnRequestComplete;
    }
Exemple #18
0
    private void OnFindLocationComplete(OnlineMapsWWW www)
    {
        if (!string.IsNullOrEmpty(www.error))
        {
            return;
        }

        string response = www.text;

        if (string.IsNullOrEmpty(response))
        {
            return;
        }

        int    index = 0;
        string s = "\"loc\": \"";
        float  lat = 0, lng = 0;
        bool   finded = false;

        for (int i = 0; i < response.Length; i++)
        {
            if (response[i] == s[index])
            {
                index++;
                if (index >= s.Length)
                {
                    i++;
                    int startIndex = i;
                    while (true)
                    {
                        char c = response[i];
                        if (c == ',')
                        {
                            lat = float.Parse(response.Substring(startIndex, i - startIndex));
                            i++;
                            startIndex = i;
                        }
                        else if (c == '"')
                        {
                            lng    = float.Parse(response.Substring(startIndex, i - startIndex));
                            finded = true;
                            break;
                        }
                        i++;
                    }
                    break;
                }
            }
            else
            {
                index = 0;
            }
        }

        if (finded)
        {
            if (useGPSEmulator)
            {
                emulatorPosition = new Vector2(lng, lat);
            }
            else if (position == Vector2.zero)
            {
                position = new Vector2(lng, lat);
                if (!isPositionInited && OnLocationInited != null)
                {
                    isPositionInited = true;
                    OnLocationInited();
                }
                if (OnLocationChanged != null)
                {
                    OnLocationChanged(position);
                }
            }
            if (OnFindLocationByIPComplete != null)
            {
                OnFindLocationByIPComplete();
            }
        }
    }
    private OnlineMapsQQSearch(string key, string keyword, Params p)
    {
        StringBuilder builder = new StringBuilder("http://apis.map.qq.com/ws/place/v1/search?key=").Append(key).Append("&keyword=").Append(OnlineMapsWWW.EscapeURL(keyword));

        p.AppendParams(builder);
        www             = OnlineMapsUtils.GetWWW(builder);
        www.OnComplete += OnRequestComplete;
    }
Exemple #20
0
 private OnlineMapsWhat3Words(StringBuilder url)
 {
     _status         = OnlineMapsQueryStatus.downloading;
     www             = new OnlineMapsWWW(url);
     www.OnComplete += OnRequestComplete;
 }