Страницы

Поиск по вопросам

Показаны сообщения с ярлыком карты. Показать все сообщения
Показаны сообщения с ярлыком карты. Показать все сообщения

пятница, 13 марта 2020 г.

Как получить координаты центра отображаемой Google-карты?

#google_maps_api #карты


При загрузке страницы на карте после определения геолокации (html5) появляется маркер.

Задача: после того, как он появился, при перетягивании карты он должен постоянно
быть в центре (т.е. карта перетаскивается, а этот маркер всё время остаётся в центре).
    


Ответы

Ответ 1



Вы можете вызвать: map.getCenter()это вернет вам объект содержаний Lon,Lat. А вот так можно получить координаты по нажатию правой кнопки мыши: google.maps.event.addListener(map, "rightclick", function(event) { var lat = event.latLng.lat(); var lng = event.latLng.lng(); ... });

Ответ 2



google.maps.event.addListener(map, "dragend", function(event) { var g = map.getCenter(); $('#lat').html(g.lat()); $('#long').html(g.lng()); coords = new google.maps.LatLng(g.lat(), g.lng()); marker.setPosition(g); }); Вот так все работает!))) Спасибо!

пятница, 14 февраля 2020 г.

Гексагональная сетка для google map

#google_maps #карты


Привет, кто сталкивался с добавлением гексагональной сетки для google карт?
Вот такую сетку нужно добавить на всю ширину карты, которая вмещается в экран:




    


Ответы

Ответ 1



Идея вкратце Упрощённо говоря, Google Maps – это всего лишь слой в HTML, который обрабатывает действия пользователя и на их основе манипулирует содержимым карты (по большей части изображениями). Ничего не мешает наложить поверх этого свой HTML слой с любым содержанием. Напротив, разработчики карт к этому и призывают, предоставляя функционал для преобразования географических координат к координатам внутри этого слоя (и больше ничего существенного не дают). Поэтому наложить можно вообще что угодно, главное – чтобы это было полезно и удобно в рамках Вашей задачи. Нюансы Вы действительно указали очень мало деталей. Например, зачем Вам это? Помимо любопытства это важно для ответа, из области применения вытекают важные моменты. Как минимум, у меня есть такие вопросы: Должна ли эта сетка быть привязана ко всему земному шару или только к каким-то регионам, с которыми Вы планируете работать? Варианты: глобус / регион. На мой взгляд, фраза "на всю ширину карты, которая вмещается в экран" не совсем отвечает на этот вопрос. Нужно ли Вам учитывать проекцию Меркатор? (Как упомянул @sanmai) Варианты: Меркатор / не Меркатор. Нужна ли Вам эта сетка с фиксированным масштабом, или же при приближении она должна увеличиваться и разделяться на более мелкие шестиугольники? Варианты: фикс / раздел. Должно ли быть какое-то взаимодействие с этими шестиугольниками? Должны ли они отображать цвета, текст? Варианты: взаимод / без взаимод. С технической стороны, как лучше реализовать наложение на Гугл-карты для Вашей задачи? По большей части, ответ на этот вопрос вытекает из ответов на предыдущие. Варианты: картинка / холст canvas или svg. Некоторое время назад я разрабатывал библиотеку GMapsTable для наложения таблицы на Google Maps (описание на Хабре), и могу сказать, что в любом случае это весьма непростая задача. В качестве наложения я использовал таблицу, так как шестиугольники мне не были нужны, а Меркатор не учитывался (данные не по глобусу, а регионам, искажения слабо заметны). Также, в таблицу легко добавлять текст (простым HTML) или взаимодействие (можно наляпать JS события отдельным ячейкам). Предлагаемые варианты решения В зависимости от комбинаций ответов: фикс, без взаимод – можно взять любую PNG картинку с сеткой и наложить на нужный участок карты. Это не зависит от проекции (Меркатор или нет) и от местоположения (глобус или регион), просто нужно подобрать / сгенерировать оптимально подходящее изображение. Довольно лёгкий, но на столько же мало функциональный способ. В большинстве остальных случаев я бы использовал холст или svg. Это сложно, особенно если погнаться за точностью, красотой, плавностью, зато возможности ничем не ограничены. Вне зависимости от фикс / раздел лучше задать готовый массив точек, а не вычислять всё в коде. Если нужны разделяющиеся шестиугольники, это также проще реализовать на основе имеющихся начальных вершин. В таком случае задача сводится всего лишь к созданию этого набора точек и алгоритма для их отрисовки, преобразования шестиугольников к координатам на экране. Вывод текста и цветов в таком случае относительно лёгок. Если нужно взаимодействие, то можно просто перехватывать событие клика и реализовать функцию обратного преобразования: от координаты на экране к конкретному шестиугольнику. Как создать набор исходных точек? Например, можно банально взять одну из картинок с шестиугольниками (Меркатор или нет, на Ваш выбор) и вручную или с кодом перевести все вершины в координаты широты/долготы. Можно составить их в отдельные объекты шестиугольников или же просто отдельно прописать линии между точками, если работы с шестиугольниками не планируется. Муторно, но альтернатива не проще: написать код для генерации сферы с поверхностью из шестиугольников и перевода этих же вершин, линий / шестиугольников в координаты карты. Полезные ссылки: Google Maps API: собственные наложения на карту – простой пример с наложением картинки. Исходный код GMapsTable – большой пример с динамическим наложением табицы.

