Мне было интересно, можно ли реализовать RouteBoxer в приложении iOS, использующем API Карт Google? Если нет, есть ли другой способ найти POI на маршруте? Я не очень хорошо знаком с HTML, но есть ли способ получить доступ к RouteBoxer, выполнив HTTP-запрос? Использует ли RouteBoxer веб-страницу и карту для видимости? Я использую Parse.com для моего бэкэнд, поэтому я могу также сделать HTTP-запросы в облаке, используя Javascript, если это необходимо.Google Maps RouteBoxer в приложении iOS
ответ
Я нашел решение на данный момент (я не знаю, что это правильный способ сделать это). Я делаю это, я добавил файл Routeboxer.JS для проекта и создаю HTML-файл для вызова функции box из файла Routeboxer.js, который возвращает поля.
Вот код HTML файл ..
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Google Maps JavaScript API Search Along a Route Example</title>
<script src="http://maps.google.com/maps/api/js" type="text/javascript"></script>
<script src="RouteBoxer.js" type="text/javascript"></script>
<script type="text/javascript">
var boxpolys = null;
var directions = null;
var routeBoxer = null;
var distance = null; // km
function initialize() {
// Default the map view to the continental U.S.
routeBoxer = new RouteBoxer();
directionService = new google.maps.DirectionsService();
}
function route(source, destination, distance) {
// Convert the distance to box around the route from miles to km
//distance = parseFloat(document.getElementById("distance").value) * 1.609344;
routeBoxer = new RouteBoxer();
directionService = new google.maps.DirectionsService();
//route("Hyderabad", "Vijayawada", "5");
distance = parseFloat(distance) * 1.609344;
var request = {
origin: source,
destination: destination,
travelMode: google.maps.DirectionsTravelMode.DRIVING
}
// Make the directions request
//onload="route('Vijayawada','Hyderabad','5');
var boxes;
directionService.route(request, function(result, status) {
if (status == google.maps.DirectionsStatus.OK) {
//directionsRenderer.setDirections(result);
// Box around the overview path of the first route
var path = result.routes[0].overview_path;
var boxes = routeBoxer.box(path, distance);
//This object to get the boxes array to get the places from api call
var result = JSON.stringify(boxes);
console.log(result);
var data = [];
for (var i = 0; i < boxes.length; i++) {
//This object to draw the boxes..
var str = {"NE": [boxes[i].getNorthEast().lat(), boxes[i].getNorthEast().lng()], "SE": [boxes[i].getSouthWest().lat(), boxes[i].getNorthEast().lng()], "SW": [boxes[i].getSouthWest().lat(), boxes[i].getSouthWest().lng()], "NW": [boxes[i].getNorthEast().lat(), boxes[i].getSouthWest().lng()], "WW": [boxes[i].getNorthEast().lat(), boxes[i].getNorthEast().lng()]};
data.push(str)
}
var latLng = JSON.stringify(data)
console.logCoord(latLng);
//return JSON.Stringify(boxes);
} else {
alert("Directions query failed: " + status);
return "Direction query failed";
}
});
}
//As direction service.route method is Asynchronous call we can't return anything from this function so we added the console.log to get the data back to iOS
console = new Object();
console.log = function(log) {
var iframe = document.createElement("IFRAME");
iframe.setAttribute("src", "ios-log:#iOS#" + log);
document.documentElement.appendChild(iframe);
iframe.parentNode.removeChild(iframe);
iframe = null;
};
console.debug = console.log;
console.info = console.log;
console.warn = console.log;
console.error = console.log;
console.logCoord = function(log) {
var coordiframe = document.createElement("IFRAME");
coordiframe.setAttribute("src", "ios-coor:#iOS#" + log);
document.documentElement.appendChild(coordiframe);
coordiframe.parentNode.removeChild(coordiframe);
coordiframe = null;
};
console.debug = console.logCoord;
console.info = console.logCoord;
console.warn = console.logCoord;
console.error = console.logCoord;
</script>
</head>
<body>
</body>
</html>
После этого добавьте объект UIWebView к контроллеру представления. Нет необходимости видеть пользователя.! В методе viewDidLoad загрузите URL-адрес с локальным HTML-файлом. Здесь simpleest-3 - это имя файла HTML.
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let url = NSBundle.mainBundle().URLForResource("simpletest-3", withExtension:"html")
let request = NSURLRequest(URL: url!)
webView.loadRequest(request)
}
Ниже приведен пример функции калибровки метода маршрута из javascript ..! Web вид должен быть завершен загрузки перед вызовом этой функции
@IBAction func onClick(sender: UIButton!) {
let function = String(format: "route('%@', '%@', '%@')", "Hyderabad", "Mysore", "5")
//let function = String(format: "route('Vijayawada','Hyderabad','5')")
let result = webView.stringByEvaluatingJavaScriptFromString(function)
print("result is : \(result)")
}
В Webview методе делегата мы можем получить результат (массив Boxes, а также координаты для рисования Боксы на карте).
extension MapViewController: UIWebViewDelegate {
func webViewDidFinishLoad(webView: UIWebView) {
print("web view did finsih loading")
}
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
if let urlString = request.URL?.absoluteString.stringByRemovingPercentEncoding {
if urlString.hasPrefix("ios-log:") {
let logString = urlString.componentsSeparatedByString(":#iOS#")[1]
self.getPlacesForJsonData(logString)
return false
}
if urlString.hasPrefix("ios-coor:") {
let logString = urlString.componentsSeparatedByString(":#iOS#")[1]
//print("logString is \(logString)")
let data: NSData = logString.dataUsingEncoding(NSUTF8StringEncoding)!
do {
let json = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableLeaves)
//print("coordString is \(json)")
if let json = json as? NSArray {
self.drawBoxes(json)
}
} catch {
print("JSON conversion error")
}
return false
}
}
return true
}
}
И последнее, что нарисовать коробки на карте по маршруту ..!
func drawBoxes(boxes: NSArray) {
if boxes.count > 0 {
for dict in boxes {
let path = GMSMutablePath()
path.addCoordinate(CLLocationCoordinate2DMake((dict["NE"] as! NSArray)[0].doubleValue, (dict["NE"] as! NSArray)[1].doubleValue))
path.addCoordinate(CLLocationCoordinate2DMake((dict["SE"] as! NSArray)[0].doubleValue, (dict["SE"] as! NSArray)[1].doubleValue))
path.addCoordinate(CLLocationCoordinate2DMake((dict["SW"] as! NSArray)[0].doubleValue, (dict["SW"] as! NSArray)[1].doubleValue))
path.addCoordinate(CLLocationCoordinate2DMake((dict["NW"] as! NSArray)[0].doubleValue, (dict["NW"] as! NSArray)[1].doubleValue))
// Create the polygon, and assign it to the map.
let polygon = GMSPolygon(path: path)
polygon.fillColor = UIColor(red:1.0, green:0, blue:0, alpha:0.25);
//polygon.strokeColor = UIColor.blackColor()
polygon.strokeWidth = 0
polygon.map = mapView
}
}
}
Надеюсь, это поможет вам, если у вас возникнут проблемы с этим, дайте мне знать.
- 1. API Google Maps RouteBoxer отсутствует
- 2. routeboxer (google maps api) php реализация
- 3. Google Maps Shading - iOS
- 4. Сторона сервера Routeboxer
- 5. Routeboxer внезапно не работает
- 6. Google Maps в приложении Java
- 7. Google maps в приложении Ionic2
- 8. Google maps в приложении android
- 9. Google Maps Engine для ios?
- 10. iOS Google Maps Вопрос
- 11. iOS с Google Maps
- 12. Google Maps iOS myLocation
- 13. ios google maps precision
- 14. iOS Google maps дает ошибку
- 15. Google Maps iOS, pathFromEncodedPath
- 16. Использование API-интерфейсов Google Maps в приложении iOS
- 17. Использование google maps javascript api в приложении ios
- 18. Как изменить существующий маркер Google Maps в приложении iOS?
- 19. Использование Google Maps Engine в пользовательском приложении iOS
- 20. Бесплатный рисование в google maps-iOS
- 21. Кластеризация в SDK Google Maps для iOS
- 22. Оффлайн Google Maps in iOS
- 23. google maps iOS/android limits
- 24. Google Maps iOs SDK - Китай
- 25. Google maps for ios probleam
- 26. Использование google maps на ios
- 27. Google Maps iOS rightCalloutAccessoryView замена?
- 28. Google Maps iOS Обратное геокодирование
- 29. Google Maps iOS SDK crash
- 30. iOS Google Maps Transit Data
Привет, Якоб, я также сталкиваюсь с той же проблемой. Получили ли вы какое-нибудь решение? –
@ KotiTummala Пока нет, извините !! :( – Jacob