1 votos

¿Existe una manera fácil de encontrar el punto más cercano en línea en iOS?

Tengo una coordenada, y un camino. Necesito encontrar un punto en el camino más cercano a mi coordenada. Algo así como http://turfjs.org/static/docs/module-turf_point-on-line.html pero para iOS. ArcGIS no parece tener esa funcionalidad. O yo no la veo. En el peor de los casos puedo implementar un algoritmo propio. Pero es realmente difícil de envolver la cabeza alrededor de las fórmulas matemáticas.

0voto

user72503 Puntos 1

ArcGIS tiene algo que se puede utilizar. AGSGeometryEngine nearestCoordinateInGeometry:toPoint: . Pero aún queda mucho camino por recorrer.

0voto

steveax Puntos 316

Es importante tener en cuenta que puedes coger la coordenada más cercana o el vértice más cercano de la ruta del motor de geometría...

No has especificado si usas Swift u Objective-C, pero aquí tienes algunos no probado Código Swift para buscar en una ruta dada la coordenada más cercana a un punto determinado y luego mostrarla como un gráfico:

import UIKit
import ArcGIS

class SomeViewController: UIViewController, AGSMapViewLayerDelegate {

    @IBOutlet weak var mapView:AGSMapView!

    // some variables you will need, obviously your app will require more...
    var point: AGSGraphic!
    var routeResult: AGSRouteResult!
    var routeGraphicsLayer:AGSGraphicsLayer!
    let geometryEngine = AGSGeometryEngine.defaultGeometryEngine()

    override func viewDidLoad() {
        super.viewDidLoad()

        // your app code to generate a point and route...

        // MARK: Find closest point on route to your point of interest
        // add a graphic for the point, assuming you are working with an AGSRouteResult for your route
        self.routeGraphicsLayer = AGSGraphicsLayer()
        self.mapView.addMapLayer(routeGraphicsLayer, withName: "Graphics")

        // find nearest vertex or coordinate on route to a given point
        let closestPoint = self.geometryEngine.nearestCoordinateInGeometry(self.routeResult.routeGraphic.geometry, toPoint:self.point)

        // set symbol
        let closestMarkerSymbol = AGSSimpleMarkerSymbol()
        closestMarkerSymbol.style = .Diamond
        closestMarkerSymbol.outline.color = UIColor.blueColor()

        // display it, add attribute for distance to route
        var attrib: [String:Double] = ["Distance": self.routeResult.distance]
        let closestPointGraphic = AGSGraphic(closestPoint, attributes:attrib)
        self.closestPointGraphic.symbol = closestMarkerSymbol
        self.routeGraphicsLayer.addGraphic(closestPointGraphic)
        self.routeGraphicsLayer.visible = true

        // do other stuff, maybe add a callout/popup for the point so the user can see distance?

    }

}

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X