Ответ 2



Прямо так, как вы хотите, у вас не получится так сделать на всех увеличениях потому что на Гугл-картах используется проекция Меркатора. Это значит ближе к полюсам ваша сетка будет искажена, будто бы натянута на шар. Примерный вид: Картинка отсюда.

среда, 5 февраля 2020 г.

Аналог 2gis по функционалу

#php #html #карты


В больших городах удобно использовать 2gis, чтобы элементарно узнать расписание,
для маленьких городов такого не существует. Подскажите варианты создания подобного
сервиса, чтобы была карта, может даже использовать yandex/google или создать как то
свою, чтобы при нажатии на объект из базы подгружались данные. Сам хорошо владею PHP
(Yii2), HTML, CSS, JQ. Но не представляю каким образом реализовать карту.

P.S. Основной функцией является следующее: клик по зданию -> из моей базы загрузились
все организации, по каждой также можно кликнуть, узнать номер/расписание и т.п.
    


Ответы

Ответ 1



Использую Leaflet + (MapBox, OSM). Leaflet - API. Простой и легкий (к тому же автор отечественный - Владимир Агафонкин). MapBox - Сервер отрендереных слоев, и редактор. Очень мощный инструмент для работы со слоями. OSM - наиболее полные данные, даже для моего небольшого города указано все, включая тропинки.

Ответ 2



https://tech.yandex.ru/maps/?lang=ru-RU Вот через инструменты яндекса можешь через js(к сожалению через js тут все) https://tech.yandex.ru/maps/jsbox/balloon_and_hint/ а вот тут все примеры и код можешь посмотреть даже начальные знания js помогут изменить по править по примерам. Вот еще нашел кое что https://maps-creator.com/ может быть есть в ней польза для вас.

Ответ 3



Принцип такой: Пользуешься api понравившихся карт. С помощью его же ну и естественно js стилизуешь карту на свое усмотрение. Придется читать. По клику на нужные объект запускаешь функцию, которая возвращает данные о его координатах. Далее отправляешь ajax запрос на сервер, там устанавливаешь погрешность координат в пределах которых должны искаться данные в базе. (естественно данные об объекте должны быть в бд). Делаешь запрос к базе, где ищешь объект в пределах твоих координат. Отправляешь результат во вьюху, выводишь вьюху другой вариант если есть подробные данные о фирмах и организациях. в каком то сервисе: По клику на нужные объект запускаешь функцию, которая возвращает данные о его координатах. Отправляешь координаты в сервис, получаешь результат

воскресенье, 5 января 2020 г.

Как карты определяют место с точностью до дома?

#wifi #карты #геолокация


Собственно сабж,
очень интересно как это возможно, что для этого используется, какие данные ?
Какие есть варианты ?
UPD
Имел ввиду с точек по Wi-fi
Сделали опыт:
Через телефон сделали точку, раздали мобильный интернет, и все же определил где мы.    


Ответы

Ответ 1



По улицам иногда ездит шпиенский автомобиль от компании Google. На автомашине установлено сканирующее устройство, которое засекает работающие wi-fi устройства и делает их привязку MAC адрес -> гео-координаты. Такой метод называется Wifi Positioning System Далее дело уже техники: запрос на сервера гугль по засеченным mac адресам, триангуляция, ваши координаты. Таким способом можно координаты и без наличия GPS приемника. Конечно такой способ иногда дает сбои. Допустим если wi-fi передатчик передвинули то и координаты будут неверны. Update Так устроен алгоритм триангуляции (немного математики)

