Şehirler arasındaki mesafeyi bulma fonksiyonu


9

Google Dokümanlar ile çalışıyorum ve aşağıdaki formun bir e-tablosunu oluşturmak istiyorum:

Nokta A Nokta B Kilometre
Los Angeles Miami 292100
Palo Alto San Francisco 90

Elektronik tabloda Mileageotomatik olarak hesaplanır. Ben "karga uçar gibi" değil, "mesafe tahrik" arıyorum.

Google E-Tablolar'da bunu yapabilen bir işlev var mı?


Mesafe arttıkça, "sürüş mesafesi" ile "karga uçuşu" arasındaki fark da azalacaktır. Her durumda, muhtemelen yüzde birkaçdan fazla farklılık göstermeyeceklerdir.

1
bu oldukça cesur bir iddia gibi görünüyor, kovboy. portland'dan atlanta'ya gitmenin kabaca uçmakla aynı milage olduğunu mu söylüyorsunuz? sanmıyorum.
Landon Kuhn

1
@pnuts kabul etti ve 4 yaşındaki yorumumu savunmayacağım :)
Landon Kuhn

Rosarch, neden 4 yıl aradan sonra Web Uygulamalarını tekrar ziyaret etmiyor ve sorunuzla ilgili tüm güzel cevapları gözden geçirmiyorsunuz?
Jacob Jan Tuinstra

Yanıtlar:


9

Aşağıdaki küçük kod parçasıyla, iki nokta arasındaki mesafeyi alabilirsiniz.

kod

function getDirection(city1, city2, unit) {
  var directions = Maps.newDirectionFinder()
    .setOrigin(city1).setDestination(city2)
    .setMode(Maps.DirectionFinder.Mode.DRIVING)
    .getDirections();
  var d = directions.routes[0].legs[0].distance.text;

  var distance, value = d.split(" ")[0].replace(",", ""), text = d.split(" ")[1];
  if(text == unit) {
    distance = value;
  } else if(text == "km" && unit == "mi") {
    distance = value / 1.6;
  } else {
    distance = value * 1.6;
  }
  return Math.round(distance);
}

Açıklaması

Google Apps Komut Dosyası'nın üzerine kurulmuş olan MAP API'sı, başlangıç noktası ve hedef arasında ilk yönü ( rota [0] ) alacaktır . Döndürülen değer virgüllerden çıkarılır ve bir tamsayı olarak ayrıştırılır.

Ekran görüntüsü

resim açıklamasını buraya girin

Not

Döndürülen mesafe kilometre veya mil olarak olabilir . Ben de "karga uçar gibi" hesaplamasını ekledim (mil olarak).

Komut dosyasını e-tablodaki Araçlar> Komut Dosyası düzenleyicisi altına ekleyin . Senaryo düzenleyicisindeki hata düğmesine bastığınızda hareket halindesiniz !!

Misal

Sizin için bir örnek dosya oluşturdum: sürüş mesafesi

Referanslar


1
Örnek dokümandaki formül artık tutarlı bir şekilde çalışmıyor gibi görünüyor. Birisi çalışmasını sağlamak için lütfen düzenleyebilir mi? Komut dosyası yazma (kopyalama ve yapıştırmadan daha fazlası) hakkında hiçbir şey bilmiyorum ve yardımınızı çok isterim! Aradığım tek şey posta kodları arasındaki sürüş mesafesi. Teşekkür ederim!
Melissa

3

Google E-Tablolar'da:

=importXML("http://mapquestapi.com/directions/v1/route?  
  key=YOUR_KEY_HERE&outFormat=xml&from=" & A2 & "&to=" 
  & B2,"//response/route/distance")

nerede A2başlangıç ​​noktası ve B2varış noktasıdır.

Mapquest'ten bir API anahtarı almanız ve değeri YOUR_KEY_HEREonunla değiştirmeniz gerekir.


1
API anahtarını nasıl alırsınız?
Jacob Jan Tuinstra

1
@JacobJanTuinstra developer.mapquest.com
Neil McGuigan

Neil, hayatta !! Bunu paylaştığın için teşekkürler.
Jacob Jan Tuinstra