Ответ 2



Существует несколько способов определения местонахождения мобильного телефона, а заодно и его владельца. Самыми распространёнными являются два: по встроенному датчику GPS и по сотовым вышкам оператора. Так как далеко не во всех мобильных телефонах встроены GPS модули, более популярным способом пока что остаётся именно поиск местонахождения мобильного телефона по сотовым вышкам оператора, также известный как Cell ID.

воскресенье, 22 декабря 2019 г.

Как своему приложению android дать возможность переноситься на SD-карту?

#android #карты #sd


Не секрет, что некоторые приложения можно переносить на карту памяти, а некоторые
нет. Проверив свои программы, я обнаружил, что они не имеют такой возможности. Что
нужно сделать что бы она появилась?
    


Ответы

Ответ 1



Нужно в манифесте указать значение android:installLocation ... доступные варианты : auto- на усмотрение системы internalOnly - только во внутренюю память preferExternal - по возможности на SD-карту подробнее смотрите офф.справку

четверг, 19 декабря 2019 г.

Нарисовать Землю с помощью OpenGL

#qt #opengl #карты


Рисую с помощью OpenGL в Qt плоскую и 3Д Землю. На данный момент в качестве текстуры
используется растровое изображение. Хочется, чтобы была возможность увеличивать карту
с детализацией изображения.
С чего начать? Может какие-то статьи или книги есть на подобную тему? Сама в интернете
ничего не нашла.
    


Ответы

Ответ 1



Хранить географические карты в растре? Вы серьезно? Начать нужно с того что: Где-то достать растровую плоскую физическую карту мира Сконвертировать её в нормализованную 8 битную карту высот. (уже кто-то сделал) C помощью displacement mapping получить полигональную сетку из растровой карты высот. Спроецировать полученную сетку на сферу с помощью функции обратной, той что использовалась при развертке сферы в карту. (Картографические проекции достаточно сложны, однако по ним есть много информации) В конце в качестве diffuse map использовать оригинальную карту. Также можно еще взять случайную карту нормалей и добавить немного bump mappingа в получившийся ландшафт. В результате может-быть получится более менее сносная картинка, которую можно нормально скалировать, вращать, бомбить трехмерными ядерными ракетами, заселять виртуальными горожанами, насылать нашествие инопланетян и.т.д. и.т.п. Вот еще годная статья по поводу сравнения методов рельефного текстурирования. Также есть много софта для получения сетки рельефа напрямую из карты высот. Нарпимер всем известный Terragen. С ним генерация картинок вроде такой становится тривиальной задачей вообще не требующей значительных художественных навыков: И еще подборка статей про алгоритмическую генерацию рельефа местности: Как это делают в NVIDIA Фрактальная генерация Получение своих континетов для новичков Хороший пример генерации через WebGL размером всего в 130 строчек JS Обзорная презентация. Мало формул, много примеров и названий технологий Также имеет смысл ознакомится с различными методами генерации градиентных шумов, чтобы с помощью них получить свою случайную карту нормалей/высот и сделать ландшафт еще более реалистичным.

Ответ 2



Если нужно детализировать текстуру то используй MIP mapping

вторник, 17 декабря 2019 г.

HTML5 карта России, есть ли бесплатная? [закрыт]

#javascript #html5 #карты


        
             
                
                    
                        
                            Закрыт. Этот вопрос не по теме. Ответы на него в данный
момент не принимаются.
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            Хотите улучшить этот вопрос? Update the question so it's
on-topic for Stack Overflow на русском.
                        
                        Закрыт 2 года назад.
                                                                                
           
                
        
Интересует карта России, встраиваемая в web-страницу, с кликабельными регионами,
с регулируемыми ховерами на регионах, не flash. Желательно не обфусцированный JS-код. 

Популярна такая платная карта
http://fla-shop.com.ru/products/html5/ru-locator-map/ . Есть такая бесплатная http://evrohimservis.ru/map/
- судя по всему пиратская версия первой карты.

Существуют ли подобные бесплатные не краденые JS-плагины?
    


Ответы

Ответ 1



Еще у Яндекса есть, там точно бесплатно https://tech.yandex.ru/maps/jsbox/2.1/regions var REGIONS_DATA = { region: { title: 'Регион', items: [{ id: '001', title: 'Страны мира' }, { id: 'BY', title: 'Беларусь' }, { id: 'KZ', title: 'Казахстан' }, { id: 'RU', title: 'Россия' }, { id: 'TR', title: 'Турция' }, { id: 'UA', title: 'Украина' }] }, lang: { title: 'Язык', items: [{ id: 'en', title: 'Английский' }, { id: 'be', title: 'Белорусский' }, { id: 'kk', title: 'Казахский' }, { id: 'ru', title: 'Русский' }, { id: 'tr', title: 'Турецкий' }, { id: 'uk', title: 'Украинский' }] }, quality: { title: 'Точность границ', items: [{ id: '0', title: '0' }, { id: '1', title: '1' }, { id: '2', title: '2' }, { id: '3', title: '3' }] } }, // Шаблон html-содержимого макета. optionsTemplate = [ '
', '{% for paramName, param in data.params %}', '{% for key, value in state.values %}', '{% if key == paramName %}', '
', '', '{{ param.title }}', ': {{ value }}', ' ', '', '', '
 ', '{% endif %}', '{% endfor %}', '{% endfor %}', '
' ].join(''); ymaps.ready(init); function init() { // Создадим собственный макет RegionControl. var RegionControlLayout = ymaps.templateLayoutFactory.createClass(optionsTemplate, { build: function () { RegionControlLayout.superclass.build.call(this); this.handleClick = ymaps.util.bind(this.handleClick, this); $(this.getParentElement) .on('click', 'a', this.handleClick); }, clear: function () { $(this.getParentElement) .off('click', 'a', this.handleClick); RegionControlLayout.superclass.clear.call(this); }, handleClick: function (e) { e.preventDefault(); var $target = $(e.currentTarget); var state = this.getData().state; var newValues = ymaps.util.extend({}, state.get('values')); if (!$target.hasClass('active')) { newValues[$target.data('param')] = $target.data('id'); state.set('values', newValues); } } }), // Наследуем класс нашего контрола от ymaps.control.Button. RegionControl = ymaps.util.defineClass(function (parameters) { RegionControl.superclass.constructor.call(this, parameters); this.regions = new ymaps.GeoObjectCollection(); }, ymaps.control.Button, /** @lends ymaps.control.Button */{ onAddToMap: function (map) { RegionControl.superclass.onAddToMap.call(this, map); map.geoObjects.add(this.regions); this.setupStateMonitor(); this.loadRegions(this.state.get('values')); }, onRemoveFromMap: function (map) { map.geoObjects.remove(this.regions); this.clearStateMonitor(); RegionControl.superclass.onRemoveFromMap.call(this, map); }, setupStateMonitor: function () { this.stateMonitor = new ymaps.Monitor(this.state); this.stateMonitor.add('values', this.handleStateChange, this); }, clearStateMonitor: function () { this.stateMonitor.removeAll(); }, handleStateChange: function (params) { this.loadRegions(params); }, handleRegionsLoaded: function (res) { this.regions .removeAll() .add(res.geoObjects); this.getMap().setBounds( this.regions.getBounds(), {checkZoomRange: true} ); }, loadRegions: function (params) { this.disable(); return ymaps.regions.load(params.region, params) .then(this.handleRegionsLoaded, this) .always(this.enable, this); } }), map = new ymaps.Map('map', { center: [50, 30], zoom: 3, controls: ['typeSelector'] }, { typeSelectorSize: 'small' }), // Создадим экземпляр RegionControl. regionControl = new RegionControl({ state: { enabled: true, values: { region: 'RU', lang: 'ru', quality: '1' } }, data: { params: REGIONS_DATA }, options: { layout: RegionControlLayout }, float: 'left', maxWidth: [300] }); // Добавим контрол на карту. map.controls.add(regionControl); // Узнавать о изменениях параметров RegionControl можно следующим образом. regionControl.events.add('statechange', function (e) { console.log(e.get('target').get('values')); }); } Примеры. Регионы
Ну и да, Вы не обязаны проверять а правда ли это ворованная карта. Да и не проверить никак. Можно указать ссылку на источник где скачали и где было написано что она бесплатная. Также пройтись подкорректировать исходник и сделать ему обфускацию.

Ответ 2



А чем вас эта карта http://evrohimservis.ru/map/ не устраивает? Берите и пользуйтесь

суббота, 14 декабря 2019 г.

Можно ли убрать с карты Google Maps значки “станции метро”, “зоопарки”, “остановки”?