+1 Görünüşe göre zarif bir çözüm, ancak MapQuest biraz berbat. Bana verilen anahtarı kullanmaya çalışırken bu hatayı aldım: "Bu anahtar bu hizmet için yetkilendirilmemiş. Anahtarınız yoksa, developer.mapquest.com adresinden kayıt yaparak ücretsiz bir anahtar alabilirsiniz ."
Nick Bolton

1

İşte benim işime yarayan bu:

=importXML("http://maps.googleapis.com/maps/api/distancematrix/xml?&origins="& <point.A> & "&destinations=" & <point.B>; "//distance/value")

Bu, metre arasında <point.A>ve <point.B>metre olarak gidilen mesafeyi verecektir (elbette Google Haritalar'a göre).


Bu harika! Karga gibi uçar mesafeye ne dersiniz?
Dustin Kirkland

0

Bunu yapmak için Excel işlevinde veya uzantısında yerleşik olduğunu düşünmüyorum.

Bu Kaynak Forge sayfasına göz atmak isteyebilirsiniz: http://zips.sourceforge.net/

  • Posta Kodlarını Enlem / Boyuta dönüştürmek için bir CSV veri kümesi sağlar (muhtemelen merkez nokta)
  • İki lat / uzun koordinat arasındaki "karga sinekleri" mesafesini hesaplamak için Excel kodu sağlar. (ve Java, PHP ve Python için eşdeğer kod içerir.

Excel işlevi

=IF(SIN(Lat1) * SIN(Lat2) + COS(Lat1) * COS(Lat2) * COS(Long1 - Long2) > 1,
  RadiusofEarth * ACOS(1), RadiusofEarth *
  ACOS(SIN(Lat1) * SIN(Lat2) + COS(Lat1) * COS(Lat2) * COS(Long1-Long2)))

Sayfa, açıların Radyan cinsinden olması gerektiğini ve Excel'in dereceden Radyan'a dönüştürme işlevine sahip olduğunu not eder:

=RADIAN(degrees)

Başkası daha kısa bir cevaba sahip olmadığı sürece, bu çok fazla iş yapmadan istediğinizi elde etmenizi sağlayacaktır.


evet, ama "karga uçarken" yerine kat edilen mesafe ne olacak?

1
Bu çok daha zordur ve Mapquest, Google Earth, Streets & Trips (veya MapPoint) 'te yapıldığı gibi tüm yollar hakkında bilgi gerektirir. Bu uygulamalardan herhangi birinin uygun bir API olup olmadığını bilmiyorum.

Öte yandan, oldukça sınırlı sayıda şehir için kaba ve hazır bir yaklaşım arıyorsanız, sürüş haritaları ve atlaslarda oldukça yaygın olan sürüş mesafesi tablolarını arayabilirsiniz. Bu veri stilini Excel'de çoğaltmak ve konum çiftleri için almak üzere bir arama oluşturmak Excel'de kesinlikle mümkündür. Bu itiraz ederse, cevap verin ve bunun için bir işlev çalıştırabilirim.

1
OP, Google E-Tablolar'ı kullanır.
Jacob Jan Tuinstra

İlginç formül nedeniyle +1, ancak bunu kullanmak muhtemelen pratik değildir.
Nick Bolton


-1

Google Developers , Google E-Tablolar'da kullandığım ve gerçekten keyif aldığım harita ile ilgili işlevler için çok sağlam bir komut dosyası sunuyor . Tüm talimatlar web sayfasında da bulunmaktadır.


1
"Tam talimatlar" ın kilit noktalarından bazılarını özetleyebilir misiniz? Yanıtlar tek başına durmalı ve harici kaynaklara bağlı olmamalıdır (ancak bir Google sitesinin kaybolma olasılığının düşük olduğunu anlıyorum). Teşekkürler!
jonsca

-2

Size tam olarak nasıl yapılacağını söyleyecek API'lara yeterince aşina değilim, ancak Google Haritalar API'sını kullanarak bunun mümkün olacağını düşünürdüm .

Google Haritalar, elbette, API'ları aracılığıyla bir noktadan diğerine yol tarifi sağlayabilir. Karmaşık olabilir, ancak konumları e-tablodan API'ya yönlendirmek ve şehirler arasında sürüş mesafesi sağlayacak sürüş talimatları almak mümkündür.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.