#google_maps_api #карты




Реализована ли в Google Maps такая возможность?
    


Ответы

Ответ 1



Можно с использованием Styled Maps. Например, чтобы убрать все автобусные остановки, при создании объекта google.maps.Map в options нужно указать: styles: [{ featureType: 'transit.station.bus', elementType: 'all', stylers: [ { visibility: 'off' } ] ]}

Ответ 2



Тут можно сгенерировать карту выставив все настройки через интерфейс и получить код: https://mapstyle.withgoogle.com/ Вот код полученный из того генератора для решения Вашей проблемы: [ { "featureType": "poi.attraction", "elementType": "labels", "stylers": [ { "visibility": "off" } ] }, { "featureType": "transit.station.bus", "elementType": "labels", "stylers": [ { "visibility": "off" } ] }, { "featureType": "transit.station.rail", "elementType": "labels", "stylers": [ { "visibility": "off" } ] } ]

воскресенье, 8 декабря 2019 г.

Как на яндекс карте показать районы города?

#javascript #веб_программирование #yandex_maps_api #яндекс #карты


Есть задача показать административные районы города на яндекс картах. 
При этом каждый район должен иметь свой цвет и прозрачность.
Например, здесь отображается один район города:
на Яндекс Карте

Нужно показать все( или несколько) районы(ов) города и иметь возможность задать им
цвет и прозрачность через API.
Подскажите, как это можно сделать?

UPD1. Есть идея сделать районы в виде полигонов. Тогда можно будет править их как
угодно. Но нужны координаты границ районов. Карта яндекса откуда же берет эти данные.
Вот как их получить?  

UPD2. Получен официальный ответ от тех поддержки Яндекс Карт.
"Средствами АПИ Яндекс карт сделать это нельзя". Так что испольуем OSM.
    


Ответы

Ответ 1



Общий план действий такой: ymaps.ready(function() { // 0. Создаем карту, например так: var map, regionName = "Краснодар, Западный округ", center = [38.943216, 45.033266], zoom = 11; map = new ymaps.Map('yamap', { center: center, zoom: zoom, controls: [] }); // 1. Запрашиваем через геокодер район (у Яндекса этой возможности пока нет, придется пользоваться OSM) var url = "http://nominatim.openstreetmap.org/search"; $.getJSON(url, {q: regionName, format: "json", polygon_geojson: 1}) .then(function (data) { $.each(data, function(ix, place) { if ("relation" == place.osm_type) { // 2. Создаем полигон с нужными координатами var p = new ymaps.Polygon(place.geojson.coordinates); // 3. Добавляем полигон на карту map.geoObjects.add(p); } }); }, function (err) { console.log(err); }); }); Этап 1, в качестве примера, приведен с использованием jQuery. Этап 2 скрывает небольшую проблему. OSM возвращает координаты в порядке (долгота, широта), Яндекс работает по-умолчанию с порядком (широта, долгота). Чтобы это поменять нужно указать порядок при подключении API Также на этапе 2 можно добавить "по вкусу" цвет фона, обводку, прозрачность и многое другое см. Polygon

суббота, 7 декабря 2019 г.

Получение местоположения пользователя

#android #gps #карты


При запуске приложения требуется получить местоположение пользователя на карте. Погуглив
и посмотрев в книге, единственное, что я нашел — это использовать слушатель смены расстояния:

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
            //Получаю местоположение и отписываюсь
            locationManager.removeUpdates(this);
            ...
        }
   ...
}


Такой способ не всегда работает. Иногда приложение ждет 10 секунд-2 минуты, прежде
чем слушатель сработает. Иногда просто не срабатывает (если телефон не двигается).



Есть какая-то 100% работающая альтернатива запросить текущее расстояние (при условия
нормальной работы GPS), а не ждать ответа в слушатель изменения?
    


Ответы

Ответ 1



Почему вы запрашиваете в провайдере именно GPS_PROVIDER? GPS долго прогревается при холодном старте и из-за этого возникают задержки в 20-120 секунд. Если использовать координаты сети/Wi-Fi, то локацию можно получить почти моментально. Попробуйте reactive-location, там есть пример получения локации с таймаутом, получится хороший флоу для Вашего случая: LocationRequest req = LocationRequest.create() .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) .setExpirationDuration(5000) .setInterval(1000); Observable goodEnoughQuicklyOrNothingObservable = new ReactiveLocationProvider(getContext()) .getUpdatedLocation(req) .filter(location -> location.getAccuracy() < 50) // с точностью до 50 метров .timeout(5, TimeUnit.SECONDS, Observable.just(null), AndroidSchedulers.mainThread()) .first() .observeOn(AndroidSchedulers.mainThread()); Subscription subscription = goodEnoughQuicklyOrNothingObservable .subscribe(location -> { if (location == null) { // не удалось получить координаты, // требуется ввод вручную } else { // получили координаты } }, Timber::e);

Ответ 2



Спустя неделю поисков и вопроса на enSO и ruSO, я пришел к варанту, что альтернатив - нет. Местоположение можно определить только с помощью LocationManager.requestLocationUpdates и получить последнее местоположение, которое запомнил телефон методом FocusedLocationProviderApi. Как альтернативу, можно предложить пользователю выбрать местоположение через маркер или ввести вручную. В этом помогут автоввод местоположения и определение местоположения через координаты.

Ответ 3



В качестве альтернатив можно предложить разве что ручной ввод местоположения. Еще было бы хорошо требовать от пользователя включения Wi-Fi, для более точного позиционирования. Да и получение координат через Wi-Fi/A-GPS будет работать гораздо быстрее - моментально даже. Ведь в отличии от GPS не тратиться время на поиск спутников.

воскресенье, 2 июня 2019 г.

Как получить координаты центра отображаемой Google-карты?

При загрузке страницы на карте после определения геолокации (html5) появляется маркер.
Задача: после того, как он появился, при перетягивании карты он должен постоянно быть в центре (т.е. карта перетаскивается, а этот маркер всё время остаётся в центре).


Ответ

Вы можете вызвать: map.getCenter()это вернет вам объект содержаний Lon,Lat.
А вот так можно получить координаты по нажатию правой кнопки мыши:
google.maps.event.addListener(map, "rightclick", function(event) { var lat = event.latLng.lat(); var lng = event.latLng.lng(); ... });

понедельник, 4 февраля 2019 г.

Как карты определяют место с точностью до дома?

Собственно сабж, очень интересно как это возможно, что для этого используется, какие данные ? Какие есть варианты ? UPD Имел ввиду с точек по Wi-fi Сделали опыт: Через телефон сделали точку, раздали мобильный интернет, и все же определил где мы.


Ответ

По улицам иногда ездит шпиенский автомобиль от компании Google. На автомашине установлено сканирующее устройство, которое засекает работающие wi-fi устройства и делает их привязку MAC адрес -> гео-координаты. Такой метод называется Wifi Positioning System Далее дело уже техники: запрос на сервера гугль по засеченным mac адресам, триангуляция, ваши координаты. Таким способом можно координаты и без наличия GPS приемника. Конечно такой способ иногда дает сбои. Допустим если wi-fi передатчик передвинули то и координаты будут неверны. Update Так устроен алгоритм триангуляции (немного математики)

вторник, 20 ноября 2018 г.

Можно ли убрать с карты Google Maps значки “станции метро”, “зоопарки”, “остановки”?


Реализована ли в Google Maps такая возможность?


Ответ

Можно с использованием Styled Maps
Например, чтобы убрать все автобусные остановки, при создании объекта google.maps.Map в options нужно указать:
styles: [{ featureType: 'transit.station.bus', elementType: 'all', stylers: [ { visibility: 'off' } ] ]}

пятница, 16 ноября 2018 г.

Как своему приложению android дать возможность переноситься на SD-карту?

Не секрет, что некоторые приложения можно переносить на карту памяти, а некоторые нет. Проверив свои программы, я обнаружил, что они не имеют такой возможности. Что нужно сделать что бы она появилась?


Ответ

Нужно в манифесте указать значение android:installLocation
...
доступные варианты : auto- на усмотрение системы internalOnly - только во внутренюю память preferExternal - по возможности на SD-карту
подробнее смотрите офф.справку

понедельник, 29 октября 2018 г.

HTML5 карта России, есть ли бесплатная? [закрыт]

Интересует карта России, встраиваемая в web-страницу, с кликабельными регионами, с регулируемыми ховерами на регионах, не flash. Желательно не обфусцированный JS-код.
Популярна такая платная карта http://fla-shop.com.ru/products/html5/ru-locator-map/ . Есть такая бесплатная http://evrohimservis.ru/map/ - судя по всему пиратская версия первой карты.
Существуют ли подобные бесплатные не краденые JS-плагины?


Ответ

Еще у Яндекса есть, там точно бесплатно https://tech.yandex.ru/maps/jsbox/2.1/regions
var REGIONS_DATA = { region: { title: 'Регион', items: [{ id: '001', title: 'Страны мира' }, { id: 'BY', title: 'Беларусь' }, { id: 'KZ', title: 'Казахстан' }, { id: 'RU', title: 'Россия' }, { id: 'TR', title: 'Турция' }, { id: 'UA', title: 'Украина' }] }, lang: { title: 'Язык', items: [{ id: 'en', title: 'Английский' }, { id: 'be', title: 'Белорусский' }, { id: 'kk', title: 'Казахский' }, { id: 'ru', title: 'Русский' }, { id: 'tr', title: 'Турецкий' }, { id: 'uk', title: 'Украинский' }] }, quality: { title: 'Точность границ', items: [{ id: '0', title: '0' }, { id: '1', title: '1' }, { id: '2', title: '2' }, { id: '3', title: '3' }] } }, // Шаблон html-содержимого макета. optionsTemplate = [ '

', '{% for paramName, param in data.params %}', '{% for key, value in state.values %}', '{% if key == paramName %}', '
', '', '{{ param.title }}', ': {{ value }}', ' ', '', '', '
 ', '{% endif %}', '{% endfor %}', '{% endfor %}', '
' ].join(''); ymaps.ready(init); function init() { // Создадим собственный макет RegionControl. var RegionControlLayout = ymaps.templateLayoutFactory.createClass(optionsTemplate, { build: function () { RegionControlLayout.superclass.build.call(this); this.handleClick = ymaps.util.bind(this.handleClick, this); $(this.getParentElement) .on('click', 'a', this.handleClick); }, clear: function () { $(this.getParentElement) .off('click', 'a', this.handleClick); RegionControlLayout.superclass.clear.call(this); }, handleClick: function (e) { e.preventDefault(); var $target = $(e.currentTarget); var state = this.getData().state; var newValues = ymaps.util.extend({}, state.get('values')); if (!$target.hasClass('active')) { newValues[$target.data('param')] = $target.data('id'); state.set('values', newValues); } } }), // Наследуем класс нашего контрола от ymaps.control.Button. RegionControl = ymaps.util.defineClass(function (parameters) { RegionControl.superclass.constructor.call(this, parameters); this.regions = new ymaps.GeoObjectCollection(); }, ymaps.control.Button, /** @lends ymaps.control.Button */{ onAddToMap: function (map) { RegionControl.superclass.onAddToMap.call(this, map); map.geoObjects.add(this.regions); this.setupStateMonitor(); this.loadRegions(this.state.get('values')); }, onRemoveFromMap: function (map) { map.geoObjects.remove(this.regions); this.clearStateMonitor(); RegionControl.superclass.onRemoveFromMap.call(this, map); }, setupStateMonitor: function () { this.stateMonitor = new ymaps.Monitor(this.state); this.stateMonitor.add('values', this.handleStateChange, this); }, clearStateMonitor: function () { this.stateMonitor.removeAll(); }, handleStateChange: function (params) { this.loadRegions(params); }, handleRegionsLoaded: function (res) { this.regions .removeAll() .add(res.geoObjects); this.getMap().setBounds( this.regions.getBounds(), {checkZoomRange: true} ); }, loadRegions: function (params) { this.disable(); return ymaps.regions.load(params.region, params) .then(this.handleRegionsLoaded, this) .always(this.enable, this); } }), map = new ymaps.Map('map', { center: [50, 30], zoom: 3, controls: ['typeSelector'] }, { typeSelectorSize: 'small' }), // Создадим экземпляр RegionControl. regionControl = new RegionControl({ state: { enabled: true, values: { region: 'RU', lang: 'ru', quality: '1' } }, data: { params: REGIONS_DATA }, options: { layout: RegionControlLayout }, float: 'left', maxWidth: [300] }); // Добавим контрол на карту. map.controls.add(regionControl); // Узнавать о изменениях параметров RegionControl можно следующим образом. regionControl.events.add('statechange', function (e) { console.log(e.get('target').get('values')); }); } Примеры. Регионы

Ну и да, Вы не обязаны проверять а правда ли это ворованная карта. Да и не проверить никак. Можно указать ссылку на источник где скачали и где было написано что она бесплатная. Также пройтись подкорректировать исходник и сделать ему обфускацию.